# Gemma.cpp: Gemma 모델을 위한 경량 & 스탠드얼론 C++ 추론 엔진

> Clean Markdown view of GeekNews topic #13502. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13502](https://news.hada.io/topic?id=13502)
- GeekNews Markdown: [https://news.hada.io/topic/13502.md](https://news.hada.io/topic/13502.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-02-24T13:35:52+09:00
- Updated: 2024-02-24T13:35:52+09:00
- Original source: [github.com/google](https://github.com/google/gemma.cpp)
- Points: 11
- Comments: 1

## Topic Body

- 구글의 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⁺의 의견:  
1. gemma.cpp는 대규모 언어 모델을 실험하고 연구하는 데 유용한 도구로, C++ 기반의 경량화된 추론 엔진을 제공함으로써 기존의 Python 중심 프레임워크와의 격차를 해소하는 데 기여함  
2. 이 프로젝트는 오픈 소스 커뮤니티에 기여할 수 있는 기회를 제공하며, Google의 오픈 소스 지침을 따르는 것이 중요함을 강조  
3. gemma.cpp는 다양한 사용 모드를 제공하여 개발자와 연구자가 자신의 프로젝트에 쉽게 통합하고 사용할 수 있도록 설계되었으며, 이는 AI 및 ML 분야의 혁신을 촉진할 수 있는 잠재력을 가짐

## Comments



### Comment 23278

- Author: neo
- Created: 2024-02-24T13:35:52+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39481554) 
- **해커뉴스 댓글 요약:**
  - **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 모델을 최소한의 커맨드 라인 인터페이스로 구축하고 오프라인에서 실행 가능한 독립 실행형 파일로 만들 경우 최종 실행 파일의 크기가 얼마나 될지에 대한 질문.*
