본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

기계 하나에 들어가도록 양자화하기

~13 min · big-models, quantization, bits, mlx-lm, measured

Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"비트는 모델을 저장소의 선반에서 맥의 풀로 옮기는 유일한 손잡이야. 돌리고 뭘 치르는지 재. 실험실이 작은 파일에, 한 번 돌리는 데 3초로, 그렇게 했어."

실측한 사다리

양자화는 물리 트랙의 바이트 세기를 일부러 적용한 거야. 가중치당 비트 적게, 토큰당 바이트 적게, 더 높은 상한과 더 작은 파일. MLX에서 그걸 하는 명령 하나는 비트 폭과 그룹 크기를 준 mlx_lm convert야. 실험실은 여정 트랙의 bf16 Llama-3.2-1B에 대고 office에서 네 번 돌렸고, 변환마다 3초를 쟀어. 결과가 한 행에 레슨 전체야. bf16 2.47 GB는 초당 188토큰으로 디코드해. 8비트, 1.2 GB, 292. 6비트, 974 MB, 330. 4비트, 680 MB, 429. 3비트, 532 MB, 462. 사다리를 한 단 내려갈 때마다 토큰당 바이트를 덜 읽고 디코드가 그만큼 올라. 대역폭 레슨의 고정 비용이 바닥에서 넘겨받을 때까진 거의 선형으로. 거기선 3비트가 4보다 8%만 사 줘. 변환기 자체의 로그가 진짜 가중치당 비트를 명시해. 명목 4에 4.501, 명목 8에 8.500. 그게 스케일과 바이어스 오버헤드야. 파라미터당 0.5625바이트, GLM-5.3에 424 GB. 들어감 레슨의 더 둥근 0.6(452 GB)은 변환기가 양자화 안 하고 남기는 텐서까지 덮는 값이고, 둘 다 498 안에 들어가. 그리고 그게 만든 4비트 파일은 같은 모델의 커뮤니티 4비트 빌드의 428.0에 대해 초당 428.6토큰으로 디코드했어. 실험실이 그 명령이 같은 명령이라고 말하는 방식이야.

office의 Llama-3.2-1B가중치당 비트(변환기 집계)파일디코드bf16 대비증거
출하 그대로 bf16162.47 GB187.8 tok/s1.0×실측 2026-09-15
8비트, 그룹 648.5001.2 GB292.21.6×실측
6비트6.501974 MB330.11.8×실측
4비트4.501680 MB428.62.3×실측
3비트3.501532 MB461.72.5×실측

저장소의 파일에 같은 사다리

코드 블록은 변환기 자체의 가중치당 비트를 저장소의 체크포인트들에 적용해. GLM-5.3은 8비트에 800 GB, 6에 612. 어느 쪽도 512 GB Studio에 안 들어가. 4비트에 424고, 들어감 레슨의 캐시를 얹어도 들어가. GLM-5.3-Flash는 8비트 340 GB로 들어가고 정밀도 대부분을 지킬 수 있어. Qwen3.8-Flash-Next는 8비트 191 GB로 들어가고 4비트면 노트북에. Kimi K3는 어떤 것으로도 안 들어가. 3비트도 아직 1.2 TB. 그러니 저장소의 선반은 각 파일이 작업 집합 선을 넘는 첫 비트 폭으로 스스로 정렬되고, 각각에 대한 이 집의 결정은 이 표의 행 하나에 표가 할 수 없는 품질 판단을 더한 거야.

퀘스트가 재지 않은 것

둘이고, 카드는 둘 다 말해야 해. 품질: 비트가 적으면 정확도를 치르고, 얼마나인지는 모델, 작업, 방법에 달렸어. 실험실은 3비트에서 더 빨리 디코드했고 답 하나도 평가하지 않았어. 퀘스트는 칩에 대한 거니까. mlx 퀘스트의 양자화 레슨과 모델 자체의 커뮤니티 평가가 그 판단이 사는 곳이야. 그리고 큰 변환 자체: 2.5 GB에 3초는 종이 위에선 1.5 TB에 변환기 시간 30분쯤으로 늘고(그중 원본을 Air의 실측 SSD 속도로 한 번 읽는 건 9분이야), 변환기가 512 GB 맥에서 bf16 세트 전체를 한 번에 상주시켜야 하는지는 1.5 TB 입력에서 시험되지 않았어. 저장소의 GLM-5.3과 Studio를 가진 독자는 오후 하나에 알아낼 거야. 실험 선 레슨은 그 오후의 결과로 뭘 할지에 대한 거야.

Code

quantize_plan.py — 실측한 비트 사다리, 그리고 저장소 파일에 같은 산수·python
#!/usr/bin/env python3
"""Quantize to fit one machine. The bits ladder measured on a small checkpoint on office
(one command, seconds), then the same arithmetic applied to the store's big files. The
store is not a quantizer; this runs on a Mac that is."""
import subprocess, sys
# --- the command, run for real on a 1B so its cost is known (office, 2026-09-15, mlx-lm 0.31.3) ---
# python -m mlx_lm convert --hf-path unsloth/Llama-3.2-1B-Instruct --mlx-path q4-llama -q --q-bits 4 --q-group-size 64
# bf16 2.47 GB -> 3 bits: 532 MB (3.501 b/w), 461.7 tok/s | 4 bits: 680 MB (4.501), 428.6 | 6 bits: 974 MB (6.501), 330.1
#                        8 bits: 1.2 GB (8.500), 292.2 | bf16 as shipped: 187.8 tok/s.  3 s per conversion.
BW, WS = 819.0, 498.0
STORE = [("GLM-5.3", 753, 1506.7), ("GLM-5.3-Flash", 320, 642.7), ("Kimi K3", 2800, 1561.0), ("Qwen3.8-Flash-Next", 180, 360.0)]
print(f"{'checkpoint':20} {'params B':>8} {'bf16 GB':>8} | " + " ".join(f"{b}-bit GB" for b in (8, 6, 4, 3)) + "   fits 498 at")
for name, params, bf16 in STORE:
    sizes = {b: params * (b + 0.5) / 8 for b in (8, 6, 4, 3)}                     # b bits + ~0.5 for scales/biases at group 64
    fits = next((f"{b} bits" for b in (8, 6, 4, 3) if sizes[b] + 16 <= WS), "nothing")
    print(f"{name:20} {params:8d} {bf16:8.0f} | " + " ".join(f"{sizes[b]:8.0f}" for b in (8, 6, 4, 3)) + f"   {fits}")
print("\nreading the 1.5 TB original once at the Air's measured 2.85 GB/s is ~9 minutes; a Studio SSD is faster and unmeasured here.")
print("whether the converter needs the whole BF16 set resident at once on a 512 GB Mac was not tested on a 1.5 TB input -- the 2.5 GB one fit trivially.")

External links

Exercise

가진 bf16 체크포인트 하나를 8, 6, 4, 3비트로 mlx_lm convert에 돌려. 변환기의 가중치당 비트 줄, 파일 크기, 각각의 디코드 속도를 카드에 기록해. 그다음 실제로 돌릴 폭과 그 이유를 써. 들어감인지, 속도인지, 읽은 평가인지.
Hint
작은 모델에선 디코드 사다리가 바닥에서 평평해지고 큰 모델에선 가파르게 유지될 거라고 예상해. 파일은 파라미터당 (비트 + 0.5) ÷ 8바이트쯤일 거야. 한 단 내려가도 디코드가 전혀 안 빨라지면 고정 비용이 그 모델을 소유하는 거고, 폭은 품질만으로 골라야 해.

Progress

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

댓글 0

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

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