Mac 의 진짜 벽이 어디인가
foundations.lesson4 의 냅킨 계산이 모델이 대략 얼마나 메모리 필요한지 말해줘. 현실은 macOS 가 GPU 가 unified memory 의 100% lock 하게 안 둬 — Mac SKU 에 따라 다른 wired-memory 천장 있음, 전형적으로 OS 사용과 다른 앱 위해 총 RAM 의 ~25% 예약. 512 GB M3 Ultra Studio 에서 실용 GPU 천장이 380 GB 에 더 가까움; 64 GB MacBook Pro 에서 48 GB 에 더 가까움.
이 레슨은 네 벽이 어디인지와 hit 했을 때 뭐 할지 알아내는 진단 도구.
진단 명령
세 sysctl 값이 wired-memory 상황에 대해 알아야 할 모든 거 말해줘:
hw.memsize— 총 물리 unified memory (byte).iogpu.wired_limit_mb— 명시적 GPU wired-memory cap (MB).0은 "system default" 의미 (전형적으로 ~총의 75%).vm.memory_pressure(memory_pressure도구 통해) — 현재 압력 상태 (normal, warn, critical).
천장 올리기 — 안전할 때
sudo sysctl iogpu.wired_limit_mb=N 통해 iogpu.wired_limit_mb 올려서 GPU 에 기본보다 더 많은 메모리 줄 수 있어. 안전한지는 다른 뭐 돌리느냐에 달림:
- ML 작업에 dedicate 된 192-512 GB Mac Studio, 다른 무거운 앱 없음 — 총의 90% 까지 올리는 거 합리적.
- 에디터, 브라우저, 다른 앱 돌리는 16-64 GB MacBook — 올리지 마. OS 가 자기 몫 못 받으면 macOS 가 swap 또는 프로세스 kill 시작.
- 한 큰 작업 위해 임시로 올렸으면, 끝나면 다시 설정 — 값이 세션에 걸쳐 persist 하지만 reboot 에 reset.
벽 hit 했을 때 뭐 하나
- 양자화 떨어뜨림 — Q4 → 더 작은 group_size 의 Q4, 또는 Q4 → mixed_3_4 (Track 3). 각 step 이 진짜 메모리 깎음.
- Context 줄임 — KV cache 가 시퀀스 길이로 선형 scale. 긴-context generation 중 OOM 보면
max_tokenscap 또는 더 작은-context 모델 사용. - 모델 줄임 — OS-레벨 메모리 한계와 싸우기 전에 한 tier 떨어뜨림 (70B → 13B). sysctl 올리는 것보다 싸.
- full precision 의 더 큰 모델 대신 더 작은 base 모델 + LoRA. Track 4 의 레슨이 여기에도 적용.
Peak-memory 측정 워크플로
모델 + 워크로드를 production 에 commit 할 때마다 peak 메모리 한 번 측정. 대표적 추론 run 끝의 mx.get_peak_memory() 가 실제 천장 줘. 20% 안전 margin 추가, 그게 여전히 wired-memory cap 아래인지 확인, 그러면 calibrate 됨.