eagle3-triage

작성자: nvidia

실패한 EAGLE3 파이프라인 실행을 트라이지합니다. 실패한 단계(데이터 합성, 히든 스테이트 덤프, 트레이닝 또는 벤치마크)를 식별하고, 로그에서 근본 원인을 진단하며,…

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

EAGLE3 Pipeline Triage

Diagnose failures in the 4-step EAGLE3 offline pipeline. This skill walks through each step, identifies the failure point, and provides actionable fixes.

Pipeline Overview

StepScriptPurposeCommon failure area
task_0common/vllm/query.shData synthesis via vLLM serverServer startup, model loading, OOM
task_1common/eagle3/dump_offline_data_vllm.sh (or _hf.sh / .sh)Dump hidden statesBackend selection, OOM, unsupported arch
task_2common/eagle3/train_eagle.shTrain EAGLE3 draft headDependencies, training crash, export
task_3common/specdec_bench/quick_check.shBenchmark acceptance rateEngine startup, draft model loading

Step 0 — Locate the experiment

Ask the user for one of:

  • Experiment directory (e.g., the --job-dir passed to launch.py or slurm.py)
  • The model name / YAML they ran

Find recent experiments under the job directory:

ls -td experiments/cicd/cicd_* | head -10
# or wherever --job-dir was pointed

Each experiment directory contains one subdirectory per task (task_0 through task_3), each with a log file whose name varies by launch mode (Slurm: sbatch_*.out, local Docker: *.log).

Step 1 — Fetch logs for the failed task

Match the log files generally and read the tail of each — errors appear at the end:

find experiments/<exp_id>/ -type f \( -name '*.out' -o -name '*.log' \) | sort | while read -r f; do
  echo "=== $f ==="; tail -200 "$f"; echo
done

Look for the first task with a non-zero exit code or error message.

Step 2 — Diagnose by step

task_0 failures (Data Synthesis)

How it works: Launches a vLLM OpenAI-compatible server, polls /health until ready, then runs query.py to generate synthetic prompt/response pairs. Output goes to /scratchspace/data/.

Error patternRoot causeFix
Server never becomes healthy (hangs at health check)Model too large for allocated GPUs, or vLLM startup crashCheck BF16 weight size vs total allocated GPU memory; increase TP and/or nodes.
CUDA out of memory during model loadInsufficient GPU memoryReduce --max-model-len or increase --tensor-parallel-size
trust_remote_code errorModel requires custom code but flag not setAdd --trust-remote-code before the -- separator in task_0 args
Vocab / tokenizer errorMissing tokenizer cache (e.g., GPT-OSS-20B needs TIKTOKEN_RS_CACHE_DIR)Set TIKTOKEN_RS_CACHE_DIR to a pre-populated cache path in the environment
Architecture not supportedvLLM version doesn't support this modelTry a newer vLLM container (vllm/vllm-openai:latest)
CANCELLED ... DUE TO TIME LIMITJob wall-clock limit too shortIncrease Slurm --time. Note: afterany deps let task_1 still start.
Empty /scratchspace/data/query.py ran but produced no outputCheck --data path exists and contains prompts. Check query.py logs.

task_1 failures (Hidden State Dump)

How it works: Loads the target model and runs a forward pass on each conversation, saving hidden states as .pt files in /scratchspace/offline_hidden_states/.

Three backends are available:

BackendScriptWhen to use
vLLMdump_offline_data_vllm.shBroad model coverage; uses vLLM's native hidden-state extractor
HFdump_offline_data_hf.shVLMs, custom-code models, SWA attention; uses device_map="auto"
TRT-LLMdump_offline_data.shPure-text models with TRT-LLM support; needs --tp/--moe-ep args
Error patternRoot causeFix
No such file or directory: dump_offline_data_vllm.shWrong script path in YAMLUse the correct path under common/eagle3/
FileNotFoundError: /scratchspace/datatask_0 failed or produced no outputRe-run task_0 first, or point --input-data to existing data
CUDA out of memoryModel too largeSwitch to _hf.sh (device_map="auto") or increase TP
RuntimeError / unsupported archModel not supported by TRT-LLM backendSwitch to dump_offline_data_hf.sh or dump_offline_data_vllm.sh
NCCL timeout / NCCL errorMulti-node communication failureRetry. Reduce EP.
No .pt files in output dirScript ran but extraction produced nothingCheck --max-seq-len and input data format
pyxis: child terminated with signal 15SIGTERM — likely OOMIncrease TP or switch backends

task_2 failures (Training)

How it works: Installs requirements, runs launch_train.sh (Accelerate + FSDP) with the config from modelopt_recipes/general/speculative_decoding/eagle3.yaml, then exports via export_hf_checkpoint.py. Output: /scratchspace/eagle3/ and /scratchspace/export/.

Error patternRoot causeFix
FileNotFoundError: /scratchspace/offline_hidden_statestask_1 failed or produced no outputRe-run task_1 first
CUDA out of memory during trainingBatch size too largeReduce training.train_bs or training.training_seq_len
KeyError / AttributeError in model loadingModel architecture not recognized by EAGLE3Model may need code changes in modelopt for this architecture
Loss is NaN or divergesLR too high or data quality issueReduce training.lr. Check hidden state data.
export_hf_checkpoint.py failsTraining produced incomplete checkpointCheck /scratchspace/eagle3/ for model.safetensors

task_3 failures (Benchmark)

How it works: Launches vLLM with the target + draft model, runs acceptance rate and throughput benchmarks. Output: JSON files.

Error patternRoot causeFix
FileNotFoundError: /scratchspace/exporttask_2 failed or export step failedRe-run task_2. Check export output.
trust_remote_code error at benchmarkModel requires it but quick_check.sh doesn't forward the flagPass --trust-remote-code in task_3 args
Server fails with draft modelDraft model config incompatible with engineCheck eagle_config.json and engine version
AR below threshold / exit code 1Draft model quality too lowMore epochs, data, or hyperparameter tuning
CUDA out of memoryTarget + draft exceeds GPU memoryIncrease TP
vLLM EAGLE3 not supportedvLLM version too oldUse a newer vLLM container

Step 3 — Check for new-model-specific issues

If the user is adding support for a new model, also check:

  1. Is the model a VLM? → Use dump_offline_data_hf.sh (text-only path, no vision encoder invoked)
  2. Does the model use sliding window attention (SWA)? → TRT-LLM backend won't work; use HF or vLLM
  3. Does the model need trust_remote_code? → Add to task_0 args AND task_3 args
  4. Is the model MoE? → Check eagle_config.json intermediate_size matches model's moe_intermediate_size
  5. Is the model architecture recognized by EAGLE3 training? → may need code changes in modelopt/torch/speculative/
  6. Custom tokenizer? → May need additional environment vars (e.g., TIKTOKEN_RS_CACHE_DIR)

Step 4 — Suggest fix and next steps

After diagnosis, provide:

  1. Root cause — one-line summary
  2. Fix — specific config change, code edit, or command to run
  3. How to re-run — skip earlier successful steps by pointing to existing scratchspace artifacts

To skip task_0 and task_1 and re-run from task_2:

uv run launch.py --yaml examples/<Org>/<Model>/hf_offline_eagle3.yaml \
    pipeline.task_0.skip=true \
    pipeline.task_1.skip=true \
    --yes

To run only task_1 standalone (using existing task_0 data):

uv run launch.py --yaml examples/<Org>/<Model>/hf_offline_eagle3.yaml \
    pipeline.task_0.skip=true \
    pipeline.task_2.skip=true \
    pipeline.task_3.skip=true \
    --yes

If the fix requires code changes in ModelOpt (e.g., supporting a new model architecture), note that a separate PR in the modelopt repo is needed.

Step 5 — Record the failure pattern

If you encounter a failure pattern not seen before, capture it in the team's internal triage tracker — the symptom, root cause, and fix — so the next engineer debugging the same issue benefits.

nvidia의 다른 스킬

compileiq-debug
nvidia
무언가 잘못되었을 때 사용: Search()가 멈추거나, 모든 평가가 INVALID_SCORE를 반환하거나, 점수가 개선되지 않거나, 모든 설정이 동일한 숫자를 반환하거나, ptxas 오류 등이 발생할 때
create-github-pr
nvidia
gh CLI를 사용하여 GitHub 풀 리퀘스트를 생성합니다. 사용자가 새 PR을 만들거나, 코드 리뷰를 제출하거나, 풀 리퀘스트를 열고자 할 때 사용합니다. 트리거 키워드 -…
nemoclaw-maintainer-cross-issue-sweep
nvidia
다른 열린 이슈들을 스캔하여 주어진 PR이 함께 수정하거나 실수로 망가뜨릴 수 있는 이슈를 찾습니다. 인접 수정 기회와 모순 위험을 file:line…과 함께 출력합니다.
fhir-basics
nvidia
에이전트에게 FHIR R4 API의 작동 방식, 사용 가능한 리소스, 검색 매개변수를 사용한 쿼리 방법, 모든 응답 형식을 올바르게 파싱하는 방법을 가르칩니다…
compileiq-validate-result
nvidia
검색이 완료된 후, 속도 향상을 청구하거나 ACF를 발송하기 전에 사용합니다. dump_results CSV를 로드하고, 상위 K개 후보(단일 목표)를 추출합니다…
changelog-audit
nvidia
릴리스 전에 Warp CHANGELOG.md를 감사합니다: 누락된 항목 복구, 사용자 영향별 정렬, 항목 언어 다듬기, 줄 바꿈, (릴리스 브랜치 모드) 비교 업데이트…
maintain-dynamic-plugins
nvidia
NeMo Relay 동적 플러그인 로더, 매니페스트, Rust 네이티브 SDK, gRPC 워커 프로토콜, Python 워커 SDK, 문서, 테스트 및 릴리스 워크플로 커버리지를 유지 관리합니다.
dgx-diagnose
nvidia
일반적인 DGX Station GB300 문제 진단 — CUDA 충돌, 잘못된 GPU 타겟팅, vLLM/SGLang 컨테이너 버그, MIG 상태 문제, NVLink/Fabric Manager 오류,…