추론 중 통합 메모리를 쓰는 세 주인공
- 모델 가중치. 크게 변하지 않는 상수야. 7B Q4 모델은 약 5 GB, 70B Q4는 약 50 GB를 써. foundations.lesson4의 냅킨 계산으로 얻은 값이야.
- KV 캐시. 문맥 창의 모든 토큰에 대한 key와 value를 들고 자라는 버퍼야. 문맥 길이에 비례하고 층마다 더해져. 32k 문맥의 7B 모델에서는 극단적으로 모델 자체보다 커질 수 있어.
- 활성값 메모리. 순전파 한 번 동안 잠깐 쓰는 버퍼야. 추론에서는 KV 캐시보다 작지만 분명히 차지해.
여기에 macOS가 운영체제와 다른 앱을 위해 고정 메모리를 남겨둬. prod.lesson2에서 그 천장을 자세히 볼 거야. 여기서는 직접 통제할 수 있는 KV 캐시 크기와 측정법에 집중해.
메모리는 추측하지 말고 측정해
MLX는 mx.get_active_memory()와 mx.get_peak_memory()를 제공해. 앞의 값은 현재 할당된 GPU 메모리 바이트, 뒤의 값은 마지막 초기화 뒤 가장 높았던 바이트 수야. 생성 전후에 읽으면 모델, KV 캐시, 활성값이 정확히 얼마나 썼는지 알 수 있어.
사무실 Mac에서 1B Q4 시연 모델로 검증한 값은 이랬어.
- 불러온 뒤 — 현재 약 663 MB
- 짧은 생성 뒤 — 현재 약 663 MB
- 200토큰 생성 뒤 — 현재 약 663 MB, 최고 약 685 MB
1B 모델의 KV 캐시는 보통 문맥 길이에서 전체 메모리를 좌우할 만큼 크지 않아. 하지만 32k 문맥의 7B 이상 모델로 커지면 가중치보다 KV 캐시가 더 중요한 숫자가 될 수 있어.
고정 메모리 천장도 있어
macOS는 GPU가 통합 메모리 100%를 잠그지 못하게 해. 기본 iogpu.wired_limit_mb가 Mac 모델별 비율에 따라 GPU가 쓸 수 있는 메모리를 제한해. 192 GB Mac Studio도 천장이 192 GB에 가깝지만 정확히 전부는 아니야. 냅킨 계산상 들어가는데 실제 생성에서 실패한다면 이 고정 메모리 한도가 흔한 원인이야. prod.lesson2에서 전체 진단을 다룰 거야.
그래서 무엇을 해야 하나
- 가중치와 KV 캐시를 추정한 뒤 foundations.lesson3의 규칙대로 통합 메모리 약 70% 안에 들어오는 모델을 골라.
- 긴 문맥을 쓸 때는 fp16보다 Q4처럼 더 강하게 양자화한 모델을 골라 캐시 공간을 남겨.
- 모델이 들어간다고 선언하기 전에
mx.get_peak_memory()로 재. 냅킨 계산의 신뢰 범위는 약 ±10%이고 실제 최고값은 놀랄 수 있어. - 천장에 닿으면 시스템 설정부터 건드리지 말고 양자화를 더 강하게 하거나 문맥을 줄여.