본문 바로가기
AI2025년 7월 20일4분 읽기

Llama.cpp 로컬 LLM 최적화 — 양자화와 GGUF 포맷

YS
김영삼
조회 691

llama.cpp와 GGUF 포맷 이해

llama.cpp는 C/C++로 작성된 LLM 추론 엔진으로, CPU와 GPU 모두에서 대형 언어 모델을 효율적으로 실행할 수 있습니다. GGUF(GPT-Generated Unified Format)는 llama.cpp에서 사용하는 모델 파일 형식입니다.

양자화 수준별 비교

양자화비트모델 크기(7B)품질속도
F1616~13.5GB최상느림
Q8_08~7.2GB우수보통
Q5_K_M5~4.8GB좋음빠름
Q4_K_M4~4.1GB양호빠름
Q3_K_M3~3.3GB보통매우 빠름
Q2_K2~2.7GB낮음매우 빠름

llama.cpp 빌드 및 실행

# 빌드 (CUDA GPU 지원)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUDA=1

# 기본 추론 실행
./main -m models/llama-2-7b-chat.Q4_K_M.gguf \
  -p "한국의 수도는" \
  -n 256 \
  -t 8 \
  --temp 0.7 \
  --top-p 0.9 \
  --repeat-penalty 1.1

# 서버 모드 (OpenAI 호환 API)
./server -m models/llama-2-7b-chat.Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8080 \
  -ngl 35 \
  -c 4096

양자화 변환 방법

# HuggingFace 모델을 GGUF로 변환
python convert_hf_to_gguf.py \
  ./models/my-model/ \
  --outfile models/my-model-f16.gguf \
  --outtype f16

# 양자화 적용
./quantize models/my-model-f16.gguf \
  models/my-model-Q4_K_M.gguf Q4_K_M

# imatrix 기반 중요도 양자화 (품질 향상)
./imatrix -m models/my-model-f16.gguf \
  -f calibration-data.txt \
  -o imatrix.dat

./quantize models/my-model-f16.gguf \
  models/my-model-IQ4_XS.gguf IQ4_XS \
  --imatrix imatrix.dat

GPU 오프로딩 최적화

# -ngl: GPU에 올릴 레이어 수
# 7B 모델 기준 약 35개 레이어
./main -m model.gguf -ngl 35  # 전체 GPU
./main -m model.gguf -ngl 20  # 부분 GPU (VRAM 부족 시)
./main -m model.gguf -ngl 0   # CPU만 사용

# VRAM 사용량 확인
nvidia-smi --query-gpu=memory.used --format=csv -l 1

주요 파라미터 튜닝

  • -c: 컨텍스트 크기 (기본 512, 최대 모델 의존) — 클수록 VRAM 소모 증가
  • -t: CPU 스레드 수 — 물리 코어 수에 맞추는 것이 최적
  • -ngl: GPU 레이어 수 — VRAM에 맞게 조절
  • --mmap: 메모리 맵 사용 — 대용량 모델에서 로딩 속도 향상
  • -b: 배치 크기 — 프롬프트 처리 속도에 영향

K-quant vs I-quant

K-quant(Q4_K_M 등)는 블록 단위 양자화로 구현이 단순하고 호환성이 좋습니다. I-quant(IQ4_XS 등)는 중요도 행렬(imatrix) 기반으로 더 적은 비트에서도 높은 품질을 유지합니다. 동일 크기에서 I-quant가 약 0.1~0.3 perplexity 개선을 보여줍니다.

로컬 LLM 운용 시 Q4_K_M이 품질과 속도의 가장 좋은 균형점이며, VRAM이 충분하다면 Q5_K_M을 추천합니다. imatrix 양자화를 사용하면 Q3 수준에서도 합리적인 품질을 얻을 수 있습니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록