]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
server : free draft/MTP resources on sleep to fix VRAM leak (#23461)
authorAman Gupta <redacted>
Thu, 21 May 2026 08:11:11 +0000 (16:11 +0800)
committerGitHub <redacted>
Thu, 21 May 2026 08:11:11 +0000 (16:11 +0800)
The destroy() function in server_context_impl only cleaned up the main
model and context (via llama_init.reset()) but did not free the speculative
decoder (spec), draft context (ctx_dft), or draft model (model_dft).

For MTP (Multi-Token Prediction) models, ctx_dft holds GPU-allocated
resources (KV cache, compute buffers) that are not freed when entering
the sleeping state. On each sleep/resume cycle, new resources are
allocated without the old ones being freed, leading to a VRAM leak
that eventually crashes the server with out-of-memory errors.

Fix by explicitly resetting spec, ctx_dft, and model_dft in destroy()
before resetting llama_init, ensuring proper cleanup order to avoid
use-after-free.

ref: https://github.com/ggml-org/llama.cpp/issues/23395

Assisted-by: llama.cpp:local pi
tools/server/server-context.cpp

index f517310266c0d0b9ec786092ecf7210992fd5355..80d77b0c06b94876ac1f68a2ab09f9e4967e7c58 100644 (file)
@@ -701,6 +701,10 @@ private:
     bool sleeping = false;
 
     void destroy() {
+        spec.reset();
+        ctx_dft.reset();
+        model_dft.reset();
+
         llama_init.reset();
 
         ctx_tgt = nullptr;