[llama.cpp] 비대칭 KV q8/q4 캐시: 현재 문제점과 GGML 저장소 논의
[llama.cpp] Asymmetric KV q8/q4 cache: current caveats and discussion in GGML repo
핵심 요약
llama.cpp에서 KV 캐시 양자화 설정 시 발생하는 성능 저하 문제와 이를 해결하기 위한 최적의 조합을 논의함.
- 성능 저하 문제 — 특정 KV 캐시 조합 사용 시 프롬프트 처리가 GPU가 아닌 CPU로 강제됨.
- 컴파일 최적화 — FA_ALL_QUANTS 없이도 KV 캐시 양자화 조합을 포함하는 방식이 제안됨.
- 메모리 효율성 — 비대칭 8/4비트 양자화는 f16 대비 메모리를 절반 이상 절약하며 정밀도 손실은 1.3%에 불과함.
- 최적의 조합 — q8/q4보다는 q8/q5_1이나 q5_1/q4_1 조합이 정밀도와 효율성 면에서 더 권장됨.
아마 대부분 아시겠지만, llama.cpp 시작 옵션으로 -ctk q8_0 -ctv q8_0 또는 -ctk q4_0 -ctv q4_0 외의 다른 설정을 사용하면 최소한 CUDA 환경에서는 프롬프트 처리가 GPU가 아닌 CPU에서 수행됩니다. 예를 들어, 자주 제안되는 -ctk q8_0 -ctv q4_0 조합을 사용하면 성능이 급락합니다.
이 문제에 대해 LLM과 논의해 본 결과, llama.cpp의 CUDA 소스 코드를 약간 수정하거나 cmake -DGGML_CUDA_FA_ALL_QUANTS=ON ..을 사용하라고 제안받았는데, 이는 시간이 매우 오래 걸립니다.
하지만 우연히도 GitHub의 sanmai라는 사용자가 간단한 평가를 수행한 후, FA_ALL_QUANTS 없이도 컴파일 중에 KV 캐시 양자화 조합을 포함할 것을 제안했는데, 이는 아주 좋은 소식입니다.
논의는 아래 링크에서 확인할 수 있습니다. 비대칭 8/4비트 KV 양자화를 사용하면 f16/f16 대비 메모리를 절반 이상 절약하면서도 정밀도 손실은 1.3%에 불과하다는 평가 결과가 있으니 읽어볼 가치가 있습니다.

