llama.cpp

llama.cpp

llama.cpp는 대규모 언어 모델을 로컬에서 배포할 때 쓰는 C/C++ 추론 엔진이에요. Transformers 모델을 GGUF 포맷으로 변환해 가볍게 실행하는 방법을 살펴볼게요.

출처: 문서

본문

llama.cpp는 대규모 언어 모델을 로컬에서 배포하기 위한 C/C++ 추론 엔진이에요. 가볍고 Python, CUDA, 그 밖의 무거운 서버 인프라가 필요 없어요. llama.cpp는 GGUF 파일 포맷을 사용하는데, GGUF는 양자화된 모델 가중치와 메모리 매핑(memory-mapping)을 지원해서 기기에서 메모리 대역폭 부담을 줄여줘요.

[!TIP] 이미 GGUF 포맷으로 제공되는 모델은 Hub에서 찾아볼 수 있어요.

convert_hf_to_gguf.py 스크립트로 어떤 Transformers 모델이든 GGUF 포맷으로 변환할 수 있어요.

python3 convert_hf_to_gguf.py ./models/openai/gpt-oss-20b \
  --outfile gpt-oss-20b.gguf \

llama-cli로 명령줄에서 로컬 배포를 하거나, llama-server로 웹 UI를 띄울 수 있어요. 모델이 Hub에서 온 것임을 알리려면 -hf 플래그를 붙여요.

llama-cli -hf ggml-org/gpt-oss-20b-GGUF
llama-server -hf ggml-org/gpt-oss-20b-GGUF

Transformers 통합 과정

  1. AutoConfig.from_pretrained()가 모델의 config.json 파일을 불러와 메타데이터를 추출해요.
  2. AutoTokenizer.from_pretrained()가 어휘(vocabulary)와 토크나이저 설정을 추출해요.
  3. 설정(config)의 architectures 필드를 보고 스크립트가 내부 레지스트리에서 변환기(converter) 클래스를 골라요. 이 레지스트리는 Transformers 아키텍처 이름(예: LlamaForCausalLM)을 대응하는 변환기 클래스에 매핑해요.
  4. 변환기가 Transformers 텐서 이름(예: model.layers.0.self_attn.q_proj.weight)을 GGUF 텐서 이름으로 매핑하고, 텐서를 변환하며 어휘를 패키징해요.
  5. 출력은 모델 가중치, 토크나이저, 메타데이터를 담은 단일 GGUF 파일이에요.

리소스 (Resources)

더 알아보기 (Learn more)