양자화가 진짜 뭐 하나
모델의 weight 는 floating-point 숫자. fp32 가 숫자 당 4 byte 사용. fp16/bf16 가 2 byte. int8 / Q8 이 1 byte. Q4 가 반 byte. 양자화가 high-precision weight 를 low-precision 근사로 대체, 디스크 크기와 메모리 풋프린트 큰 감소를 위해 모델 품질 약간 trade.
7B 모델에 대해, 차이 dramatic. fp16 에선 weight 만으로 ~14 GB 필요. Q8 에선 ~7 GB. Q4 에선 ~3.5 GB. 같은 모델, 세 다른 메모리 예산.
"Q4" 가 진짜 뭐 의미하나
순진한 해석은 "모든 weight 가 4-bit 정수." 진짜 이야기는 더 미묘. MLX (와 대부분 현대 양자화 schema) 가 weight 를 group 으로 저장. 32 / 64 / 128 weight 의 각 그룹이 scale factor 와 zero point 공유 — 그것들은 더 높은 정밀도 (전형적으로 fp16) 로 저장. 그룹 안에서 개별 weight 가 4 bit 로 양자화. 추론 시간에 weight 가 dequantized = scale * (quantized_int4 - zero_point) 로 재구성.
이걸 affine 양자화 라고 하고 그게 --q-mode affine (기본) 이 주는 거. 새로운 MX 모드 (mxfp4, nvfp4, mxfp8) 는 최신 GPU 의 specialized 하드웨어로 매핑되는 micro-scaling 형식 사용.
Q4 vs Q8 — 뭘 포기하나
- 디스크와 메모리: Q4 가 (같은 모델에 대해) Q8 의 대략 절반 크기.
- 추론 속도: Q4 가 가끔 약간 더 빠르고 (메모리 대역폭 덜 필요), 가끔 약간 더 느려 (추가 dequantization 작업). 대략 비슷하다고 다뤄.
- 품질: Q4 가 대부분 작업에서 작은 양의 perplexity / 벤치마크 점수 잃고, 일부 (long-form reasoning, 저자원 언어) 에서 더 많이. Instruct 모델의 chat 사용 케이스엔, Q4 가 보통 캐주얼 평가에서 Q8 와 구별 안 됨; 벤치마크가 더 미묘한 이야기 말해.
- 엣지 케이스: 매우 작은 모델 (1B 이하) 이 가끔 큰 모델보다 Q4 에서 더 degrade — 정밀도 손실 흡수할 parameter 적어. 1B 미만엔 Q8 생각, 3B+ 엔 Q4.
들고 다닐 평결
Apple Silicon 의 7B+ instruct 모델엔 Q4 가 기본 — 더 많은 메모리 예산에 fit 되고 품질 손실이 거의 병목 아냐. 정밀도-민감 워크로드 벤치마크 하거나 손실이 중요한 sub-3B 모델 돌릴 때만 Q8 로 step up. 메모리 태울 만하고 그 마지막 한 조각의 품질 신경 쓸 specific 이유 있을 때만 양자화 건너뛰기 (bf16/fp16 사용).