PyTorchKR


- Google
에서 가벼운 LLM인 Gemma와 함께 경량화된 C++ 추론 엔진인
gemma.cpp
를 함께 공개했습니다. 정말 Google이 칼을 갈았구나 싶은데요, 2B와 7B 모델 모두 bflot16과 8bit 변환 소수점(SFP, Switched Floating Point)으로 변환한 모델 가중치들까지 공개하고 있습니다. 이번 주말에는gemma.cpp
로 로컬에서 2B 모델 한 번 돌려보시는건 어떠실까요? - 이 글은 GPT 모델로 정리한 것으로, 잘못된 부분이 있을 수 있으니 글 아래쪽의 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
gemma.cpp: Gemma 모델의 빠른 실행을 위한 C++ 추론 엔진 (by Google)
gemma.cpp 소개
gemma.cpp는 Google이 공개한 경량 LLM인 Gemma 모델들을 위한 경량(lightweight), 독립적으로 실행이 가능한(standalone) C++ 추론 엔진입니다.
Gemma-2B와 7B 모델의 추론을 위한 최소 구현을 제공하며, 전체 일반성보다는 단순성과 직접성에 중점을 둡니다. 이는 ggml, llama.c, llama.rs와 같은 수직 통합 모델 구현에서 영감을 받았습니다.
gemma.cpp는 실험 및 연구 목적으로의 사용을 대상으로 구현 및 공개되었습니다. 즉, 최소한의 의존성으로 다른 프로젝트에 쉽게 내장될 수 있도록 설계되었으며, 작은 약 2K LoC의 핵심 구현(약 4K LoC의 지원 유틸리티와 함께)으로 쉽게 수정할 수 있습니다. CPU 추론을 위한 휴대용 SIMD를 활용하기 위해 Google Highway 라이브러리를 함께 사용합니다.
Edge에서의 배포를 위해서는 JAX, Keras, PyTorch, Transformers와 같은 Python 프레임워크를 사용하는 표준 배포 경로를 권장합니다.
빠른 시작
시스템 요구 사항
시작하기 전에 다음을 설치해야 합니다:
- CMake
- homebrew가 설치된 macOS에서는
brew install --cask cmake
으로 설치할 수 있습니다.
- homebrew가 설치된 macOS에서는
- 최소 C++17을 지원하는 Clang C++ 컴파일러.
- Kaggle에서 아카이브를 추출하기 위한
tar
.
1단계: Kaggle에서 모델 가중치와 토크나이저 내려받기
Kaggle의 Gemma 모델 페이지를 방문하고 Model Variations |> Gemma C++
을 선택하세요. 이 탭에서 Variation
드롭다운에는 아래 옵션이 포함됩니다. bfloat16 가중치는 더 높은 충실도를 제공하는 반면, 8비트 전환 부동 소수점 가중치는 더 빠른 추론을 가능하게 합니다.
2B 지시 조정(Instruction Tuning, it
) 및 사전 훈련된(Pre-Trained, pt
) 모델:
모델 이름 | 설명 |
---|---|
2b-it |
2B 파라매터의 지시 조정 모델, bfloat16 |
2b-it-sfp |
2B 파라매터의 지시 조정 모델, 8-bit 전환 부동 소수점 |
2b-pt |
2B 파라매터의 사전 훈련된 모델, bfloat16 |
2b-pt-sfp |
2B 파라매터의 사전 훈련된 모델, 8-bit 전환 부동 소수점 |
7B 지시 조정(Instruction Tuning, it
) 및 사전 훈련된(Pre-Trained, pt
) 모델:
모델 이름 | 설명 |
---|---|
7b-it |
7B 파라매터의 지시 조정 모델, bfloat16 |
7b-it-sfp |
7B 파라매터의 지시 조정 모델, 8-bit 전환 부동 소수점 |
7b-pt |
7B 파라매터의 사전 훈련된 모델, bfloat16 |
7b-pt-sfp |
7B 파라매터의 사전 훈련된 모델, 8-bit 전환 부동 소수점 |
처음 시작하실 때에는 2b-it-sfp
모델을 사용하시는 것을 권장합니다.
2단계: 파일 추출
Gemma 모델 사용 동의 후, archive.tar.gz
라는 tar 아카이브 파일을 검색하여 다운로드해야 합니다. archive.tar.gz
에서 파일을 추출하세요(몇 분 정도 걸릴 수 있습니다):
tar -xf archive.tar.gz
위 단계를 통해 (1) 모델 가중치 파일(예. 2b-it-sfp.sbs
)과 (2) Tokenizer 파일(예. tokenizer.spm
)을 확인할 수 있습니다. 이후 단계에서 이 파일들을 사용하기 위해 접근이 편한 경로에 이동해두세요. (예. build/
디렉토리 등)
3단계: 빌드
gemma.cpp는 CMake를 사용하여 빌드합니다. gemma 추론 런타임을 빌드하려면 빌드 디렉토리를 생성하고 상위 프로젝트 디렉토리에서 cmake
를 사용하여 빌드 파일을 생성하세요:
(cd build && cmake ..)
그런 다음 make
를 실행하여 ./gemma
실행 파일을 빌드하세요:
cd build
make -j [사용할 병렬 스레드 수] gemma
# 예. make -j 8 gemma
이 때, Windows Subsystem for Linux (WSL) 사용자는 병렬 스레드 수를 1로 설정해야 합니다. 더 큰 숫자를 사용하면 오류가 발생할 수 있습니다.
빌드가 성공적으로 완료되면 build/
디렉토리에 gemma
실행 파일이 생성됩니다.
4단계: 실행
build/
디렉토리 내부에서 gemma
파일을 실행합니다.
실행 시 필수 인수(argument)를 가집니다:
인수(argument) | 설명 | 예시 값 |
---|---|---|
--model |
모델 유형. | 2b-it , 2b-pt , 7b-it , 7b-pt , ... (위 참조) |
--compressed_weights |
압축된 가중치 파일. | 2b-it-sfp.sbs , ... (위 참조) |
--tokenizer |
토크나이저 파일. | tokenizer.spm |
예를 들어, 아래와 같이 실행할 수 있습니다.
./gemma \
--tokenizer [2단계에서 추출한 토크나이저 파일] \
--compressed_weights [2단계에서 내려받은 모델 파일] \
--model [1단계에서 내려받은 모델 종류 (예. 2b-it, 2b-pt, 7b-it 등)]
예를 들어, 다음과 같은 구성으로 파일을 다운로드 받았다고 가정하면,
- 모델 가중치:
2b-it-sfp.sbs
(2B 지시 조정 모델, 8-bit 전환 부동 소수점). - Tokenizer:
tokenizer.spm
.
다음과 같이 실행하시면 됩니다:
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
사용법
gemma
실행 시 verbosity
옵션을 통해 얼마나 상세하게 출력할지를 제어할 수 있습니다.
모든 사용 모드는 현재 대화형이며, 새 줄 입력 시 텍스트 생성을 트리거합니다.
상세도 | 사용 모드 | 세부 사항 |
---|---|---|
--verbosity 0 |
최소 | 생성 출력만 인쇄합니다. CLI 도구로 적합합니다. |
--verbosity 1 |
기본 | 표준 사용자 지향 터미널 UI입니다. (기본값) |
--verbosity 2 |
상세 | 추가 개발자 및 디버그 정보를 보여줍니다. |
대화형 터미널 앱(Interactive Terminal App)
기본적으로 verbosity
값은 1로 설정되어 gemma
실행 시 아래와 같은 터미널 기반 대화형 인터페이스를 불러옵니다:
$ ./gemma [...]
__ _ ___ _ __ ___ _ __ ___ __ _ ___ _ __ _ __
/ _` |/ _ \ '_ ` _ \| '_ ` _ \ / _` | / __| '_ \| '_ \
| (_| | __/ | | | | | | | | | | (_| || (__| |_) | |_) |
\__, |\___|_| |_| |_|_| |_| |_|\__,_(_)___| .__/| .__/
__/ | | | | |
|___/ |_| |_|
tokenizer : tokenizer.spm
compressed_weights : 2b-it-sfp.sbs
model : 2b-it
weights : [no path specified]
max_tokens : 3072
max_generated_tokens : 2048
*Usage*
Enter an instruction and press enter (%Q quits).
*Examples*
- Write an email to grandma thanking her for the cookies.
- What are some historical attractions to visit around Massachusetts?
- Compute the nth fibonacci number in javascript.
- Write a standup comedy bit about WebGPU programming.
> What are some outdoorsy places to visit around Boston?
[ Reading prompt ] .....................
**Boston Harbor and Islands:**
* **Boston Harbor Islands National and State Park:** Explore pristine beaches, wildlife, and maritime history.
* **Charles River Esplanade:** Enjoy scenic views of the harbor and city skyline.
* **Boston Harbor Cruise Company:** Take a relaxing harbor cruise and admire the city from a different perspective.
* **Seaport Village:** Visit a charming waterfront area with shops, restaurants, and a seaport museum.
**Forest and Nature:**
* **Forest Park:** Hike through a scenic forest with diverse wildlife.
* **Quabbin Reservoir:** Enjoy boating, fishing, and hiking in a scenic setting.
* **Mount Forest:** Explore a mountain with breathtaking views of the city and surrounding landscape.
...
그 외 gemma.cpp
를 다른 프로젝트에 통합하는 방법은 gemma.cpp
의 GitHub 저장소를 확인해주세요.
마지막으로, gemma.cpp
는 공식적으로 지원되는 Google 제품이 아니므로 이에 유의해주세요.
GitHub 저장소
https://github.com/google/gemma.cpp
Gemma 모델 가중치 확인 및 다운로드
Gemma 모델 살펴보기
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 뉴스 발행에 힘이 됩니다~