AMD llama.cpp: MTP 버퍼 오버헤드 감소로 Qwen 27B 컨텍스트 64K → 149K 달성
AMD llama.cpp: reducing MTP buffer overhead gave me 64K → 149K context for Qwen 27B
핵심 요약
llama.cpp의 MTP 메모리 할당 문제를 수정하여 ROCm 환경에서 컨텍스트 길이를 2배 이상 확보했습니다.
- MTP 메모리 최적화 — llama.cpp의 과도한 MTP 버퍼 할당 문제를 수정하여 사용 가능한 컨텍스트를 대폭 늘림
- ROCm 성능 향상 — 듀얼 GPU 환경에서 Vulkan 대비 더 빠른 프리필 속도와 긴 컨텍스트 길이를 확보함
- 패치 및 로그 공유 — llama-server용 패치와 테스트 로그를 공개하여 검증 가능하게 함
- 백엔드 선택 가이드 — VRAM 절약이 필요하면 Vulkan, 긴 컨텍스트와 성능이 중요하면 ROCm 사용 권장
사용 가능한 컨텍스트 길이(패치 적용 전후):
| 모델: QWEN 27B | ROCm 순정 | 패치 적용 | Vulkan 순정 | 패치 적용 |
| --- | --- | --- | --- | --- |
| IQ4_XS Pure, 단일 16GB GPU | 19.456 | 76.032 | 68,352 | 78,592 |
| Q6_K_L (16GB + 12GB) | 64,256 | 149,248 | 68,864 | 151,296 |
문제는 llama.cpp가 자동 맞춤(auto-fit) 과정에서 MTP 연산 버퍼/스케줄러 할당에 필요한 메모리를 과대평가한다는 점입니다. 이로 인해 사용자가 실제로 MTP에 필요한 것보다 훨씬 적은 컨텍스트만 사용할 수 있게 됩니다. 이번 패치는 MTP 메모리 추정치가 부풀려져 컨텍스트가 낭비되는 것을 막아줍니다.
패치, llama-server용 실행 스크립트 및 원본 로그: https://store.piffa.net/lm/bug/
테스트 환경: llama.cpp 버전 909, 마스터 커밋 7bd8282 기반, ROCm 7.14
특히 듀얼 GPU(여기서는 16GB + 12GB)를 사용하는 ROCm 환경에서 컨텍스트 확보 효과가 상당합니다. 긴 세션에서 ROCm은 Vulkan보다 거의 2배에 달하는 프리필 성능을 보여주지만, 메인라인 코드에서는 추가 연산을 위해 컨텍스트를 희생해야 하는 비용이 컸습니다.
Vulkan과 ROCm 백엔드 모두를 동시에 빌드할 수 있습니다. Vulkan은 VRAM을 조금 더 절약해주고, ROCm은 더 나은 프리필 성능을 제공합니다.
단일 16GB GPU를 사용하고 컨텍스트 크기가 제한적이라면 Vulkan을 사용하는 것이 좋고, 레이어 분할을 통해 2개의 GPU를 사용한다면 이 패치를 적용한 ROCm이 긴 세션을 위한 컨텍스트 길이를 확보하는 데 훨씬 가치가 있습니다.

