양자화는 크기와 정밀도를 맞바꿔
모델 가중치는 부동소수점 숫자야. fp32는 숫자마다 4바이트, fp16/bf16은 2바이트, int8/Q8은 1바이트, Q4는 0.5바이트를 써. 양자화는 높은 정밀도의 가중치를 낮은 정밀도의 근삿값으로 바꿔 품질을 조금 내주고 디스크와 메모리를 크게 줄여.
7B 모델이면 차이가 선명해. 가중치만 fp16은 약 14 GB, Q8은 약 7 GB, Q4는 약 3.5 GB야. 모델은 같아도 필요한 메모리 예산이 셋으로 갈려.
Q4가 모든 값을 4비트로 저장한다는 뜻은 아니야
MLX와 현대 양자화 방식은 가중치를 묶음으로 나눠. 32, 64, 128개 가중치가 하나의 축척값과 영점을 공유하고, 이 두 값은 보통 fp16처럼 더 높은 정밀도로 저장돼. 묶음 안의 가중치만 4비트로 양자화하고 추론할 때 dequantized = scale * (quantized_int4 - zero_point)로 되살려.
이 방식이 affine 양자화이고 기본값인 --q-mode affine이야. mxfp4, nvfp4, mxfp8 같은 새 MX 방식은 최신 GPU의 전용 하드웨어에 맞는 미세 축척 형식을 써.
Q4와 Q8의 실제 차이
- 디스크와 메모리: 같은 모델의 Q4는 Q8의 약 절반이야.
- 추론 속도: Q4는 메모리 대역폭을 덜 써 조금 빠를 때도 있고, 복원 계산 때문에 조금 느릴 때도 있어. 대체로 비슷하다고 봐.
- 품질: Q4는 대부분 작업에서 perplexity나 점수를 조금 잃고, 긴 추론과 저자원 언어에서는 손실이 커질 수 있어. 지시 학습 모델의 채팅에서는 눈으로 Q8과 구분하기 어려운 경우가 많지만 세밀한 벤치마크는 차이를 보여.
- 작은 모델: 1B 이하 모델은 정밀도 손실을 흡수할 매개변수가 적어 Q4에서 더 많이 무너질 수 있어. 1B 미만은 Q8을, 3B 이상은 Q4를 먼저 생각해.
기본 선택은 이렇게 잡아
Apple Silicon에서 7B 이상 지시 학습 모델은 Q4로 시작해. 더 많은 메모리 예산에 들어가고 품질 손실이 보통 병목이 아니야. 정밀도에 민감한 작업에서 차이를 측정했거나 손실이 중요한 3B 미만 모델일 때 Q8로 올려. 메모리를 더 써서라도 마지막 품질 조각이 필요한 분명한 이유가 있을 때만 양자화를 건너뛰고 bf16/fp16을 써.