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 통합 과정
- AutoConfig.from_pretrained()가 모델의
config.json파일을 불러와 메타데이터를 추출해요. - AutoTokenizer.from_pretrained()가 어휘(vocabulary)와 토크나이저 설정을 추출해요.
- 설정(config)의
architectures필드를 보고 스크립트가 내부 레지스트리에서 변환기(converter) 클래스를 골라요. 이 레지스트리는 Transformers 아키텍처 이름(예: LlamaForCausalLM)을 대응하는 변환기 클래스에 매핑해요. - 변환기가 Transformers 텐서 이름(예:
model.layers.0.self_attn.q_proj.weight)을 GGUF 텐서 이름으로 매핑하고, 텐서를 변환하며 어휘를 패키징해요. - 출력은 모델 가중치, 토크나이저, 메타데이터를 담은 단일 GGUF 파일이에요.
리소스 (Resources)
- llama.cpp 문서
- Introduction to ggml 블로그 글
더 알아보기 (Learn more)
- 커스텀 모델 문서에서 나만의 모델 구조를 만들어 보세요.