추론 중 unified memory 를 먹는 세 가지
- 모델 weight. 큰 상수. 7B Q4 모델은 ~5 GB weight 사용; 70B Q4 는 ~50 GB 사용. foundations.lesson4 의 냅킨 공식으로 계산한 숫자.
- KV cache. Context window 의 모든 토큰의 key 와 value 를 들고 있는 자라는 버퍼. Context 길이에 선형, layer 당 곱셈 더해. 32k context 의 7B 모델의 KV cache 는 극단 케이스에서 모델 자체보다 클 수 있어.
- Activation memory. 단일 forward pass 중 쓰는 transient 버퍼. 추론에선 cache 보다 작지만, 진짜.
더해서 macOS 가 OS 자체와 다른 앱들 위해 wired memory 예약. prod.lesson2 가 wired-memory 천장 자세히 다뤄. 이 레슨은 네가 통제하는 부분 — KV cache 크기와 측정법 — 에 집중.
맞는 방법으로 메모리 측정
MLX 가 두 도움 되는 원시형 노출 — mx.get_active_memory() (현재 할당된 GPU 메모리 byte) 과 mx.get_peak_memory() (마지막 reset 이후 peak, byte). 생성 주위 이걸 읽으면 모델 + KV cache + activation 이 정확히 얼마 소비했는지 말해줘.
Office Mac 의 1B Q4 demo 모델에 대해, 검증된 숫자:
- 로드 후 — ~663 MB active
- 짧은 생성 후 — ~663 MB active
- 200-토큰 생성 후 — ~663 MB active, ~685 MB peak
1B 모델의 KV cache 는 전형 context 길이에서 메모리 dominate 안 할 만큼 작아. 32k context 의 7B+ 모델로 scale up 하면 KV cache 가 weight 아니라 load-bearing 숫자 됨.
Wired-memory 천장, 짧게
macOS 는 GPU 가 unified memory 의 100% lock 하게 안 둬. 기본 iogpu.wired_limit_mb 가 GPU 의 접근 가능 메모리를 tier-의존 분수로 cap (Mac 모델 사이 다름). 192 GB Mac Studio 에선, 천장이 192 GB 살짝 아래지만 정확히 192 GB 아냐. 모델이 네 냅킨 계산에 fit 되는데 실제 generation 에 안 fit 되면, wired-memory cap 이 보통 이유. prod.lesson2 가 전체 진단.
이 모든 것에 대해 뭐 하나
- Weight 와 KV cache 추정 후 unified memory 의 약 70% 에 fit 되는 모델 크기 골라 (foundations.lesson3 의 룰).
- 긴 context 엔, 더 작은-양자화 모델 써 — fp16 대신 Q4 — cache 위한 공간 남기게.
- 모델이 "fit" 한다고 선언 전에
mx.get_peak_memory()로 측정. 냅킨 계산은 ±10% 신뢰; 실제 peak 은 놀랄 수 있음. - 천장 hit 하면, system-레벨 조정 손 뻗기 전에 양자화 떨어뜨리거나 context 줄여.