Mac에서 부딪히는 진짜 벽
foundations.lesson4의 어림셈은 모델에 필요한 메모리를 대략 알려 줘. 하지만 macOS는 GPU가 통합 메모리 전부를 고정해 쓰게 두지 않아. Mac 기종마다 고정 메모리 한계가 다르고, 보통 운영체제와 다른 앱을 위해 전체 RAM의 약 25%를 남겨 둬. 512GB M3 Ultra Mac Studio의 실용적인 GPU 한계는 380GB에 가깝고, 64GB MacBook Pro는 48GB에 가까워.
이 레슨에서는 내 Mac의 한계가 어디인지 찾고, 그 벽에 닿았을 때 무엇을 바꿀지 진단해.
진단 명령
다음 세 값을 보면 고정 메모리 상태를 파악할 수 있어.
hw.memsize— 전체 물리 통합 메모리를 바이트로 보여 줘.iogpu.wired_limit_mb— GPU가 고정해 쓸 수 있는 명시적 한계를 MB로 보여 줘.0은 시스템 기본값을 뜻하며 보통 전체의 약 75%야.vm.memory_pressure—memory_pressure도구를 통해 현재 압력이 정상, 경고, 위험 중 어디인지 알려 줘.
한계를 올려도 되는 경우
sudo sysctl iogpu.wired_limit_mb=N으로 iogpu.wired_limit_mb를 높이면 GPU에 기본값보다 더 많은 메모리를 줄 수 있어. 안전한지는 같은 Mac에서 무엇을 함께 돌리느냐에 달렸어.
- 머신러닝에 전용으로 쓰는 192~512GB Mac Studio에 다른 무거운 앱이 없다면 전체의 90%까지 높이는 선택이 합리적일 수 있어.
- 편집기와 브라우저 등 여러 앱을 함께 쓰는 16~64GB MacBook에서는 올리지 마. 운영체제가 필요한 몫을 얻지 못하면 macOS가 스왑을 늘리거나 프로세스를 종료해.
- 큰 작업 하나 때문에 잠시 올렸다면 끝난 뒤 되돌려. 값은 현재 부팅 세션 동안 유지되지만 재부팅하면 초기화돼.
벽에 닿았을 때
- 양자화를 더 낮춰 — Q4에서 더 큰
group_size의 Q4로 바꾸거나, 평균 비트 수가 더 낮은 mixed_3_4를 써(트랙 4). 그룹이 커지면 축척값·영점의 부가 비용이 줄고, 평균 비트 수를 낮추면 가중치 자체가 더 작아져. - 문맥을 줄여 — KV 캐시는 시퀀스 길이에 비례해 커져. 긴 문맥 생성 중 메모리 부족이 나면
max_tokens를 제한하거나 문맥이 더 짧은 모델을 써. - 모델 크기를 낮춰 — 운영체제의 메모리 한계와 싸우기 전에 70B에서 13B처럼 한 단계 내려가. sysctl을 건드리는 것보다 싸고 안전해.
- 완전 정밀도의 큰 모델 대신 작은 기반 모델과 LoRA를 써. 트랙 5의 교훈이 여기에도 적용돼.
최대 메모리 측정 흐름
모델과 작업을 운영에 넣기로 할 때마다 최대 메모리를 한 번 재. 대표적인 추론을 마친 뒤 mx.get_peak_memory()를 보면 실제 최대값을 얻을 수 있어. 여기에 안전 여유 20%를 더하고도 고정 메모리 한계 아래인지 확인하면 판단 근거가 생겨.