llama.cpp loads MTP tensors by default, wasting VRAM on every run
New default inflates memory use by one MoE layer, even if you don't use MTP.
A recent pull request (#25980) merged into llama.cpp has changed the default behavior for models that contain Multi-Token Prediction (MTP) tensors in their GGUF files. Previously, these tensors were skipped unless the user explicitly enabled speculative decoding with the --spec-type draft-mtp flag. Now, the code loads MTP tensors by default for any architecture that includes a draft-mtp sub-model, regardless of whether speculative decoding is actually being used. This applies to popular community GGUF models such as GLM-5.2, hy_v3, qwen35moe, step35, and others that bundle the MTP block as standard.
The practical impact is immediate and memory-inefficient: each time a user loads a model with these baked-in MTP tensors, an extra MoE (Mixture of Experts) layer's worth of RAM or VRAM is consumed — even when the user has no intention of using speculative decoding. For users on limited VRAM (e.g., 8GB or 12GB cards), this can mean the difference between fitting a model comfortably and crashing with out-of-memory errors. The change was likely made to simplify code paths and ensure compatibility, but it inadvertently forces a memory penalty on every user. Community members have already flagged the issue on GitHub and suggest manually skipping the MTP tensors as a workaround until the default behavior is reverted or made optional.
- llama.cpp PR #25980 loads MTP tensors by default for any GGUF with a draft-mtp architecture.
- Affects popular models like GLM-5.2, hy_v3, qwen35moe, and Step35 that bundle MTP blocks.
- Results in ~1 extra MoE layer of VRAM/RAM consumption even when speculative decoding is disabled.
Why It Matters
Unnecessary memory bloat reduces available VRAM for large models, potentially causing OOM errors on mid-range GPUs.