eagle3-new-model

द्वारा nvidia

Add a new model to the EAGLE3 offline pipeline. Generates an hf_offline_eagle3.yaml launcher config for a new model checkpoint, choosing the right hidden state…

npx skills add https://github.com/nvidia/model-optimizer --skill eagle3-new-model

EAGLE3 New Model Configuration

Create tools/launcher/examples/<Org>/<Model>/hf_offline_eagle3.yaml by copying the closest existing example and adapting it. Pick a reference with the same shape as the target (dense vs MoE, similar size) from tools/launcher/examples/ — e.g. the Qwen3-8B config for a dense model.

The pipeline is a 4-task config (task_0 data synthesis → task_1 hidden-state dump → task_2 train → task_3 benchmark). The task structure, args, containers, and GPU/node sizing are all visible in the existing examples — infer them from a reference rather than hand-rolling. This file documents only the two things that are not obvious from the examples: which dump backend to pick, and the model-specific gotchas.

Choosing the task_1 hidden-state dump backend

BackendScriptWhen to use
vLLMcommon/eagle3/dump_offline_data_vllm.shDefault. Broad coverage via vLLM's native hidden-state extractor.
HFcommon/eagle3/dump_offline_data_hf.shVLMs / multimodal, custom-code models, sliding-window attention (TRT-LLM can't serve these).
TRT-LLMcommon/eagle3/dump_offline_data.shPure-text models with TRT-LLM support; pass --tp <TP> and --moe-ep <EP>.

Rule of thumb: HF if the model is a VLM or uses sliding-window attention; vLLM otherwise. TRT-LLM only when you specifically want its kernels for a supported plain-text model.

Model-specific adjustments

These are the non-obvious knobs that vary per model:

SituationWhat to change
Requires --trust-remote-codeAdd to task_0 vLLM args (before the -- separator) and to task_3 benchmark args
MoE with large expert hidden dimIncrease intermediate_size in eagle_config.json to match moe_intermediate_size
Custom tokenizer (e.g. tiktoken)Set TIKTOKEN_RS_CACHE_DIR env var in task_0 and task_1

After adapting the config, preview it with --dryrun before submitting.