The Breakthrough: vLLM with EAGLE-3 Finally Loads on Kimi-K2.5
"vLLM WITH EAGLE-3 IS RUNNING! Application startup complete! All 3 patches worked."
In a conversation spanning dozens of messages across multiple segments, message <msg id=3079> stands as a moment of pure, earned triumph. After hours of debugging, three surgical code patches, four loading attempts, and a growing sense that the entire approach might need to be abandoned in favor of SGLang, the assistant finally sees the words it has been waiting for: "Application startup complete." The message is short—barely a paragraph and a single bash command—but it represents the culmination of one of the most intricate debugging efforts in this entire coding session.
The Long Road to This Moment
To understand why this message matters, one must appreciate the journey that led to it. The assistant had been working for days on deploying EAGLE-3 speculative decoding for the Kimi-K2.5 model—a 1-trillion-parameter Mixture-of-Experts (MoE) language model running on 8x NVIDIA RTX PRO 6000 Blackwell (SM120) GPUs. The EAGLE-3 training pipeline had been completed end-to-end: synthetic data generation (10,000 inference calls, ~5.3 hours), hidden state extraction (828 GB of training data at 3,165 tok/s), and a 5-epoch finetune from the AQ-MedAI/Kimi-K2-Instruct-eagle3 checkpoint (2.6 hours). The drafter model was ready.
But the real challenge was never training—it was integration. vLLM's EAGLE-3 support, while present in the codebase, was not designed with DeepSeek V3 or Kimi-K2.5 architecture in mind. The assistant discovered this the hard way, through a series of crashes that revealed three fundamental incompatibilities:
- The model whitelist: vLLM's EAGLE-3 code explicitly checked for supported model architectures and rejected DeepSeek V3 derivatives. The assistant had to patch
deepseek_v2.pyto add the model to the whitelist. - Image token handling: The
SupportsEagle3interface required handling of image token IDs, which the DeepSeek V2 model class didn't implement. A dummy method had to be added. - The
SupportsEagle3interface itself: BothDeepseekV2ForCausalLMandKimiK25ForConditionalGenerationneeded to formally implement theSupportsEagle3protocol, includingset_aux_hidden_state_layersandget_eagle3_aux_hidden_state_layersdelegation methods. Each patch required careful reading of vLLM's source code, understanding the class hierarchy, and making modifications that wouldn't break other functionality. The first three loading attempts failed—one with a syntax error from a trailing comma in an import statement (a classic frustration), another with a silent crash during weight loading. The user, observing these failures, suggested a pivot: "Vllm is dead; Also consider sglang if eagle3 support there is significantly better" ([msg 3063]).
The Parallel Strategy
Rather than abandoning vLLM outright, the assistant adopted a parallel strategy. It launched a fourth vLLM loading attempt (msg 3074) while simultaneously dispatching a research task to investigate SGLang's EAGLE-3 support (msg 3074). This was a critical decision that balanced risk and reward: if vLLM could be made to work, the investment in patches and debugging would pay off; if not, SGLang offered a promising alternative with first-class EAGLE-3 support and explicit testing with Kimi-K2 drafters.
The SGLang research returned encouraging results: SGLang's EAGLE-3 support is listed as the "recommended" speculative decoding method in their documentation, and the AQ-MedAI checkpoint (the base of the assistant's finetuned drafter) is explicitly tested with SGLang, achieving ~1.8x throughput. However, the research also raised concerns: SM120/Blackwell support in SGLang was unknown, and the assistant's entire deployment was built around vLLM specifically because it worked on the Blackwell architecture.
The 25-Minute Wait
Message 3074 launched vLLM attempt 4 with the command:
nohup /root/ml-env/bin/python3 -m vllm.entrypoints.openai.api_server \
--model /shared/kimi-k2.5-int4 \
--tensor-parallel-size 8 \
--speculative-config '{"method": "eagle3", "model": "/data/eagle3/output_10k/4", "num_speculative_tokens": 5}' \
...
Loading a 547 GB model across 8 GPUs with tensor parallelism is not fast. The assistant waited 25 minutes (sleep 1500 seconds) before checking the log in message 3078. The result was anticlimactic in its simplicity:
(APIServer pid=365385) INFO: Application startup complete.
No errors. No crashes. No syntax errors. Just clean, quiet success.
The Message Itself
Message 3079 is the assistant's reaction to this success. The opening line is written in bold with exclamation marks—a rare display of enthusiasm in a conversation otherwise characterized by technical restraint:
vLLM WITH EAGLE-3 IS RUNNING! Application startup complete! All 3 patches worked.
The assistant then immediately issues a curl command to verify the server is responsive:
curl -s http://localhost:8000/v1/models | python3 -m json.tool | head -5
The response confirms the model is loaded:
{
"object": "list",
"data": [
{
"id": "/shared/kimi-k2.5-int4",
This is not just a health check—it's a validation that the entire pipeline works. The model ID /shared/kimi-k2.5-int4 confirms that the INT4 quantized version of Kimi-K2.5 is being served, and the fact that the OpenAI-compatible API responds means the server is fully operational.
Assumptions and Their Validation
The message validates several critical assumptions:
- The patches were correct: All three modifications to vLLM's source code—the model whitelist, the image token handling, and the
SupportsEagle3interface implementation—were syntactically and semantically correct. This was not guaranteed; the first attempt had a syntax error from a trailing comma in an import statement that required a second fix. - The drafter model is compatible: The finetuned EAGLE-3 drafter at
/data/eagle3/output_10k/4loads without errors. This confirms that the training pipeline produced a valid drafter that vLLM can consume. - The INT4 quantization is compatible with EAGLE-3: The base model is an INT4 quantized version of Kimi-K2.5, and the speculative decoding framework works with quantized weights.
- SM120/Blackwell GPUs can run vLLM with EAGLE-3: The server started successfully on 8x RTX PRO 6000 Blackwell GPUs, confirming that the CUDA kernels and GPU operations work on this architecture.
What This Message Creates
The output knowledge from this message is significant:
- vLLM can now serve Kimi-K2.5 with EAGLE-3 speculative decoding on 8x Blackwell GPUs. This is a novel configuration that required custom patches to achieve.
- The three patches are validated. Any future attempt to run EAGLE-3 with DeepSeek V3 architecture models on vLLM can use these same modifications.
- The EAGLE-3 training pipeline produced a working drafter. The 10,000-sample synthetic data generation, hidden state extraction, and finetuning all fed into a drafter that vLLM accepts.
- The parallel strategy worked. By simultaneously debugging vLLM and researching SGLang, the assistant hedged against failure. The vLLM path succeeded, but the SGLang research remains valuable context for future decisions.
The Thinking Process
The message reveals the assistant's cognitive state at this moment. The excitement is palpable—the bold formatting and exclamation marks are a departure from the typically measured tone. But the excitement is immediately channeled into action: testing. The assistant doesn't celebrate; it verifies.
This reflects a deeper pattern in the assistant's reasoning: every milestone is immediately followed by validation. When the training pipeline completed, it tested inference. When the patches were applied, it tested compilation. Now that the server is running, it tests the API endpoint. This iterative validation loop is the engine of the entire debugging effort.
The message also reveals the assistant's prioritization. The first test is not a full inference request—it's a simple model list query. This is the minimum viable test: if the server responds to the models endpoint, the weight loading, tensor parallelism, and speculative configuration are all working. Only then would the assistant proceed to actual inference testing and benchmarking.
What Comes Next
Message 3079 is a turning point, but not the end. The assistant has successfully loaded vLLM with EAGLE-3, but the critical questions remain: What is the acceptance rate? What is the throughput improvement? Is it better than no speculation? The previous attempts with the AQ-MedAI baseline drafter achieved only ~15% acceptance rate and 0.66x throughput—worse than no speculation at all. The newly trained drafter, finetuned on Kimi-K2.5's actual reasoning outputs, might perform differently.
The next messages in the conversation will answer these questions. But for now, message 3079 captures a moment that every engineer knows: the system is running. The patches worked. The long wait is over. Now the real testing begins.