TL;DR
사전 설정 양자화는 장치의 실제 메모리와 추론에 필요한 KV cache를 반영하지 못해 품질이나 적재 가능성을 낭비할 수 있습니다. shoehorn은 BF16 GGUF와 imatrix를 읽고, 모델 메타데이터로 계산한 가중치 예산 안에서 텐서별 후보 형식의 오차와 크기를 비교해 혼합 정밀도를 결정합니다. Lagrangian relaxation과 greedy upgrade로 남은 메모리까지 채우며, Qwen3-14B와 Qwen3-30B-A3B 실험에서 제한된 메모리 안에 높은 품질의 모델을 배치했습니다. 출력은 표준 GGUF v3라서 llama.cpp에서 바로 실행되지만, compute buffer는 추정치이고 Metal 외 장치 자동 탐지는 아직 제한적입니다.
섹션별 상세
shoehorn fit unsloth/Qwen3-4B-GGUF --serveHugging Face 저장소에서 BF16 GGUF와 imatrix를 가져와 양자화한 뒤 llama-server로 실행합니다.
llama-imatrix -m model-bf16.gguf -f calibration.txt -o model.imatrix -ngl 99보정 텍스트를 사용해 BF16 GGUF 모델의 중요도 행렬을 생성합니다.
shoehorn quantize -m model-bf16.gguf -i model.imatrix --ctx 8192 -o fitted.gguf모델의 imatrix와 목표 문맥 길이를 바탕으로 장치 메모리에 맞는 텐서별 혼합을 계산하고 GGUF 파일을 생성합니다.
- shoehorn은 KV cache, compute buffer, reserve를 사용 가능한 메모리에서 차감한 뒤 남은 공간에 맞춰 텐서별 혼합 정밀도 양자화를 계산합니다. — README의 작동 단계와 Budget model 절에 제시된 weight_budget, kv_cache, compute_est 식
- 각 텐서와 후보 형식의 조합을 실제 인코딩·디코딩해 imatrix 가중 제곱 오차를 측정하고, Lagrangian relaxation과 greedy pass로 최종 혼합을 선택합니다. — How it works 절의 측정 단계와 solver 설명
- Qwen3-0.6B를 1.75 GiB envelope에 맞춘 혼합은 7.306 bpw, 99.981% 예산 사용률, held-out perplexity 14.623 ± 0.556을 기록했습니다. — Results 절의 Qwen3-0.6B 결과 표
- 비슷한 파일 크기에서 shoehorn의 혼합은 llama.cpp의 IQ2_XXS preset보다 perplexity를 절반 수준으로 낮췄습니다. — Results 절의 IQ 비교 표와 differential validation 문단
- Qwen3-30B-A3B에서는 드물게 활성화되는 expert 텐서에 낮은 비트 형식을 배정하고, attention 경로와 router·embedding에는 더 높은 정밀도를 남겼습니다. — Results 절의 Qwen3-30B-A3B 설명과 텐서별 혼합 결과
용어 해설
- GGUF 모델 파일 형식(GGUF)
- — GGUF는 LLM 가중치와 모델 구조, 토크나이저 같은 메타데이터를 함께 저장하는 파일 형식입니다. shoehorn은 BF16 GGUF를 읽어 양자화한 뒤 표준 GGUF v3 파일로 기록하며, llama.cpp가 이를 직접 불러 추론합니다.
- 중요도 행렬(imatrix)
- — imatrix는 보정 텍스트를 모델에 통과시켜 입력 열별 활성화 제곱 평균을 수집한 데이터입니다. 활성화가 큰 가중치에 더 높은 양자화 오차 비용을 부여해, 제한된 비트 예산을 중요한 영역에 우선 배분하는 데 사용됩니다.
- 혼합 정밀도 양자화(Mixed-Precision Quantization)
- — 혼합 정밀도 양자화는 모든 텐서에 같은 비트 수를 적용하지 않고 텐서별로 Q4, Q5, Q6, Q8 또는 F16 등을 선택하는 방식입니다. shoehorn은 각 선택지의 크기와 중요도 가중 오차를 측정해 전체 메모리 한도 안에서 품질 손실을 최소화합니다.
- KV 캐시(KV cache)
- — KV cache는 긴 문맥을 생성할 때 이미 계산한 attention의 key와 value를 저장하는 메모리 영역입니다. shoehorn은 레이어 수, 문맥 길이, KV head 수, key·value 차원을 이용해 F16 기준 필요량을 계산하고 이를 가중치 예산에서 먼저 차감합니다.
- 다중 선택 배낭 문제(Multiple-Choice Knapsack)
- — 다중 선택 배낭 문제는 각 텐서에서 하나의 양자화 형식을 고르되 전체 크기를 예산 이하로 제한하면서 총 비용을 줄이는 최적화 문제입니다. shoehorn은 바이트의 그림자 가격을 이용한 Lagrangian relaxation과 남은 여유 공간을 채우는 greedy upgrade를 결합합니다.
기술
- shoehorn
- Rust
- GGUF
- llama.cpp
- llama-imatrix
- Metal
- Hugging Face
- Cargo
- rayon
활용 사례
- Apple Silicon의 실제 GPU working set에 맞춘 LLM 실행
- 제한된 VRAM에서 대형 dense 모델을 구동하는 양자화
- MoE 모델의 expert별 혼합 정밀도 배정
- 친구나 다른 장치의 메모리 한도를 목표로 한 GGUF 생성
- llama-server 기반 로컬 모델 서빙
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.