Skip to content

JoonkyuChoi/gemma.cpp-kr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

gemma.cpp (for korean)

안내 및 라이선스 (Notice & License)

본 저장소는 개발자의 Portfolio 목적으로 운영되며, 개인적인 학습에 이해를 돕기 위해 공개하였습니다.

본 저장소는 2025.03.25 날짜를 기준으로 Google의 gemma.cpp 원본 소스를 기반으로 수정 및 보완되었습니다.
주요 변경 및 추가 사항은 다음과 같습니다:

  • 한글화: markdown 문서의 한글화
  • MSVC 빌드: Windows 환경에서의 빌드 호환성 및 폴더 구성
  • 추가 자료: 시스템 구조 이해를 돕는 문서·도면 포함

[주의 사항] 본 프로젝트의 사용자는 원본 저작자인 Google의 Gemma Terms of UseApache License 2.0을 반드시 확인하고 준수해야 합니다.

본 프로젝트가 Decoder-only Transformer 아키텍처를 학습하고 연구하는 분들에게 실질적인 도움이 되기를 기원합니다.

개요

gemma.cpp는 Google의 Gemma 기반 모델을 위한, 가볍고 독립적인 C++ 추론 엔진입니다.

gemma.cpp에서 추론 가능한 훈련 모델들은 [Flax > JAX > XLA] 개발 환경에 모델을 구성하고, 훈련 데이터를 학습시킨 것으로 알려져 있습니다.
따라서, gemma.cpp의 훈련 엔진은 JAX(Flax) 개발 환경에 해당하며, Gemma 모델을 구성시킨 정보(토크나이저/가중치)와, 훈련 데이터까지 준비된다면, 동일한 모델을 제작할 수 있습니다.
실제로, gemma.cpp에서 추론가능한 훈련 모델들은 JAX(Flax)로 제작되었지만, 어떻게 구성시켜 훈련시켰는지, 정보가 공개되지 않았습니다.
만약에, 훈련 모델을 직접 제작하여 추론하고 싶다면, JAX(Flax) 개발환경을 구성해야만 합니다.

본 프로젝트를 분석하면, 최소한 C++ SIMD 최적화 라이브러리인, Highway 사용법을 익히는 데, 도움이 될 것입니다.
gemma.cpp에서 사용 가능한 모델들은 제한된 타입으로 공개되어 있지만, 모델 파일 포맷은 공개되지 않았습니다.

Gemma에 대한 추가 정보는 ai.google.dev/gemma를 참조하세요.
gemma.cpp 관련 아티팩트를 포함한 모델 가중치는 available on kaggle에서 확인할 수 있습니다.

본 프로젝트는 누구를 위한 것인가?

최신 LLM 추론 엔진은 정교한 시스템으로, 기존 신경망 런타임을 넘어, 맞춤형 기능을 제공하는 경우가 많습니다.
이러한 시스템은 고수준 알고리즘과, 저수준 계산의 공동 설계를 통해, 연구 및 혁신의 기회를 제공합니다.
그러나, 실험용으로 설계되지 않은 배포 중심의 C++ 추론 런타임과, 컴파일을 통해 저수준 계산을 추상화하는 Python 중심의 ML 연구 프레임워크 사이에는 간극이 존재합니다.

gemma.cpp는 [Gemma-1/Gemma-2/Gemma-3/PaliGemma] 모델의 간소한 구현을 제공하며, 완전한 일반화 보다는 단순성과 직접성에 중점을 둡니다.
이는 ggml, llama.c, llama.rs와 같은, 수직 통합 모델 구현에서 영감을 받았습니다.

gemma.cpp는 실험 및 연구 사용 사례를 대상으로 합니다.
최소한의 종속성으로 다른 프로젝트에 쉽게 임베드할 수 있도록 설계되었으며, 약 2K LoC의 작은 코어 구현(약 4K LoC의 지원 유틸리티 포함)으로 쉽게 수정할 수 있습니다.
CPU 추론을 위한, 이식성 있는 SIMD를 활용하기 위해, Google Highway 라이브러리를 사용합니다.

생산 지향적인 엣지 배포의 경우, [JAX/Keras/PyTorch/Transformers]와 같은 Python 프레임워크를 사용하는 표준 배포 경로를 권장합니다.
(모든 모델 변형은 여기 참조)

기여

크고 작은 커뮤니티 기여를 환영합니다.
개발자 참여 관련 추가 정보는 개발자 노트에서 확인하실 수 있으며, 이 초대 링크를 통해 디스코드에 참여하실 수 있습니다.
이 프로젝트는 Google의 오픈소스 커뮤니티 가이드라인을 준수합니다.

활발한 개발은 현재 dev브랜치에서 진행 중입니다
더 안정적일 것으로 예상되는 main 대신에, dev 브랜치를 타겟으로 풀 리퀘스트를 열어주세요.

용어 정의

상세 보기

Gemma (Decoder-Only Transformer) Architecture

Gemma는 ChatGPT와 같이, 응용 대화에 뛰어난 Decoder-only Transformer 구조를 사용한다.
아래의 도면은 Gemma의 전체 구조를 나타내며, Gemma.cpp는 추론 부분에 해당한다.
Gemma

의존 라이브러리들

폴더 설명

  /
  ├─ backprop/            # [C++] 역전파신경망 소스코드
  ├─ bazel/               # 빌드툴 구성파일
  ├─ build/               # 빌드 구성
  ├┬ compression/         # [C++] 압축 관련 소스코드
  │└┬ python/            # [Python] 소스코드
  │  └─ pytree/          # [Pytree] 소스코드
  ├─ docs/                # 문서 파일
  ├─ evals/               # [C++] 평가 소스코드
  ├─ examples/            # [C++] 예제 소스코드
  ├─ experimental/        # 실험용
  ├─ gemma/               # [C++] 코어 소스코드
  ├─ goldens/             # [TXT] 명령조정 모델 평가용문장?
  ├─ models/              # [BIN] 모델(토크나이저/가중치) 파일들
  ├─ ops/                 # [C++] 운영 소스코드
  ├─ paligemma/           # [C++] PaliGemma 실행 소스코드
  ├─ python/              # [C++/Python] Gemma 실행 소스코드
  └─ util/                # [C++] 유틸리티 소스코드

폴더/파일 구성

상세 보기

빠른 시작

시스템 요구사항들

시작하기 전에, 다음을 설치해야 합니다.

Windows에서 기본적으로 빌드하려면, Visual Studio 2022 빌드 도구와, 옵션으로 Clang/LLVM C++ 프런트엔드(clang-cl)가 필요합니다.
이것들은 winget과 함께, 명령줄에서 다음과 같이 설치할 수 있습니다.

> winget install --id Kitware.CMake
> winget install --id Microsoft.VisualStudio.2022.BuildTools --force --override "--passive --wait --add Microsoft.VisualStudio.Workload.VCTools;installRecommended --add Microsoft.VisualStudio.Component.VC.Llvm.Clang --add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset"

Windows 빌드 및 실행

상세 보기

Step 1: Kaggle 또는 Hugging Face Hub에서 모델가중치 및 토크나이저 가져오기

Gemma-2 또는 Gemma-1 Kaggle 페이지를 방문하여, Model Variations |> Gemma C++를 선택하세요.

이 탭의 Variation 드롭다운 메뉴에는 아래 옵션이 포함되어 있습니다.
bfloat16 가중치는 정확도가 더 높고, 8비트 스위치 부동 소수점 가중치는 추론 속도를 높입니다.
일반적으로 -sfp 체크포인트부터 시작하는 것이 좋습니다.

어떤 모델부터 시작해야 할지 확실하지 않다면, 가장 작은 Gemma-2 모델부터, 시작하는 것이 좋습니다.
예: 2.0-2b-it-sfp

또는 Hugging Face Hub에서 gemma.cpp 모델을 방문하세요.
먼저 원하는 모델의 모델 저장소로 이동하세요. (아래 권장 사항 참조)
그런 다음, Files and versions 탭을 클릭하고, 모델 및 토크나이저 파일을 다운로드하세요.
프로그래밍 방식으로 다운로드하려면, huggingface_hub 설치가 완료된 경우, 다음 명령어를 실행하여 다운로드할 수도 있습니다.

> huggingface-cli login # Just the first time
> huggingface-cli download google/gemma-2b-sfp-cpp --local-dir build/

Gemma-1 2B 명령조정(it)과 사전학습(pt) 모델:

Model name Description
2b-it 2 billion parameter instruction-tuned model, bfloat16
2b-it-sfp 2 billion parameter instruction-tuned model, 8-bit switched floating point
2b-pt 2 billion parameter pre-trained model, bfloat16
2b-pt-sfp 2 billion parameter pre-trained model, 8-bit switched floating point

Gemma-1 7B 명령조정(it)과 사전학습(pt) 모델:

Model name Description
7b-it 7 billion parameter instruction-tuned model, bfloat16
7b-it-sfp 7 billion parameter instruction-tuned model, 8-bit switched floating point
7b-pt 7 billion parameter pre-trained model, bfloat16
7b-pt-sfp 7 billion parameter pre-trained model, 8-bit switched floating point

Note

중요: 실행을 시작하려면 2b-it-sfp 모델로 시작하는 것이 좋습니다.

Gemma 2 모델은 2B의 경우 gemma2-2b-it이고, 9b-it 또는 27b-it 입니다.
common.cc에서 kModelFlags 정의를 참조하세요.

Step 2: 파일 추출

Hugging Face에서 모델을 다운로드 한다면, 3단계로 건너뛰세요.

동의서를 작성한 후, 다운로드를 진행하여 archive.tar.gz라는 tar 압축 파일을 검색합니다.
archive.tar.gz에서 파일을 추출합니다.(몇 분 정도 걸릴 수 있습니다)

> tar -xf archive.tar.gz

이렇게 하면 2b-it-sfp.sbs같은 모델가중치를 포함하는 파일과, 토크나이저 파일(tokenizer.spm)이 생성됩니다.
이러한 파일을 편리한 디렉토리 위치(예: 이 저장소의 build/ 디렉토리)로 옮기는 것이 좋습니다.

Step 3: 빌드

빌드 시스템은 CMake를 사용합니다.
Gemma 추론 런타임을 빌드하려면, 빌드 디렉토리를 만들고 최상위 프로젝트 디렉토리에서, cmake를 사용하여 빌드 파일을 생성하세요.
이전에 cmake를 실행했고, 다른 설정으로 다시 실행하는 경우, rm -rf build/*를 사용하여 build/ 디렉토리에 있는 모든 파일을 삭제해야 합니다.

유닉스 계열 플랫폼

> cmake -B build

cmake를 실행한 후, build/ 디렉토리로 들어가서 make를 실행하여, ./gemma 실행 파일을 빌드할 수 있습니다.

# Configure `build` directory
> cmake --preset make

# Build project using make
> cmake --build --preset make -j [number of parallel threads to use]

[number of parallel threads to use]부분을 숫자로 바꾸세요.
시스템에서 사용 가능한 코어 수는 합리적인 추론 기준입니다.
예를 들어, make -j4 gemma는 4개의 스레드를 사용하여 빌드합니다.
nproc 명령을 사용할 수 있는 경우, make -j$(nproc) gemma를 스레드 수의 적절한 기본값으로 사용할 수 있습니다.

-j 플래그의 올바른 값을 모르는 경우, make gemma를 실행하면 ./gemma 실행 파일이 빌드됩니다.

Note

Linux용 Windows 하위 시스템(WSL) 사용자는 병렬 스레드 수를 1로 설정해야 합니다. 더 큰 숫자를 사용하면 오류가 발생할 수 있습니다.

빌드가 성공하면 이제 build/ 디렉토리에 gemma 실행 파일이 생성될 것입니다.

Windows

# Configure `build` directory
> cmake --preset windows

# Build project using Visual Studio Build Tools
> cmake --build --preset windows -j [number of parallel threads to use]

빌드가 성공하면 이제 build/ 디렉토리에 gemma.exe 실행 파일이 있어야 합니다.

Bazel

> bazel build -c opt --cxxopt=-std=c++20 :gemma

빌드가 성공하면 이제 bazel-bin/ 디렉토리에 gemma 실행 파일이 생성될 것입니다.

Make

Makefiles를 선호한다면, @jart가 여기에서 사용할 수 있도록 만들었습니다.

https://github.com/jart/gemma3/blob/main/Makefile

Step 4: 실행

이제 build/ 디렉터리에서 gemma를 실행할 수 있습니다.

gemma에는 다음과 같은 필수 인수가 있습니다.

Argument Description Example value
--model The model type. 2b-it ... (see below)
--weights The compressed weights file. 2b-it-sfp.sbs
--weight_type The compressed weight type. sfp
--tokenizer The tokenizer file. tokenizer.spm

gemma는 다음과 같이 호출됩니다.

> ./gemma \
--tokenizer [tokenizer file] \
--weights [compressed weights file] \
--weight_type [f32 or bf16 or sfp (default:sfp)] \
--model [2b-it or 2b-pt or 7b-it or 7b-pt or ...]

다음 구성에 대한 호출 예:

  • 2b-it-sfp.sbs : 압축된 가중치 파일 (2B 명령조정 모델, 8비트 부동소수점 전환)
  • tokenizer.spm : 토크나이저 파일
> ./gemma \
--tokenizer tokenizer.spm \
--weights 2b-it-sfp.sbs --model 2b-it

RecurrentGemma

이 저장소에는 Griffin 기반 Gemma 버전이 포함되어 있습니다. (논문, 코드)
Gemma 아키텍처는 순환 계층과 로컬 어텐션을 모두 포함하므로, 긴 시퀀스에 더 효율적이며, 표준 Gemma보다 메모리 사용량이 적습니다.
본 논문을 기반으로 이 모델의 C++ 구현을 제공합니다.

이 저장소에 포함된 Gemma 순환 버전을 사용하려면, 위 3단계에서 설명한 대로 Gemma 바이너리를 빌드합니다.
1단계와 같이, RecurrentGemma Kaggle에서 압축된 가중치와 토크나이저를 다운로드하고, 다음과 같이 바이너리를 실행합니다.
./gemma --tokenizer tokenizer.spm --model gr2b-it --weights 2b-it-sfp.sbs

PaliGemma VLM(Vision-Language Model)

이 저장소에는 PaliGemma VLM(논문, 코드)
및 후속버전인 PaliGemma 2(논문)가 포함되어 있습니다.
여기에서는 PaliGemma 모델군의 C++ 구현을 제공합니다.

이 저장소에 포함된 PaliGemma 버전을 사용하려면, 위 3단계에서 설명한 대로 gemma 바이너리를 빌드하세요.
Kaggle에서 압축된 가중치와 토크나이저를 다운로드하고, 다음과 같이 바이너리를 실행하세요.

> ./gemma \
--tokenizer paligemma_tokenizer.model \
--model paligemma-224 \
--weights paligemma-3b-mix-224-sfp.sbs \
--image_file paligemma/testdata/image.ppm

이미지 읽기 코드는 현재 이미지 처리 라이브러리에 의존하지 않도록 매우 기본적인 코드입니다.
현재는 바이너리 PPM(P6) 읽기만 지원합니다.
따라서 convert와 같은 도구를 사용하여, 이미지를 해당 형식으로 먼저 변환하세요.
예:
convert image.jpeg -resize 224x224^ image.ppm

(이미지는 처리 과정에서 크기가 조정되므로, 로딩 속도를 높이기 위해, 이 단계에서 크기를 조정할 수 있습니다.)

이미지와의 상호작용(mix-224 체크포인트 사용)은 다음과 같습니다.

> Describe the image briefly
A large building with two towers in the middle of a city.
> What type of building is it?
church
> What color is the church?
gray
> caption image
A large building with two towers stands tall on the water's edge. The building
has a brown roof and a window on the side. A tree stands in front of the
building, and a flag waves proudly from its top. The water is calm and blue,
reflecting the sky above. A bridge crosses the water, and a red and white boat
rests on its surface. The building has a window on the side, and a flag on top.
A tall tree stands in front of the building, and a window on the building is
visible from the water. The water is green, and the sky is blue.

단일 파일 형식으로 마이그레이션

이제 가중치 파일에 대한 새로운 형식이 추가되었습니다.
이 파일은 토크나이저(및 모델 유형)를 직접 포함할 수 있는 단일 파일입니다.
다중 파일 형식에서 단일 파일 형식으로 마이그레이션하는 도구가 제공됩니다.

> compression/migrate_weights \
  --tokenizer .../tokenizer.spm --weights .../gemma2-2b-it-sfp.sbs \
  --model gemma2-2b-it --output_weights .../gemma2-2b-it-sfp-single.sbs

마이그레이션 후에는 다음과 같이 gemma.cpp와 함께 새로운 가중치 파일을 사용할 수 있습니다.

> ./gemma --weights .../gemma2-2b-it-sfp-single.sbs

문제 해결 및 FAQ

./gemma 실행에서, "Failed to read cache gating_ein_0 (error 294) ..." 실패 발생

가장 흔한 문제는 --weight_type 인수가 모델 파일의 인수와 일치하지 않는다는 것입니다.
3단계를 다시 살펴보고, 어떤 가중치를 다운로드했는지 확인하세요.

가중치 유형을 컴파일 시점 결정에서 런타임 인수로 이미 이동했습니다.
다음 단계에서는 이 정보를 가중치에 적용할 계획입니다.

Windows / Visual Studio 빌딩 문제

현재 Windows를 사용 중이시라면 WSL(Windows Subsystem for Linux)에서 빌드하는 것을 권장합니다.
다른 빌드 구성을 활성화하는 방법을 모색 중입니다.
활발한 논의는 이슈를 참조하세요.

모델이 지시에 응답하지 않고 이상한 출력을 생성합니다.

일반적인 문제는 사전 학습된 모델을 사용하고 있는데, 이 모델이 명령어 튜닝되지 않아, 명령어에 응답하지 않는다는 것입니다.
사전 학습된 모델(-pt 접미사가 붙은 모델)이 아닌 명령어 튜닝된 모델(2b-it-sfp, 2b-it, 7b-it-sfp, 7b-it)을 사용하고 있는지 확인하세요.

어떤 시퀀스 길이가 지원되나요?

configs.cc에서 seq_len을 참조하세요.
1B보다 큰 Gemma 3 모델의 경우, 일반적으로 32K이지만, RAM이 충분하다면 128K도 가능합니다.
긴 시퀀스는 어텐션의 이차 비용 때문에, 속도가 느려질 수 있습니다.

미세 조정을 .sbs 압축 모델 파일로 변환하려면 어떻게 해야 하나요?

PaliGemma(1 및 2) 체크포인트의 경우, python/convert_from_safetensors.py를 사용하여, safetensors 형식에서 변환할 수 있습니다.(bazel을 통해 빌드하여 테스트)
어댑터 모델의 경우, 변환하기 전에 merge_and_unload()를 호출하여, 어댑터 모델을 단일 파일 형식으로 변환해야 할 수 있습니다.

로컬에 (venv) torch, numpy, safetensor, absl-py 등이 설치되어 있다고 가정하고, 압축 라이브러리의 bazel 빌드를 사용하여, 사용하는 방법은 다음과 같습니다.

bazel build //compression/python:compression
BAZEL_OUTPUT_DIR="${PWD}/bazel-bin/compression"
python3 -c "import site; print(site.getsitepackages())"
# Use your sites-packages file here:
ln -s $BAZEL_OUTPUT_DIR [...]/site-packages/compression
python3 python/convert_from_safetensors.py --load_path [...].safetensors.index.json

PyTorch 체크포인트를 변환하는 약간 오래된 옵션은 compression/convert_weights.py를 참조하세요.
(Gemma-2 모델에서 작동하려면 코드를 업데이트해야 할 수 있습니다.)

모델의 실행 속도를 높이는 쉬운 방법은 무엇이 있나요?

  1. 8비트 스위치 부동 소수점 -sfp 모델을 사용하고 있는지 확인하세요.
    이 모델은 bf16의 절반 크기이므로, 메모리 대역폭과 캐시 공간을 덜 사용합니다.
  2. 노트북을 사용하는 경우, 전원 모드가 성능 극대화로 설정되어 있고, 절전 모드가 꺼짐 상태인지 확인하세요.
    대부분의 노트북은 전원이 연결되어 있지 않으면, 절전 모드가 자동으로 활성화됩니다.
  3. 사용하지 않는 CPU 집약적 애플리케이션을 닫습니다.
  4. Mac에서는 성능 코어가 작동하면서, 속도가 "워밍업"되는 현상이 일화적으로 관찰됩니다.
  5. --num_threads 인수 값을 변경해 보세요.
    기기에 따라 숫자가 클수록 성능이 더 좋은 것은 아닙니다.

또한, 더 빠른 추론을 위한 알고리즘 및 최적화 접근 방식도 연구하고 있으니 기대해 주시기 바랍니다.

사용법

gemma에는 세부 정보 표시 플래그로 제어되는 다양한 사용 모드가 있습니다.

모든 사용 모드는 현재 대화형이며, 줄 바꿈 입력 시 텍스트가 생성됩니다.

Verbosity Usage mode Details
--verbosity 0 Minimal Only prints generation output. Suitable as a CLI tool.
--verbosity 1 Default Standard user-facing terminal UI.
--verbosity 2 Detailed Shows additional developer and debug info.

대화형 터미널 앱

기본적으로 자세한 내용은 1로 설정되어 gemma가 호출되면 터미널 기반 대화형 인터페이스가 표시됩니다.

$ ./gemma [...]
  __ _  ___ _ __ ___  _ __ ___   __ _   ___ _ __  _ __
 / _` |/ _ \ '_ ` _ \| '_ ` _ \ / _` | / __| '_ \| '_ \
| (_| |  __/ | | | | | | | | | | (_| || (__| |_) | |_) |
 \__, |\___|_| |_| |_|_| |_| |_|\__,_(_)___| .__/| .__/
  __/ |                                    | |   | |
 |___/                                     |_|   |_|

tokenizer                     : tokenizer.spm
compressed_weights            : 2b-it-sfp.sbs
model                         : 2b-it
weights                       : [no path specified]
max_generated_tokens          : 2048

*Usage*
  Enter an instruction and press enter (%C reset conversation, %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 실행 파일을 명령줄 도구로 사용하려면, gemma.cpp에 대한 별칭을 만들고, 인수를 완전히 지정하면 유용할 수 있습니다.

> alias gemma2b="~/gemma.cpp/build/gemma -- --tokenizer ~/gemma.cpp/build/tokenizer.spm --weights ~/gemma.cpp/build/gemma2-2b-it-sfp.sbs --model gemma2-2b-it --verbosity 0"

위 경로를 다운로드 파일의 모델 및 토크나이저 경로로 직접 변경하세요.

다음은 잘린 입력 파일로 gemma를 호출하는 예시입니다. (위에서 정의한 gemma2b 별칭 사용)

> cat configs.h | tail -n 35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code do: " | gemma2b

Note

gemma.cpp의 CLI 사용은 실험적 단계이므로 컨텍스트 길이 제한을 고려해야 합니다.

위 명령의 출력은 다음과 같습니다.

[ Reading prompt ] [...]
This C++ code snippet defines a set of **constants** used in a large language model (LLM) implementation, likely related to the **attention mechanism**.

Let's break down the code:
[...]

프로젝트에 gemma.cpp를 라이브러리로 통합하기

gemma.cpp를 프로젝트에 통합하는 가장 쉬운 방법은 FetchContent를 사용하여 gemma.cpp와 종속성을 가져오는 것입니다.
CMakeLists.txt에 다음을 추가할 수 있습니다.

include(FetchContent)

FetchContent_Declare(sentencepiece GIT_REPOSITORY https://github.com/google/sentencepiece GIT_TAG 53de76561cfc149d3c01037f0595669ad32a5e7c)
FetchContent_MakeAvailable(sentencepiece)

FetchContent_Declare(gemma GIT_REPOSITORY https://github.com/google/gemma.cpp GIT_TAG origin/main)
FetchContent_MakeAvailable(gemma)

FetchContent_Declare(highway GIT_REPOSITORY https://github.com/google/highway.git GIT_TAG da250571a45826b21eebbddc1e50d0c1137dee5f)
FetchContent_MakeAvailable(highway)

gemma.cpp의 GIT_TAG에 대해, 라이브러리 버전을 고정하려면 origin/main을 특정 커밋 해시로 바꿀 수 있습니다.

실행 파일을 정의한 후 (아래 [Executable Name]을 실행 파일 이름으로 대체)

target_link_libraries([Executable Name] libgemma hwy hwy_contrib sentencepiece)
FetchContent_GetProperties(gemma)
FetchContent_GetProperties(sentencepiece)
target_include_directories([Executable Name] PRIVATE ${gemma_SOURCE_DIR})
target_include_directories([Executable Name] PRIVATE ${sentencepiece_SOURCE_DIR})

라이브러리로 gemma.cpp 빌드

gemma.cpp는 자신의 프로젝트에서 라이브러리 종속성으로 사용할 수도 있습니다.
공유 라이브러리 아티팩트는 gemma 대신 libgemma 대상을 빌드하도록 make 호출을 수정하여 빌드할 수 있습니다.

Note

이전 섹션의 FetchContent 단계를 통해, 자신의 프로젝트에서 gemma.cpp를 사용하는 경우, 라이브러리 빌드는 cmake를 통해 자동으로 수행되므로, 이 섹션을 건너뛸 수 있습니다.

먼저 cmake를 실행합니다.

> cmake -B build

그런 다음 libgemma 대상으로 make를 실행합니다.

> cd build
> make -j [number of parallel threads to use] libgemma

성공하면 이제 build/ 디렉터리에 libgemma 라이브러리 파일이 생성되었을 것입니다.
Unix 플랫폼에서 파일 이름은 libgemma.a입니다.

gemma.cpp를 사용하는 독립 프로젝트

gemma.cpp를 사용하는 몇몇 독립 프로젝트들

귀하의 프로젝트를 포함시키고 싶으시다면, 언제든지 연락하시거나 README.md 편집본과 함께 PR을 제출해 주세요.

감사의 말과 연락처

gemma.cpp는 2023년 가을 Austin HuangJan Wassenberg에 의해 시작되었으며,
Phil Culliton, Paul Chang, Dan Zheng의 기여로 2024년 2월에 출시되었습니다.

Griffin 지원은 아래 기여자들로 2024년 4월에 구현되었습니다.

  Andrey Mikhaylov
  Eugene Kliuchnikov
  Jan Wassenberg
  Jyrki Alakuijala
  Lode Vandevenne
  Luca Versari
  Martin Bruse
  Phil Culliton
  Sami Boukortt
  Thomas Fischbacher
  Zoltan Szabadka

Gemma-2 지원은 여러 분들의 도움으로 2024년 6월/7월에 구현되었습니다.

PaliGemma 지원은 Daniel Keysers의 기여로 2024년 9월에 구현되었습니다.

Jan Wassenberg는 최초 출시 이후, 효율성 향상을 포함하여 여러 개선 사항을 지속적으로 제공해 왔습니다.

이 제품은 공식적으로 지원되는 Google 제품이 아닙니다.

About

gemma.cpp inference engine (Korean & MSVC Optimized)

Resources

License

Apache-2.0, BSD-3-Clause licenses found

Licenses found

Apache-2.0
LICENSE
BSD-3-Clause
LICENSE-BSD3

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors