맥에서 큰 로컬 모델이 스왑을 쓰지 않게 하는 현실적 방법

맥북 M2 Max 96GB 메모리에서 llama.cpp로 Qwen 3.5 122B q4 모델을 돌릴 때, 메모리 사용량이 91~92GB쯤 되면 KV 캐시가 스왑으로 밀려나는 문제가 생긴다. 실행 설정은 150,000 컨텍스트, 병렬 처리 1개, `--mlock`, `-ngl 99`, `-fa on`, `--cache-ram 6000` 등을 포함한다. 댓글의 핵심 조언은 llama.cpp가 맥 운영체제의 메모리 배치 결정을 완전히 통제하기 어렵다는 점이다.

리눅스에서는 스왑을 끄는 방법이 있지만, 맥에서는 같은 방식이 통하지 않는다. 대안으로 `-ctk q8_0`와 `-ctv q8_0`를 써서 KV 캐시를 양자화하면 KV 메모리를 대략 절반으로 줄일 수 있다. 다만 코딩처럼 정밀도가 중요한 작업에서는 정확도가 떨어질 수 있고, 긴 컨텍스트에서는 생성 속도도 느려질 수 있다.

또 `sudo sysctl iogpu.wired_limit_mb=92160`처럼 맥의 공유 메모리 한도를 조정해 볼 수 있지만, 너무 높게 잡으면 운영체제에 필요한 여유 메모리까지 밀어붙일 수 있으며 재시작하면 기본값으로 돌아간다. 150,000 컨텍스트가 꼭 필요하지 않다면 컨텍스트 크기를 낮추는 것도 가장 단순한 해결책이다.

핵심 포인트

  • M2 Max 96GB에서 Qwen 3.5 122B q4 모델을 150,000 컨텍스트로 돌리면 메모리가 91~92GB 근처에서 스왑으로 넘어갈 수 있다.
  • 맥에서는 llama.cpp가 스왑 사용 여부를 세밀하게 제어하기 어렵고, 리눅스식 `swapoff` 방식도 바로 쓸 수 없다.
  • `-ctk q8_0`와 `-ctv q8_0`로 KV 캐시를 양자화하면 KV 메모리를 크게 줄일 수 있다.
  • KV 캐시 양자화는 코딩 같은 정밀 작업에서 정확도 저하가 있을 수 있고, 긴 컨텍스트에서는 속도도 느려질 수 있다.
  • 150,000 컨텍스트가 꼭 필요하지 않다면 컨텍스트 크기를 줄이는 것이 가장 단순한 메모리 절감책이다.

용어 한 줄 설명

llama.cpp
GPU 없이 CPU에서 AI 언어 모델을 실행할 수 있게 해주는 오픈소스 프로그램.
메모리 사용량
프로그램이 실행될 때 컴퓨터 자원을 얼마나 차지하는지를 뜻합니다.
KV 캐시
AI 모델이 방금 본 문장의 정보를 다시 계산하지 않으려고 임시로 저장해 두는 기억 공간이다.
컨텍스트
AI가 현재 대화에서 기억하고 있는 모든 내용으로, 길어질수록 더 많은 토큰을 소모한다
병렬 처리
여러 작업을 차례가 아니라 동시에 진행해 시간을 줄이는 방법.
cache
이미 처리한 내용을 다시 쓰게 해 시간과 비용을 줄이는 저장 방식입니다.
운영체제
컴퓨터 시스템의 여러 프로그램과 작업을 전체적으로 관리하는 기본 소프트웨어입니다.
AI 에이전트
사람 대신 정보를 찾거나 작업을 처리하도록 만든 AI 프로그램입니다.
원문 보기