MTP KV Cache 양자화 (Quantizing) = 공짜 점심인가?
요약
llama.cpp의 MTP(Multi-Token Prediction) 구현 시 MTP 레이어 전용 KV 캐시를 양자화할 수 있다는 점을 분석합니다. 벤치마크 결과, MTP KV 캐시 양자화가 성능 저하 없이 VRAM 효율성을 높일 수 있는 '공짜 점심'이 될 가능성을 보여줍니다.
핵심 포인트
- MTP 레이어는 메인 KV 캐시와 별개로 자체적인 KV 캐시를 보유함
- llama.cpp에서 `-cache-type-k-draft` 및 `-cache-type-v-draft` 옵션으로 MTP KV 캐시 양자화 가능
- Qwen 모델 기반 벤치마크 결과, 양자화 적용 시에도 수락률(accept rate)과 실행 시간(wall time)에서 유의미한 성능 저하가 관찰되지 않음
- 텐서 병렬화(Tensor Parallelism) 환경에서도 양자화의 이점이 유지됨
Qwen3.6/3.5 모델의 llama.cpp 내 MTP 구현에서는 MTP 레이어를 위해 더 많은 VRAM이 필요합니다. 하지만 많은 사람들이 이 레이어에 자체적인 KV 캐시 (KV cache)가 있으며, 이 또한 양자화 (quantized)될 수 있다는 사실을 인지하지 못하고 있습니다:
-cache-type-k-draft q8_0 -cache-type-v-draft q8_0
수정: 이것은 모델의 메인 KV 캐시 (main KV Cache)를 양자화하는 것이 아닙니다.
그렇다면 이것은 약간 더 많은 컨텍스트 (context)를 수용할 수 있게 해주는 공짜 점심 (free lunch)일까요?
Qwen3.6-27B-Q8_0에 대한 짧은 벤치마크 결과에 따르면 확실히 그렇게 보입니다:
--spec-type draft-mtp --spec-draft-n-max 3
Aggregate: {
"n_requests": 9,
"total_predicted": 1404,
"total_draft": 1302,
"total_draft_accepted": 957,
"aggregate_accept_rate": 0.735,
"wall_s_total": 49.46
}
--spec-type draft-mtp --spec-draft-n-max 3 -cache-type-k-draft q8_0 -cache-type-v-draft q8_0
Aggregate: {
"n_requests": 9,
"total_predicted": 1404,
"total_draft": 1302,
"total_draft_accepted": 957,
"aggregate_accept_rate": 0.735,
"wall_s_total": 49.32
}
텐서 병렬화 (tensor parallelism)를 사용한 테스트 결과도 있습니다:
-sm tenor --spec-type draft-mtp --spec-draft-n-max 3
Aggregate: {
"n_requests": 9,
"total_predicted": 1404,
"total_draft": 1294,
"total_draft_accepted": 959,
"aggregate_accept_rate": 0.7411,
"wall_s_total": 38.42
}
-sm tensor --spec-type draft-mtp --spec-draft-n-max 3 -cache-type-k-draft q8_0 -cache-type-v-draft q8_0
Aggregate: {
"n_requests": 9,
"total_predicted": 1404,
"total_draft": 1294,
"total_draft_accepted": 959,
"aggregate_accept_rate": 0.7411,
"wall_s_total": 38.29
}
제가 착각하고 있는 것인지, 아니면 다른 경험이 있으신지 알려주세요.
2xMi50 32GBs @ PCIe 4.0 x 8에서 테스트되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기