TT Lab
블로그

한국어

시작하기
블로그

블로그

양자화: 가중치를 8비트로 줄이면 디코드가 빨라지는 까닭과 그 대가

상태: 초안 (2026-10-27), FP8·GPTQ·AWQ 실측, GGUF·bitsandbytes 미실측. 8GB급 노트북 GPU(Ada 세대) 한 장, vLLM 0.31.0, Qwen3-Reranker-0.6B 로 2026-10-27 에 쟀습니다. 처음 측정 때는 미리 양자화된 체크포인트(AWQ·GPTQ)를 새로 받아야 해서 재지 않았고, 승인 뒤 3-1절에서 쟀습니다. KV 캐시 8비트의 용량 실측은 「토스 ML/AI Infra 준비」 14편에 있습니다. 2026-10-27 추가. 승인을 받아 vLLM 0.32.0 이미지와 Qwen3-0.6B, Qwen3-0.6B-GPTQ-Int8, Qwen3-4B-AWQ(모두 Apache-2.0, safetensors)를 받아 3-1절을 더했습니다. 앞의 0.31.0 수치는 그대로 두었습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.

목차

1. 왜 빨라지는가

디코드는 요청마다 토큰 하나를 만들기 위해 가중치 전체를 GPU 메모리에서 한 번 읽습니다. 0.6B 모델이면 bf16 로 1.2GB 가 걸음마다 오갑니다. 계산은 그에 비해 적어서, 걸음 시간은 대체로 「가중치 바이트 ÷ 메모리 대역폭」이 정합니다. 가중치를 8비트로 줄이면 읽을 바이트가 절반이 되어 걸음이 짧아집니다.

여기서 두 가지가 따라 나옵니다.

2. vLLM 의 양자화 지도

방식 무엇을 줄이나 체크포인트 원리(논문)
온라인 FP8(fp8_per_tensor, fp8_per_block) 가중치·활성 8비트 bf16 그대로, 띄울 때 변환 FP8 형식(Micikevicius 외, 2022): E4M3·E5M2
llm-compressor FP8 W8A8 가중치·활성 8비트 미리 변환 같은 형식, 보정 데이터로 척도 결정
AWQ 가중치 4비트 미리 변환 활성값이 큰 채널의 가중치를 보호(Lin 외, MLSys 2024)
GPTQ 가중치 3·4비트 미리 변환 2차 정보로 오차를 보정하며 한 열씩 양자화(Frantar 외, ICLR 2023)
Marlin 커널 GPTQ·AWQ·FP8·FP4 를 빠르게 위 형식 4비트 가중치와 16비트 활성의 곱셈 커널
GGUF, bitsandbytes 가중치 각 형식 llama.cpp 형식, 읽어 들이며 양자화
KV 캐시 FP8(--kv-cache-dtype fp8) KV 저장 무관 같은 메모리에 토큰 두 배

공식 문서의 하드웨어 표를 보면 FP8 W8A8 은 Ada·Hopper 이상에서만, AWQ·GPTQ 는 Turing 이후 대부분에서 돕니다. 논문이 보고한 숫자는 조건이 서로 다릅니다. AWQ 는 4비트 가중치로 데스크톱·모바일 GPU 에서 Hugging Face FP16 구현보다 3배 넘게 빠르다고 했고, GPTQ 는 1,750억 매개변수 모델을 GPU 한 장에 올려 A100 에서 FP16 대비 약 3.25배, A6000 에서 4.5배를 보고했습니다(둘 다 초록 기준).

0.31.0 문서는 온라인 양자화의 방식으로 fp8_per_tensor, fp8_per_block, mxfp8, mxfp4 를 듭니다. MXFP8 의 W8A8 은 Blackwell(SM 100) 이상에서만 돌고, 그 밖의 GPU 는 가중치만 8비트인 경로로 내려갑니다.

3. 직접 재 보기: 온라인 FP8

방법

결과

항목 bf16 FP8(온라인) 비
가중치 메모리(로그) 1.12GiB 0.71GiB 0.63
KV 자리 40,208토큰 42,080토큰 1.05
처리량, 동시 1 174.2 tok/s 236.3 tok/s 1.36
토큰 간격 중앙, 동시 1 5.6ms 4.1ms 0.73
처리량, 동시 16 1,683.1 tok/s 2,085.8 tok/s 1.24
처리량, 동시 64 2,899.3 tok/s 3,143.3 tok/s 1.08
탐욕 출력이 bf16 과 같은 요청 기준 12개 중 6개
퍼플렉서티(글 네 편) 36.03 36.46(+1.2%)

3-1. 2026-10-27 재측정: 대화 모델, 그리고 미리 양자화된 체크포인트

vLLM 0.32.0 공식 컨테이너에서 대화용 Qwen3-0.6B 를 기준으로 온라인 FP8 과 GPTQ 8비트판을 비교하고, 같은 GPU 에 4B 모델을 AWQ 4비트로 올려 봤습니다. 부하와 퍼플렉서티 방법은 앞과 같습니다.

모델·방식 가중치 메모리 KV 자리 처리량 동시 1 동시 16 동시 64 퍼플렉서티
Qwen3-0.6B bf16 1.12GiB 38,224토큰 174.1 1,678.0 2,898.7 30.29
Qwen3-0.6B 온라인 FP8(fp8_per_tensor) 0.71GiB 42,080토큰 237.9(1.37배) 2,094.5(1.25배) 3,148.2(1.09배) 29.88(-1.4%)
Qwen3-0.6B GPTQ 8비트(Marlin) 0.74GiB 42,048토큰 244.3(1.40배) 2,023.0(1.21배) 2,996.5(1.03배) 30.78(+1.6%)
Qwen3-4B AWQ 4비트(Marlin) 2.5GiB 15,424토큰 80.0 651.9 736.4 21.02

처리량 단위는 tok/s 이고, 괄호는 bf16 대비입니다.

4. KV 캐시 8비트

--kv-cache-dtype fp8 은 가중치가 아니라 KV 를 8비트로 저장합니다. 같은 GPU 에서 1.7B 모델로 잰 이전 실측에서 KV 자리가 22,048토큰에서 41,920토큰으로 늘었고(토큰당 바이트가 정확히 절반), 긴 입력에서 KV 가 모자라 대기열이 생기던 지점이 뒤로 밀렸습니다(14편). 이번에는 같은 퍼플렉서티 시험과 탐욕 출력 비교만 더했습니다.

항목 KV bf16(기본) KV FP8
KV 자리(로그) 40,208토큰 69,920토큰(1.74배)
퍼플렉서티(같은 글 네 편, 338토큰) 36.03 36.50(+1.3%)
탐욕 출력이 bf16 KV 와 같은 요청 기준 12개 중 5개

5. 운영에서 가져갈 것

6. 확인하지 못한 것

참고

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다