최신 b9274 버전에서 MTP VRAM 누수 문제 해결
Latest b9274 Addresses MTP VRAM leak
핵심 요약
llama.cpp의 최신 업데이트인 b9274 버전에서 MTP 모델 사용 시 발생하던 VRAM 누수 문제가 해결되었습니다.
- MTP VRAM 누수 — Multi-Token Prediction 모델 사용 시 리소스가 제대로 해제되지 않던 버그가 수정됨.
- 리소스 정리 로직 — destroy() 함수에서 speculative decoder와 draft 모델 관련 리소스를 명시적으로 해제하도록 개선됨.
- 서버 크래시 방지 — 슬립/재개 시 반복적으로 할당되던 메모리 누수를 막아 OOM 오류를 방지함.
- 업데이트 적용 — llama.cpp의 최신 릴리스인 b9274를 통해 해당 패치가 적용됨.
MTP 모델을 몇 분 사용하면 언로드되는 문제가 있었는데 이유를 몰랐습니다. 어쨌든 이게 관련 있는지는 모르겠지만 VRAM이 야금야금 늘어나는 걸 관찰했으니 도움이 되길 바랍니다.
server : 슬립 시 draft/MTP 리소스를 해제하여 VRAM 누수 수정 (#23461)
server_context_impl의 destroy() 함수는 메인 모델과 컨텍스트(llama_init.reset()을 통해)만 정리하고, speculative decoder(spec), draft 컨텍스트(ctx_dft), draft 모델(model_dft)은 해제하지 않았습니다.
MTP(Multi-Token Prediction) 모델의 경우, ctx_dft는 슬립 상태로 진입할 때 해제되지 않는 GPU 할당 리소스(KV 캐시, 연산 버퍼)를 보유합니다. 슬립/재개 주기가 반복될 때마다 이전 리소스가 해제되지 않은 채 새로운 리소스가 할당되어, 결국 서버가 메모리 부족(OOM) 오류로 크래시되는 VRAM 누수가 발생합니다.
llama_init을 리셋하기 전에 destroy()에서 spec, ctx_dft, model_dft를 명시적으로 리셋하여 수정했습니다. 이를 통해 use-after-free를 방지하고 적절한 정리 순서를 보장합니다.

