본문으로 건너뛰기

실제 VRAM에 맞춰 LLM을 양자화하는 shoehorn

shoehorn은 imatrix 기반 텐서별 양자화로 사용 가능한 VRAM을 거의 남김없이 채운다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

사전 설정 양자화는 장치의 실제 메모리와 추론에 필요한 KV cache를 반영하지 못해 품질이나 적재 가능성을 낭비할 수 있습니다. shoehorn은 BF16 GGUF와 imatrix를 읽고, 모델 메타데이터로 계산한 가중치 예산 안에서 텐서별 후보 형식의 오차와 크기를 비교해 혼합 정밀도를 결정합니다. Lagrangian relaxation과 greedy upgrade로 남은 메모리까지 채우며, Qwen3-14B와 Qwen3-30B-A3B 실험에서 제한된 메모리 안에 높은 품질의 모델을 배치했습니다. 출력은 표준 GGUF v3라서 llama.cpp에서 바로 실행되지만, compute buffer는 추정치이고 Metal 외 장치 자동 탐지는 아직 제한적입니다.

섹션별 상세

01
기존 Q4_K_M이나 Q5_K_S 같은 사전 설정 양자화는 실제 장치의 사용 가능 VRAM과 추론 중 필요한 KV cache·compute buffer를 함께 고려하지 않아 메모리를 남기거나 로딩 단계에서 실패할 수 있습니다. shoehorn은 장치가 제공하는 메모리 한도에서 KV cache, compute buffer, reserve를 먼저 빼고 남은 공간을 가중치 예산으로 정합니다. 그 결과 사용 가능한 메모리에 맞춰 모델 품질과 적재 가능성을 동시에 조정할 수 있습니다.
bash
shoehorn fit unsloth/Qwen3-4B-GGUF --serve

Hugging Face 저장소에서 BF16 GGUF와 imatrix를 가져와 양자화한 뒤 llama-server로 실행합니다.

bash
llama-imatrix -m model-bf16.gguf -f calibration.txt -o model.imatrix -ngl 99

보정 텍스트를 사용해 BF16 GGUF 모델의 중요도 행렬을 생성합니다.

bash
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 식
02
shoehorn은 각 텐서에 대해 IQ2부터 F16까지 후보 형식을 실제로 인코딩하고 디코딩하면서 imatrix 가중 제곱 오차를 측정합니다. 이후 텐서마다 하나의 형식을 고르는 Multiple-Choice Knapsack 문제를 Lagrangian relaxation으로 풀고, 남은 바이트는 오차 감소량 대비 비용이 큰 업그레이드에 순차적으로 배분합니다. Qwen3-0.6B 실험에서는 519.2 MiB 가중치 예산의 99.981%를 사용해 텐서별 정밀도를 자동으로 배치했습니다.
근거
  • 각 텐서와 후보 형식의 조합을 실제 인코딩·디코딩해 imatrix 가중 제곱 오차를 측정하고, Lagrangian relaxation과 greedy pass로 최종 혼합을 선택합니다. How it works 절의 측정 단계와 solver 설명
03
imatrix는 보정 텍스트를 모델에 통과시켜 각 행렬 입력 열의 활성화 제곱 평균을 기록하고, 활성화가 큰 열에 연결된 가중치의 양자화 오차를 더 크게 취급합니다. shoehorn은 이 값을 행의 분산과 결합한 가중치로 사용해 llama.cpp의 기준 디코더와 동일한 weighted least-squares 목적을 최적화합니다. 따라서 단순히 모든 텐서를 같은 bpw로 줄이는 대신 attention projection, router, embedding처럼 민감도가 높은 영역에 더 많은 비트를 남길 수 있습니다.
04
메모리 예산은 모델의 GGUF 메타데이터에서 레이어 수, KV head 수, key·value 길이, vocabulary 크기를 읽어 계산합니다. Qwen3-0.6B를 1.75 GiB envelope와 context 4096으로 제한한 사례에서는 448 MiB를 KV cache, 313 MiB를 compute estimate, 512 MiB를 reserve로 차감해 519.2 MiB를 가중치에 배정했습니다. KV cache 항은 정확하게 계산되지만 compute buffer는 llama.cpp 버전과 flash attention 경로에 따라 달라져 reserve가 오차와 Metal 버퍼를 흡수합니다.
05
Qwen3-14B를 8 GiB envelope에 넣은 실험에서는 3.42 bpw 혼합으로 5.88 GiB 가중치 예산을 거의 전부 사용했고, held-out perplexity는 6.85였습니다. Qwen3-30B-A3B는 Q8_K를 사용하는 KV cache와 16.88 GiB 가중치 예산 아래 4.75 bpw로 적재됐으며, expert 텐서는 IQ2·IQ3, 항상 활성화되는 attention 경로와 router·embedding은 Q5_K·Q6_K를 사용했습니다. 이 MoE 구성은 perplexity 6.91 ± 0.23과 50.6 tok/s를 기록해 dense 14B 구성과 비슷한 perplexity를 유지하면서 두 배가 넘는 생성 속도를 냈습니다.
근거
  • 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 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 14.수집 2026. 08. 15.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.