TL;DR
q8_0은 f16보다 KV 캐시를 약 43GB에서 약 22GB로 줄이지만, 생성 토큰마다 캐시 원소를 f16으로 역양자화하고 새 항목을 다시 양자화해야 합니다. 반면 f16은 더 많은 메모리를 사용해도 변환 없이 Tensor Core 행렬 곱셈으로 이어지므로 Prefill 속도는 비슷한 가운데 Generation에서 앞섰습니다. 45k 문맥 비교에서는 24.11 대 18.02로 34% 차이가 났고, 152k 문맥에서는 q8_0의 토큰당 변환량이 약 1,900만 개에 달했습니다. 따라서 f16은 OOM 전까지 빠르고 q8_0은 메모리 부족을 피하는 선택에 가깝습니다.
실용적 조언
- 100k보다 짧은 문맥에서 GPU 메모리가 충분하면 f16을 우선해 역양자화 비용을 피하는 편이 유리합니다. 150k를 넘는 긴 문맥에서는 f16 캐시가 약 43GB까지 커질 수 있으므로 OOM 여부를 먼저 확인해야 합니다. 메모리 한도 때문에 f16을 사용할 수 없다면 q8_0으로 캐시 크기를 약 22GB 수준으로 낮추되 생성 속도 저하를 감수해야 합니다.
섹션별 상세
용어 해설
- KV 캐시(KV Cache)
- — Attention이 이전 토큰의 Key와 Value를 저장해 긴 문맥에서 반복 계산을 줄이는 메모리 구조입니다. 생성 단계에서는 각 토큰마다 여러 레이어의 KV 캐시를 읽으므로 저장 형식과 메모리 접근 비용이 속도에 직접 영향을 줍니다.
- 프리필(Prefill)
- — 입력 프롬프트 전체를 한 번에 처리해 첫 생성 단계에 필요한 상태를 만드는 과정입니다. 이 글에서는 q8_0과 f16의 KV 형식이 프롬프트 처리 속도에는 거의 차이를 만들지 않는 것으로 나타났습니다.
- 역양자화(Dequantization)
- — 저비트로 저장된 값을 연산 직전에 f16 같은 더 높은 정밀도 형식으로 변환하는 과정입니다. q8_0 KV 캐시는 Attention이 읽을 때마다 변환이 필요해 토큰 생성 중 추가 계산 비용이 발생합니다.
- Tensor 코어(Tensor Cores)
- — GPU에서 행렬 곱셈을 고속 처리하는 전용 연산 유닛입니다. f16 KV 데이터는 변환 없이 Tensor 코어 경로에 전달되지만, q8_0은 역양자화된 스트림 때문에 같은 경로를 효율적으로 활용하기 어렵습니다.
- 메모리 부족(Out of Memory)
- — 모델과 KV 캐시를 GPU 메모리에 함께 배치할 공간이 부족한 상태입니다. f16은 q8_0보다 캐시 용량을 더 많이 차지하므로 긴 문맥에서는 속도 우위를 유지하다가 먼저 OOM에 도달할 수 있습니다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.
