C.W.K.
Stream
Lesson 05 of 05 · published

Apple Silicon 정밀도 playbook

~12 min · precision, fp16, bf16, int8, int4, apple-silicon

Level 0Beginner
0 XP0/38 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

정밀도 사다리 — 그리고 각 단계가 들어올리는 메모리 천장

192–512 GB unified memory의 Mac Studio에선 '내 모델 들어가?' 질문 거의 항상 정밀도가 답하지 FP32 raw weight count가 답 아냐. 사다리:

정밀도tok/s (전형 7B)메모리 footprint병목언제 픽
FP324–626 GB (7B)메모리디버깅, numpy reference 대비 parity check
BF16 / FP168–1213 GBComputeFine-tune, 중간 모델 서빙
Q8_0 (Int8)12–187 GBL2 hit + DRAM BWDefault 배포
Q4_K (Int4)17–254 GBCompute (dequant)큰 모델, single-node 서빙

내재화할 셋:

  1. 각 단계가 메모리 거의 절반. 70B FP32 모델은 280 GB 필요; FP16이면 140 GB; Int4이면 40 GB — Mac Studio 192 GB 영역.
  2. 속도 이득은 공짜 아냐. FP16 → Int8은 DRAM에서 fetch할 데이터가 적어서 대부분 빠름. Int8 → Int4는 빠름 그리고 dequant이 FLOPs라 다시 compute-bounded.
  3. 품질이 비선형으로 떨어짐. FP32 → BF16은 inference엔 본질적으로 공짜. BF16 → Int8 작음. Int8 → Int4는 어떤 모델은 더 손해; 네 워크로드 벤치마크.

각 정밀도 받쳐주는 메모리 계층

Quantized weight는 unified DRAM에 살아. 커널 동안 hot tile이 L2 / threadgroup memory로 끌려 — 그 cache가 커널이 정밀도의 compute 천장 hit하나 miss에 stall하나 결정.

Code

MLX 정밀도 변환 — 줄당 한 줄·python
import mlx.core as mx

weight_fp32 = mx.array(np.load('weight.npy'))   # source가 뭐든

# Cast path
weight_bf16 = weight_fp32.astype(mx.bfloat16)
weight_fp16 = weight_fp32.astype(mx.float16)

# mlx.nn으로 int4 quantize — 큰 모델 서빙용 표준 path
import mlx.nn as nn
linear = nn.Linear(input_dims=4096, output_dims=4096, bias=False)
linear.weight = weight_fp32
nn.quantize(linear, group_size=64, bits=4)   # in-place, fp32를 int4 + scale로 교체
MLX-LM 서빙 패턴 — load 시점에 정밀도 픽·bash
# Q4가 'Mac Studio에서 70B 서빙' 전형 세팅:
mlx_lm.generate \
    --model mlx-community/Llama-3.1-70B-Instruct-4bit \
    --prompt 'What is the unified memory advantage on Apple Silicon?' \
    --max-tokens 256

# FP16 — 70B 모델에 ~140 GB 필요, 192 GB Mac Studio에 fit:
mlx_lm.generate \
    --model mlx-community/Llama-3.1-70B-Instruct \
    --prompt '...' --max-tokens 256

# Repo에 variant 여러 개면 specific dtype 핀:
mlx_lm.generate --model <repo> --dtype float16

External links

Exercise

MLX-LM 깔린 Mac에서 7B-class 모델에 FP16이랑 Q4로 같은 prompt 돌려. 캡처: (a) tokens/sec, (b) 사용 메모리, (c) 출력 차이 정성적. Q4가 짧은 prompt에서 거의 동일 출력 만들면서 ~2× 빠르고 ~4× 작아야. 안 그러면 모델의 Q4 calibration 나쁨; 다른 community-quantized variant 시도.

Progress

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

댓글 0

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

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