llama.cpp - GPU 메모리를 더 확보하는 방법
llama.cpp - how to free up even more space on your GPU
핵심 요약
llama.cpp에서 GPU VRAM을 추가로 확보하여 컨텍스트 크기를 늘리는 최적화 팁 공유.
- VRAM 최적화 — mmproj 오프로드 및 KV 캐시 설정 조정으로 메모리 확보
- 성능 트레이드오프 — KV 캐시 양자화는 모델 품질 저하를 유발할 수 있음
- 배치 사이즈 — VRAM 사용량과 프리필 속도 간의 균형 조절
- 스레드 설정 — CPU 추론 시 물리 코어 수에 맞춘 최적화 필요
지난 1~2주 동안 llama.cpp가 RAM 사용량 측면에서 훨씬 좋아졌음. 더 이상 메모리 누수도 안 보이고, GPU에도 아주 깔끔하게 잘 들어감. 난 3090을 eGPU로 쓰고 있어서 일반 RAM을 안 쓰려고 기본값으로 --n-gpu-layers 99 --no-mmap --mlock 이렇게 설정해두고 Qwen3.6-27B-UD-Q5_K_XL-mtp, q4_0, 150k 컨텍스트로 돌리는 중임.
컨텍스트 사이즈를 더 늘릴 수 있게 메모리를 쥐어짤 만한 추가 팁이 있는지 궁금해서 글 써봄.
모델(당연히 메모리 점유율의 가장 큰 요인이지) 관련 VRAM 파라미터 정리해본 거임:
- --no-mmproj-offload: 이게 제일 효과 큼. 비전 모델 쓸 때 mmproj를 CPU로 넘겨버리는 건데, 성능은 아주 살짝 떨어지지만 그래픽카드 메모리 1GB를 추가로 확보할 수 있음.
- --cache-type-k, --cache-type-v: KV 캐시 말하는 거임. 당연히 메모리 할당량을 50%, 75% 이런 식으로 줄일 수 있는데, 대신 품질 저하는 감수해야 함. 내가 써보니까 어텐션 로테이션 도입된 이후로는 q4를 써도 품질 저하가 거의 안 느껴지더라고. 어차피 더 큰 베이스 모델을 쓸 수 있게 되니까 KV 캐시 품질 저하보다 이득이 더 큼.
- --cache-type-k-draft, --cache-type-v-draft: mtp 모델의 KV 캐시에도 똑같이 적용됨.
- --spec-draft-n-max: 한 번의 포워드 패스에서 미래 토큰을 몇 개까지 예측할지 정하는 거임. 코딩할 때는 보통 "2" 정도면 충분하더라. "1"로 하면 메모리는 조금 덜 먹는데 TPS가 5% 정도 떨어짐. 내 사용 환경에서는 "3"은 별로임. 메모리는 더 먹는데 TPS는 "1"이랑 똑같거든.
- --flash-attn on: 이제는 기본값인 걸로 알고 있음. 이거 끄면 메모리 할당량 늘어나는데, 어차피 양자화된 KV 캐시 쓰면 끄지도 못함.
도움 될 줄 알았는데 막상 써보니 별 효과 없었던 파라미터들:
- --ctx-checkpoints: 이거 낮추면 메모리 할당량 줄어든다는 소리를 들었는데, 나한테는 전혀 아니었음. 기본값이 64인데, 좀 낮춰봐도 아무 변화 없더라.
- --parallel: 한 번에 처리할 사용자 요청 수임. 기본값이 1이라서 혼자 쓸 때는 건드릴 게 없음. 근데 이거 늘리면 메인 세션의 KV 캐시가 그만큼 줄어듦(50%, 66% 이런 식으로).
- --fit-target: GPU에 무조건 비워둬야 할 안전 버퍼(MB 단위, 기본값 1024)를 설정하는 건데, 예를 들어 비디오 I/O용으로 남겨두는 거임. 난 모니터를 다른 카드에 꽂아서 64로 줄여봤는데 아무 효과 없었음. 내가 알기로는 이제 llama.cpp가 시작할 때 내부 계산 루프를 돌려서 OOM(메모리 부족) 안 나게 변수들을 자동으로 조정하는 것 같음.
내 팁은 여기까지고, 너네는 뭐 아는 거 없냐? 또 다른 거 뭐 있을까? 너네 경험은 나랑 좀 다름? 다들 고맙다!


