GN⁺: Gemma.cpp: Gemma 모델을 위한 경량 & 스탠드얼론 C++ 추론 엔진
(github.com/google)- 구글의 Gemma 모델을 위한 경량, 독립 실행형 C++ 추론 엔진
- 누구를 위한 프로젝트인가 ?
- 현대의 대규모 언어 모델(LLM) 추론 엔진은 전통적인 신경망 런타임을 넘어서는 맞춤형 기능을 가진 복잡한 시스템임
- 고수준 알고리듬과 저수준 계산의 공동 설계를 통한 연구와 혁신의 기회가 있으나, 실험을 위해 설계되지 않은 C++ 추론 런타임과 저수준 계산을 추상화하는 Python 중심의 ML 연구 프레임워크 사이에는 격차가 존재함
- gemma.cpp는 Gemma 2B와 7B 모델의 최소 구현을 제공하며, 일반성보다는 단순성과 직접성에 중점을 둠
- gemma.cpp는 실험과 연구 사례를 목표로 하며, 최소한의 의존성으로 다른 프로젝트에 쉽게 통합될 수 있고, 약 2K LoC의 핵심 구현과 4K LoC의 지원 유틸리티로 쉽게 수정 가능
- CPU 추론을 위해 Google Highway Library의 이식 가능한 SIMD를 활용
- 프로덕션용 배포를 위해서는 JAX, Keras, PyTorch, Transformers와 같은 Python 프레임워크를 사용하는 표준 배포 경로를 권장
빠른 시작
시스템 요구 사항
- 시작하기 전에 CMake, Clang C++ 컴파일러(C++17 이상 지원), Kaggle에서 아카이브 추출을 위한
tar
가 설치되어 있어야 함
1단계: Kaggle에서 모델 가중치와 토크나이저 획득
- Kaggle의 Gemma 모델 페이지를 방문하여
Model Variations |> Gemma C++
를 선택 -
Variation
드롭다운에는 bfloat16 가중치(더 높은 충실도)와 8비트 전환된 부동 소수점 가중치(더 빠른 추론) 옵션이 포함됨 - 일반적으로
-sfp
체크포인트로 시작하는 것을 권장
2단계: 파일 추출
- 동의서를 작성한 후
archive.tar.gz
파일을 다운로드하여 추출 - 추출된 파일에는 모델 가중치(예:
2b-it-sfp.sbs
)와 토크나이저 파일(tokenizer.spm
)이 포함됨 - 이 파일들을 편리한 디렉토리 위치로 이동할 수 있음(예: 이 리포지토리의
build/
디렉토리)
3단계: 빌드
- 빌드 시스템은 CMake를 사용함
- gemma 추론 런타임을 빌드하기 위해 빌드 디렉토리를 생성하고, 최상위 프로젝트 디렉토리에서
cmake
를 사용하여 빌드 파일을 생성 - 8비트 전환된 부동 소수점 가중치(sfp)의 경우, 옵션 없이 cmake를 실행
- bfloat16 가중치를 다운로드한 경우, 위와 같이 옵션 없이 cmake를 실행하는 대신, WEIGHT_TYPE을 highway의
hwy::bfloat16_t
타입으로 설정하여 cmake를 실행 - 적절한
cmake
명령을 실행한 후,build/
디렉토리로 이동하여make
를 실행하여./gemma
실행 파일을 빌드
4단계: 실행
-
build/
디렉토리 내에서gemma
를 실행할 수 있음 -
gemma
는 필수 인자를 가지며, 예시로2b-it-sfp.sbs
가중치 파일과tokenizer.spm
토크나이저 파일을 사용하여 실행할 수 있음
사용법
-
gemma
는 verbosity 플래그에 의해 제어되는 다양한 사용 모드를 가짐 - 모든 사용 모드는 현재 대화형으로, 새로운 줄 입력 시 텍스트 생성을 트리거
대화형 터미널 앱
- 기본적으로 verbosity는 1로 설정되어 있으며,
gemma
가 호출될 때 터미널 기반의 대화형 인터페이스를 제공
명령 줄 도구로 사용
-
gemma
실행 파일을 명령 줄 도구로 사용하기 위해, gemma.cpp에 대한 인자가 완전히 지정된 별칭을 생성하는 것이 유용할 수 있음
프로젝트에 gemma.cpp 라이브러리 포함
- gemma.cpp를 자체 프로젝트에 포함하는 가장 쉬운 방법은
FetchContent
를 사용하여 gemma.cpp와 의존성을 가져오는 것 - CMakeLists.txt에 다음을 추가할 수 있음
gemma.cpp를 라이브러리로 빌드
- gemma.cpp는 자체 프로젝트에서 라이브러리 의존성으로 사용될 수 있으며,
libgemma
대상을 빌드하여 공유 라이브러리 아티팩트를 생성할 수 있음
감사의 말과 연락처
- gemma.cpp는 2023년 가을에 Austin Huang과 Jan Wassenberg에 의해 시작되었으며, Phil Culliton, Paul Chang, Dan Zheng의 기여로 2024년 2월에 출시됨
- 이것은 공식적으로 지원되는 Google 제품이 아님.
GN⁺의 의견:
- gemma.cpp는 대규모 언어 모델을 실험하고 연구하는 데 유용한 도구로, C++ 기반의 경량화된 추론 엔진을 제공함으로써 기존의 Python 중심 프레임워크와의 격차를 해소하는 데 기여함
- 이 프로젝트는 오픈 소스 커뮤니티에 기여할 수 있는 기회를 제공하며, Google의 오픈 소스 지침을 따르는 것이 중요함을 강조
- gemma.cpp는 다양한 사용 모드를 제공하여 개발자와 연구자가 자신의 프로젝트에 쉽게 통합하고 사용할 수 있도록 설계되었으며, 이는 AI 및 ML 분야의 혁신을 촉진할 수 있는 잠재력을 가짐
Hacker News 의견
-
해커뉴스 댓글 요약:
-
Austin의 소개 및 프로젝트 설명:
- Austin은 프로젝트의 공동 저자로, 질문에 답하겠다고 함.
- gemma.cpp는 llama.cpp/ggml과 독립적이며, llama.cpp 프로젝트의 영감을 받았음.
- gemma.cpp는 gemma의 직접 구현으로, 실험 및 연구와 이식성 및 쉬운 수정에 중점을 둠.
- 초기 구현은 CPU SIMD 중심이며, GPU 지원에 대한 옵션을 모색 중임.
- Gemma 모델 자체에 대한 질문은 다른 동료가 답변할 것이며, 이는 C++ 구현이지만 모델 훈련 과정과는 상대적으로 독립적임.
- Google의 소규모 팀에서 작업했으며, 다른 사람들이 유용하게 사용하기를 바람.
- 프로젝트에 대한 트위터 스레드 링크 제공.
-
Google의 LLM 경쟁력에 대한 의견:
- Google이 OpenAI에 비해 상업적 제품에서 뒤처져 있다는 비판이 있지만, LLM 분야에서는 매우 유능함.
- Google이 움직임을 시작하면 인상적인 성과를 낼 것이라는 의견.
- Facebook과 Llama 덕분에 오픈소스 경쟁이 계속되길 바라며, OpenAI가 원래의 미션에서 멀어지고 있음에도 그들의 초기 비전이 중요함을 기억해야 함.
-
빌드 시스템에 대한 질문:
- 왜 Google이 bazel을 빌드 시스템으로 사용하지 않았는지 궁금해하는 댓글.
-
Gemma의 성과에 대한 칭찬:
- Gemma가 HHEM 리더보드에 추가되었으며, 작은 모델들 사이에서 낮은 환각율을 보여주고 있음.
-
LLM 오픈소스 생태계의 발전 속도에 대한 감탄:
- LLM 오픈소스 생태계의 발전 속도가 매우 빠르며, 새로운 정보와 코드가 계속해서 나오고 있음.
-
모델 포맷에 대한 질문:
- GGUF, GGML 등 다양한 모델 포맷에 대한 차이점과 이들이 어떻게 관리되는지에 대한 설명을 요청하는 댓글.
-
LLM의 수학 능력에 대한 토론:
- LLM이 수학 문제를 잘 해결하지 못한다는 설명과, ChatGPT가 수학 문제를 잘 해결하는 것처럼 보이는 이유에 대한 토론.
- LLM 프로젝트들이 플러그인 모델을 지원하는지, 그리고 llama.cpp를 사용하여 개발한 시스템에 플러그인 접근 방식을 적용할 수 있는지에 대한 질문.
-
Gemma의 콘텐츠 제한 여부에 대한 질문:
- Gemma가 Gemini처럼 콘텐츠 제한 기능을 내장하고 있는지, 아니면 그것이 Gemini 애플리케이션의 특징인지에 대한 질문.
-
gemma.cpp에 대한 감사와 향후 기능 추가에 대한 기대:
- gemma.cpp 저장소에 대한 감사를 표하며, Python 래퍼를 개발했다고 함.
- gemma.cpp 팀에서 새로운 기술을 업데이트할 때마다 쉽게 사용할 수 있도록 Python 래퍼를 개발함.
-
Gemma 모델의 실행 파일 크기에 대한 질문:
- Gemma 모델을 최소한의 커맨드 라인 인터페이스로 구축하고 오프라인에서 실행 가능한 독립 실행형 파일로 만들 경우 최종 실행 파일의 크기가 얼마나 될지에 대한 질문.
-