본문 바로가기
C.W.K.
Stream
Lesson 03 of 06 · published

GGUF와 양자화 사다리

~14 min · gguf, quantization, llama-cpp, tradeoffs

Level 0Kindling
0 XP0/32 lessons0/10 achievements
0/100 XP to next level100 XP to go0% complete

두 포맷, 두 일자리

safetensors는 저장과 학습 프레임워크의 포맷이고, GGUF는 로컬 추론 런타임의 포맷이야. llama.cpp 스타일 엔진과 함께 떠올랐지: 아키텍처 메타데이터, 토크나이저, 양자화된 텐서를 한 파일에 묶어서, 노트북의 단일 로더가 완전 정밀도로는 RAM에 안 들어가는 모델을 돌리게 해 줘. safetensors가 아카이브 마스터라면 GGUF는 휴대용 사본이야 — 그리고 이 두 역할을 혼동하는 곳에서 아카이브의 충실도 실수가 대부분 들어와.

GGUF 파일은 자기 서술적이야: 자기만의 메타데이터 KV 블록(아키텍처, 컨텍스트 파라미터, 정렬 규칙)과 텐서 데이터를 함께 담아. 양자화된 텐서는 평범한 dtype 배열이 아니라 블록 스킴으로 저장돼 — 유명한 Q4_K_M 식 rung들이지, 가중치 그룹이 계산된 스케일 팩터를 공유하는 구조야. 그게 크기 절감의 메커니즘이야: 가중치당 유효 비트를 줄이고, 절약한 예산을 가장 아프지 않은 곳에 쓰도록 보정 항을 설계하는 거지.

사다리를 정직하게 읽기

rung은 마케팅이 아니야. 크기와 충실도 사이의 실제 엔지니어링 트레이드 지점들이야:

  • F16/BF16 (16비트) — 기준점. 사실상 마스터의 정밀도. 가장 크고, 변환 원본 대비 무손실이야.
  • Q8_0 (유효 ≈8.5비트) — 출력 품질에서 기준점에 아주 가까워. 크기는 대략 절반. 보수적인 rung.
  • Q6_K — 많은 런타임이 권장하는 실용적 스폿. 의미 있는 크기 절감에 작은 품질 양보.
  • Q5_K_M / Q4_K_M — 로컬 추론의 일꾼 rung. 눈에 띄지만 보통 감수할 만한 저하에 큰 크기 이득, 평범한 하드웨어에 모델을 맞춰 줘.
  • Q3 이하, 그리고 작은 -S 변형들 — 전문가 영역. 품질 비용이 케이스바이케이스, 태스크 의존적으로 돼.

정직한 경고 두 개. 첫째, 저하는 태스크 모양이야: 양자화된 모델은 캐주얼한 대화에서 멀쩡히 버티다가, 엣지 케이스 추론이나 코드, 소수 언어에서 측정 가능한 능력을 잃을 수 있어 — 감이 아니라 실제 워크로드를 벤치마크해. 둘째, rung은 합성되지 않아: Q4 파일을 Q8로 변환해도 아무것도 회복 안 돼. 이미 잃은 정보의 더 큰 그릇을 얻을 뿐이야. 사다리의 정보는 아래로만 흘러.

GGUF는 설계상 파생 포맷이다. 존재 목적이 제약된 하드웨어에 추론을 맞추는 거야. 아카이브가 GGUF를 두는 건 부엌이 미리 쪼갠 장작을 두는 것과 같아 — 라벨을 붙이고, 난로 옆에 놓고, 절대 나무 그 자체로 착각하지 않는다.

실행 없이 GGUF 검사하기

safetensors처럼 GGUF도 로드 없이 검사 가능해: 헤더와 메타데이터가 읽히고, 텐서 인벤토리(텐서별 양자화 타입 포함)가 거기 있어. 런타임들이 정확히 이걸 위한 검사 명령을 배포해 — 파일을 믿기 전에 하나 돌리고, 파일명이 주장하는 정밀도와 파일이 실제로 담은 정밀도를 비교해 봐.

Code

GGUF의 메타데이터와 텐서 인벤토리 검사·bash
# gguf 패키지(PyPI; llama.cpp 프로젝트 자체의 파이썬 도구)는
# 아무것도 실행하지 않고 GGUF 메타데이터를 읽어:
pip install gguf
python3 - <<'EOF'
from gguf import GGUFReader
r = GGUFReader("model-Q4_K_M.gguf")
for name, field in r.fields.items():
    print(f"{name:32} {field.types}")
EOF

# 덤프에서 읽을 것들:
#   general.architecture      — 어떤 엔진 계열이 기대하는지
#   *.context_length          — 주장하는 컨텍스트 창
#   tokenizer 필드            — 내장 토크나이저(자기완결적)
#   텐서별 quant 타입          — 혼합 양자화가 흔해:
#                               예: 대부분 Q4_K, attention에 민감한
#                               텐서는 Q6_K 이상
#
# 잘못 라벨된 파일을 잡는 크기 샌티티 체크:
#   파라미터 수 × bits/8 ≈ 파일 크기. 7B 모델의 "Q4_K_M"이
#   ~4.1 GB면 그럴듯하고; 같은 파일이 14 GB면 Q4가 아니야.

External links

Exercise

네가 쓰는 GGUF 하나를 찾아(또는 받아) 봐. 메타데이터를 덤프하고 답해: 어떤 아키텍처와 컨텍스트를 주장하는지, 텐서별 양자화 믹스는 어떤지, 크기 샌티티 체크(파라미터 수 × bits/8 ≈ 파일 크기)가 성립하는지. 그다음 완전 정밀도 마스터도 함께 보관하는 아카이브에서 붙일 한 줄 선반 라벨을 적어 봐.
Hint
크기 체크에는 파라미터 수가 필요해 — 메타데이터나 모델 카드가 줘. 선반 라벨의 핵심 단어는 '<마스터>의 파생형, <런타임/기기>용'이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.