The Culmination of a Pipeline: EAGLE-3 Training Completes on Kimi-K2.5

In the sprawling, multi-day coding session documented across segments 18 through 23 of this opencode conversation, message [msg 2993] arrives as a quiet milestone amid a storm of complexity. The assistant writes:

Training complete! 5 epochs in 155.2 minutes (2.6 hours). All 5 checkpoints saved. The final checkpoint at /data/eagle3/output_10k/4/ already has the flat vLLM-compatible config.json written.

These two sentences, delivered without fanfare, represent the successful culmination of an extraordinary engineering pipeline: the end-to-end training of an EAGLE-3 speculative decoding drafter for the 1-trillion-parameter Kimi-K2.5 INT4 model, running on 8x NVIDIA RTX PRO 6000 Blackwell GPUs. The message is brief, but the context it emerges from is anything but.

The Pipeline Behind the Message

To understand what this message means, one must grasp the enormous chain of work that preceded it. The assistant had been tasked with deploying and optimizing large language models on a high-end GPU server, and the conversation had taken a sharp turn into speculative decoding — a technique where a small "draft" model proposes token sequences that a large "verifier" model checks in parallel, potentially doubling or tripling inference throughput.

The journey to message [msg 2993] began many messages earlier with a critical discovery: vLLM's EAGLE-3 integration with Multi-Head Latent Attention (MLA) — the attention mechanism used by DeepSeek-derived models like Kimi-K2.5 — achieved only a ~15% acceptance rate, yielding a net 0.66x slowdown compared to no speculation at all. This was a dead end. The assistant then pivoted to SGLang, which had first-class EAGLE-3 support, but encountered SM120 GPU deadlock issues. With both inference engines blocked, the assistant fell back to the one thing it could do: train a better drafter.

The training pipeline itself was a marvel of engineering. It began with synthetic data generation: a script (01b_generate_synthetic.py) that queried the Kimi-K2.5 model via vLLM's server API to produce 10,000 reasoning traces. This required fixing a subtle bug where the model's internal thinking and response token boundaries needed to be properly reconstructed from the API response's reasoning field. The 10K inference run completed in approximately 5.3 hours with zero errors and 100% reasoning capture.

Next came hidden state extraction (02_extract_hidden_states.py), which ran the verifier model in forward-pass mode to capture the internal representations at specific layer depths (layers 2, 30, 58, and 60). This process ran at 3,165 tokens per second across 8 GPUs, producing 828 GB of training data over 91 minutes. The assistant monitored this extraction across multiple messages ([msg 2970] through [msg 2978]), watching the file counts tick up from 344 to 10,000, and the disk usage grow from 28 GB to 828 GB.

A vocabulary mapping step (03_build_vocab_mapping.py) established the correspondence between the verifier's 163,840-token vocabulary and the drafter's smaller 32,000-token vocabulary — a critical bridge that allows the draft model to propose tokens the verifier can understand.

The Training Run

Message [msg 2981] launched the actual training: a fine-tuning run starting from the AQ-MedAI K2 drafter checkpoint, using the speculators library's Trainer. The configuration specified 5 epochs, a learning rate of 3e-5, cosine scheduling with 1% warmup, and a maximum sequence length of 2048 tokens. The model had 2,594.7 million total parameters, of which 1,190.9 million were trainable — the frozen parameters being the verifier's embedding and language model head weights, which were loaded but not updated.

The training process was opaque due to nohup output buffering, forcing the assistant to rely on indirect signals: GPU utilization at 98%, CPU usage at 259% (the main process plus four data workers), and the appearance of checkpoint directories. Message [msg 2988] confirmed epoch 0 completed in 25.5 minutes of training plus 5.5 minutes of validation — approximately 31 minutes per epoch. Messages [msg 2990] through [msg 2992] tracked epochs 1 through 3, each taking about 25 minutes for training and 5.5 minutes for validation.

The Significance of Message 2993

When message [msg 2993] arrives, it confirms that all 5 epochs completed in 155.2 minutes — almost exactly the 2.6 hours the assistant had predicted in [msg 2988]. The final checkpoint at /data/eagle3/output_10k/4/ contains a 4.5 GB model.safetensors file with the trained weights, and crucially, the config.json has already been written in the "flat vLLM-compatible" format — meaning the assistant anticipated the need to serve this model through vLLM and pre-emptively configured the checkpoint to be directly loadable.

The message also includes a todowrite block showing the completion status of several high-priority items: fixing the synthetic data generation script, cleaning up bad data, transferring the fixed script to the container, and running the vocabulary mapping. This todo list serves as a progress marker, showing that the data preparation pipeline completed successfully before training began.

Assumptions and Knowledge

This message rests on several layers of accumulated knowledge. The reader must understand what EAGLE-3 is — a speculative decoding architecture that uses a lightweight transformer to predict the verifier model's hidden states, enabling the verifier to process multiple candidate tokens in a single forward pass. The "AQ-MedAI checkpoint" referenced in earlier messages is a pre-trained EAGLE-3 drafter for the DeepSeek V3 architecture, which shares the same underlying MLA mechanism as Kimi-K2.5, making it a viable starting point for fine-tuning.

The assistant assumed that the speculators library's Trainer would produce checkpoints compatible with vLLM's EAGLE-3 integration. This assumption turned out to be partially correct — the weight format was compatible, but as subsequent messages reveal ([msg 2998] and beyond), vLLM required additional patches to accept the model, including a model whitelist entry, image token handling fixes, and a SupportsEagle3 interface implementation.

Another assumption embedded in this message is that a 5-epoch fine-tuning on 10,000 samples would produce a drafter with significantly better acceptance rates than the AQ-MedAI baseline. The assistant would later discover that both the newly trained drafter and the AQ-MedAI checkpoint achieved the same ~15% acceptance rate in vLLM, indicating that the bottleneck was not training quality but rather a fundamental integration issue between vLLM's EAGLE-3 implementation and MLA attention during the decode phase.

The Knowledge Created

Message [msg 2993] creates several important pieces of knowledge:

  1. Training feasibility: An EAGLE-3 drafter for a 1T-parameter model can be fine-tuned on a single GPU in 2.6 hours, processing 9,000 training samples per epoch at approximately 6 iterations per second.
  2. Checkpoint structure: The speculators library produces checkpoints with the Eagle3DraftModel architecture, containing embed_tokens.weight, lm_head.weight, fc.weight, and per-layer weights (layers.0.*), plus the vocabulary mapping tensors d2t and t2d.
  3. vLLM compatibility preparation: The assistant explicitly ensured the final checkpoint's config.json uses the LlamaForCausalLMEagle3 architecture name and includes the eagle_config section with eagle_aux_hidden_state_layer_ids — the format vLLM expects.
  4. End-to-end pipeline validation: Every step from synthetic data generation through vocabulary mapping to training completed successfully, proving the pipeline works for the Kimi-K2.5 architecture.

What Came After

The immediate aftermath of this message is instructive. Message [msg 2994] begins the process of validating the checkpoint for vLLM, checking weight key names against what vLLM expects. Message [msg 2995] confirms the checkpoint is already in the right format. Messages [msg 2996] through [msg 2998] kill training processes, free GPU memory, and begin the vLLM integration test.

The vLLM test would reveal the disappointing ~15% acceptance rate that ultimately forced a pivot to SGLang — but that outcome does not diminish the engineering achievement documented in message [msg 2993]. The assistant had built and executed a complete EAGLE-3 training pipeline from scratch, processing 10,000 synthetic reasoning traces through hidden state extraction, vocabulary mapping, and multi-epoch fine-tuning, all coordinated across a remote GPU server with careful monitoring and error handling. The training completed exactly as predicted, producing a valid checkpoint ready for inference serving. That the integration layer proved to be the bottleneck is a separate problem — one the assistant would tackle next with characteristic thoroughness.

Conclusion

Message [msg 2993] is a moment of completion in a long and complex engineering journey. It demonstrates the assistant's ability to orchestrate a multi-stage ML pipeline spanning data generation, feature extraction, model training, and deployment preparation, all while managing the practical constraints of remote GPU servers, nohup-buffered output, and multi-hour execution times. The message is terse, but it carries the weight of dozens of preceding messages — each a careful decision, a bug fix, a monitoring check, or a configuration choice. In the broader arc of the conversation, it represents the high-water mark of the EAGLE-3 training effort before the integration challenges that would follow. For anyone studying how to build speculative decoding pipelines for large language models, this message and its surrounding context offer a detailed case study in both what works and what doesn't.