클라우드 Mac mini에서 로컬 LLM 추론 돌리기: 메모리 설계와 양자화 선택

LLM ·약 7분 읽기

클라우드 Mac mini에서 로컬 LLM 추론 돌리기: 메모리 설계와 양자화 선택

지난주 온디바이스 AI 실험을 하는 독자분이 이런 질문을 주셨습니다. Llama 3 8B와 13B 코드 모델을 돌려보고 싶은데, 로컬 노트북 메모리가 부족하고 Mac Studio를 사자니 성능을 다 못 쓸까 걱정된다며, 일단 클라우드에서 한 대 빌려서 어느 정도 규모까지 돌아가는지 테스트해볼 수 있는지 물어보셨습니다. 이는 사실 꽤 전형적인 시나리오입니다. 이번 글에서는 이 흐름을 따라 클라우드 Mac mini에서 로컬 LLM 추론을 돌릴 때의 메모리 설계, 환경 구축, 양자화 포맷 선택을 전체적으로 정리합니다.

통합 메모리 대역폭으로 모델 크기를 역산하는 이유

Apple Silicon의 CPU, GPU, 신경망 엔진은 동일한 통합 메모리를 공유하기 때문에 VRAM과 메인 메모리 간 데이터 이동에 따른 오버헤드가 없습니다. 이는 추론 작업에 있어 타고난 장점이지만, 동시에 메모리 용량이 곧바로 돌릴 수 있는 모델의 상한선을 결정한다는 뜻이기도 합니다. 대략적인 환산 규칙은 다음과 같습니다: FP16으로 학습된 모델을 4-bit로 양자화하면 메모리 점유량은 파라미터 수의 약 0.55~0.6배(단위 GB) 정도가 되며, 여기에 컨텍스트 캐시(KV 캐시)와 시스템 오버헤드가 추가됩니다.

모델 메모리 권장 모델 크기(Q4) 일반적인 컨텍스트 길이
M4R S(M4, 16GB) 16GB 7B~13B 4K~8K
M4R M(M4, 24GB) 24GB 13B~30B 8K~16K
M4R L(M4 Pro, 64GB) 64GB 30B~70B(Q4) 16K 이상

이 표는 시작점 참고용일 뿐이며, 실제로 어느 정도까지 돌릴 수 있는지는 Xcode나 브라우저 등 메모리를 많이 쓰는 앱을 동시에 켜놓았는지에 따라 달라집니다. 추론 프로세스가 죽기 전에 top으로 시스템에 남은 여유 메모리가 얼마나 되는지 미리 확인해두세요. OOM이 난 뒤에 원인을 찾는 것보다는 미리 확인하는 편이 낫습니다.

환경 구축: llama.cpp와 MLX 중 선택

두 경로는 서로 배타적이지 않으며, 같은 머신에 둘 다 설치해두고 작업에 따라 전환해서 쓸 수 있습니다.

llama.cpp: 범용성 우선

brew install cmake
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_METAL=ON
cmake --build build --config Release -j
./build/bin/llama-cli -m models/llama-3-8b-q4_k_m.gguf \
  -p "写一段解释递归的代码示例" -n 256 --ctx-size 4096

-DGGML_METAL=ON이 핵심입니다. Metal 백엔드를 활성화해야 GPU 성능을 최대로 끌어낼 수 있습니다. 이 옵션을 넣지 않으면 순수 CPU 추론으로 되돌아가서 속도가 몇 배나 떨어집니다.

MLX: Apple 네이티브 프레임워크

python3 -m venv mlx-env
source mlx-env/bin/activate
pip install mlx-lm
mlx_lm.generate --model mlx-community/Llama-3-8B-Instruct-4bit \
  --prompt "解释一下 KV cache 的作用" --max-tokens 256

MLX는 mlx-community 네임스페이스에 양자화된 가중치를 직접 호스팅하고 있어서 직접 포맷을 변환할 필요가 없고, llama.cpp보다 진입 장벽이 낮습니다. 다만 생태계 성숙도와 커뮤니티 트러블슈팅 자료의 양은 현재로선 llama.cpp가 더 풍부합니다.

양자화 포맷 선택 기준

양자화는 낮을수록 무조건 좋은 게 아니며, 작업 유형에 따라 골라야 합니다.

  • Q4_K_M: 일상적인 질의응답, 코드 자동완성 시나리오에는 충분하며 메모리 점유가 가장 적어 대부분 시나리오의 기본 선택입니다.
  • Q5_K_M: 긴 추론 체인, 다단계 논리 판단이 필요한 경우 이 등급까지 올리는 것을 권장하며 출력 안정성이 눈에 띄게 좋아집니다.
  • Q8_0: 원본 정밀도에 가까워 정확도 요구가 높은 평가 시나리오에 적합하지만, 메모리 점유가 두 배로 늘어나므로 메모리가 충분한(24GB 이상) 경우에만 고려하세요.

판단 기준은 간단합니다. 먼저 Q4로 실제로 물어볼 만한 질문들을 돌려보고 답변 품질을 직접 확인합니다. 명백한 논리적 비약이나 수치 오류가 나타날 때만 한 단계씩 위로 올려 시도하면 됩니다. 처음부터 최고 정밀도로 메모리를 다 채울 필요는 없습니다.

디스크 용량과 스냅샷 관리

모델 파일은 몇 GB에서 수십 GB에 이르는 경우가 많으므로, 대여 기간이 끝나기 전에 미리 정리 계획을 세워야 합니다.

  1. 다운로드한 모델은 ~/models/ 디렉터리에 통일해서 두면 디렉터리 단위로 일괄 정리하거나 이전하기 편리합니다.
  2. du -sh ~/models/*로 주기적으로 점유량을 확인하고, 양자화된 구버전 모델은 즉시 삭제해서 시스템 디스크가 가득 차 추론 속도에 영향을 주는 일을 피하세요.
  3. 실험 환경 설정(가상환경, 다운로드해둔 가중치 목록 등)을 보존하고 싶다면 tarball로 묶어 로컬로 다운로드해두세요. 대여 기간이 만료되기 전에 미리 처리해야 하며, 시스템 디스크는 만료 후 데이터를 보관하지 않습니다.
du -sh ~/models/* | sort -rh | head -5
tar czf mlx-env-backup.tar.gz mlx-env models/*.json

실측 흐름과 모니터링

추론을 돌릴 때는 터미널 창을 하나 더 열어 리소스 사용량을 지켜보면 메모리 압박을 미리 파악할 수 있습니다.

sudo powermetrics --samplers gpu_power -i 1000 -n 5

GPU 사용률과 전력 곡선을 관찰하다가, 오랫동안 높은 수준을 유지하는데도 응답이 느리다면 보통 컨텍스트 캐시가 메모리 대역폭을 다 잡아먹고 있는 경우입니다. 이때는 무작정 배치 크기를 늘리지 말고 --ctx-size를 줄이거나 더 작은 양자화 등급으로 바꿔야 합니다.

자주 묻는 질문

8GB 메모리 기종에서 7B 모델이 돌아가나요?

Q4 양자화 버전이면 동작하지만 OS와 백그라운드 프로세스가 메모리를 소모하므로 최소 2GB는 시스템용으로 남겨두세요. 실사용 가능 메모리가 컨텍스트 길이 상한을 결정하므로 긴 컨텍스트 작업은 16GB 이상을 권장합니다.

llama.cpp와 MLX 중 무엇을 선택해야 하나요?

크로스 플랫폼 호환성과 성숙한 생태계를 원하면 llama.cpp, Apple Silicon에서의 제로카피 메모리 처리와 디버깅 경험을 원하면 MLX가 적합합니다. 한 기기에서 둘 다 병행하며 작업별로 전환할 수 있습니다.

Q4 양자화가 출력 품질에 눈에 띄게 영향을 주나요?

일상적인 질의응답이나 코드 자동완성에는 영향이 적지만, 긴 추론 체인이나 정밀한 수치 계산 작업에는 Q5_K_M 이상을 권장합니다. 소규모 샘플로 먼저 검증한 뒤 양자화 등급을 결정하세요.

전용 Mac mini에서 직접 확인해 보세요

일 단위 대여, root 권한, 몇 분 만에 사용 시작. 먼저 테스트해보고 장기 이용 여부를 결정하기에 적합합니다.

지금 주문