C.W.K.
Stream
Lesson 04 of 06 · published

Group-wise & mixed-precision 양자화

~14 min · quantization, group-size, mixed-precision

Level 0Curious
0 XP0/51 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

모든 weight 가 같은 처리 받을 자격은 없어

Transformer 모델의 weight 들은 양자화에 같게 민감하지 않아. Embedding layer, LM head (vocab 으로 다시 projection), attention output projection 들이 전형적으로 feed-forward MLP weight 의 대부분보다 더 민감. 모든 걸 4 bit 로 양자화하는 게 단순한 선택. 민감한 layer 들은 더 높은 정밀도로 두면서 대부분을 4 bit 로 유지하는 게 더 똑똑한 선택 — weight 당 같은 평균 bit, 더 적은 품질 손실.

그게 mixed-precision 양자화 의 의미. mlx-lm 이 --quant-predicate 플래그로 미리-baked 레시피들 노출.

mlx-lm 이 출하하는 레시피들

  • mixed_2_6 — 대부분 layer 2-bit, 민감한 거 6-bit. 가장 공격적인 크기 감소; 품질 손실 눈에 띔.
  • mixed_3_4 — 대부분 layer 3-bit, 민감한 거 4-bit. Full Q4 보다 빡빡, 품질 보통 경쟁력.
  • mixed_3_6 — 대부분 layer 3-bit, 민감한 거 6-bit. 공격적이지만 민감한 layer 에 더 강한 헤드룸.
  • mixed_4_6 — 대부분 layer 4-bit (기본 Q4), 민감한 거 6-bit 로 올림. 가장 가까운 "더 안전한 Q4" 레시피.

명명 convention 은 mixed_X_Y 인데 X 가 대부분 bit-width, Y 가 민감-layer bit-width. 어떤 layer 가 더 높은 정밀도 받는지의 정확한 정책은 mlx-lm 의 predicate registry 에 baked.

Group size, 다시

Group size (--q-group-size) 는 mixed precision 와 직교. 더 작은 group (32) 이 더 좋은 품질이지만 더 큰 파일. 더 큰 group (128) 이 일부 품질 비용에 더 작은 파일. 기본 64 가 합리적 중간. Mixed-precision 변환엔 보통 group size 를 64 에 두고 bit-width predicate 가 차별화 하게 둬.

Mixed-precision 손 뻗을 때

  • 메모리 천장에 있고 full Q4 가 허용하는 것보다 약간 더 큰 모델 fit 시키고 싶을 때. mixed_3_4 또는 mixed_2_6 가 효과 bit 더 떨어뜨릴 수 있어.
  • specific 작업의 full Q4 품질에 실망 했고 Q8 까지 가지 않고 일부 정확도 회복하고 싶을 때. mixed_4_6 이 자연스러운 step.
  • Scale 로 배포 하고 모델 당 작은 크기 절약이 많은 머신에 걸쳐 compound 될 때.

1-사용자 laptop 배포엔 full Q4 가 보통 괜찮아. Mixed-precision 은 측정된 이유 있을 때 손 뻗는 레버 — 기본 시작점이 아냐.

Code

Mixed-precision 레시피로 변환·bash
# 4-bit base, 6-bit on sensitive layers — the "safer Q4" recipe.
python -m mlx_lm convert \
  --hf-path meta-llama/Llama-3.2-3B-Instruct \
  --mlx-path ./Llama-3.2-3B-Instruct-Mixed-4-6 \
  --quantize \
  --quant-predicate mixed_4_6 \
  --q-group-size 64

# Aggressive size reduction — 3-bit base, 4-bit on sensitive layers.
python -m mlx_lm convert \
  --hf-path meta-llama/Llama-3.2-3B-Instruct \
  --mlx-path ./Llama-3.2-3B-Instruct-Mixed-3-4 \
  --quantize \
  --quant-predicate mixed_3_4 \
  --q-group-size 64
결과 모델의 양자화 config 살피기·python
import json, glob, os

# After conversion, the config records exactly how each layer was quantized.
for path in glob.glob("./Llama-3.2-3B-Instruct-Mixed-*"):
    with open(os.path.join(path, "config.json")) as f:
        cfg = json.load(f)
    print(f"--- {path} ---")
    print("group_size :", cfg["quantization"].get("group_size"))
    print("bits       :", cfg["quantization"].get("bits"))
    # Mixed-precision configs have per-layer overrides; check for them.
    qmap = cfg.get("quantization_config") or cfg["quantization"].get("model.layers", {})
    if qmap:
        # Show the first few per-layer overrides if present
        sample = list(qmap.items())[:4] if isinstance(qmap, dict) else []
        print("first per-layer entries:", sample)
    print()

External links

Exercise

3B 급 모델 골라 세 레시피로 변환 — full Q4 (--quant-predicate 없이), mixed_4_6, mixed_3_4. 결과 디렉토리 셋의 크기 비교, 같은 프롬프트를 각각 통과 (greedy sampling). 운동은 크기/품질 trade 가 어디서 끝나는지 느끼는 것 — 어떤 레시피가 어떤 사용 케이스에 적절한지의 직감은 비교 한 번 돌려서 와야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.