Ultra 3 vllm tuning - #2645
Open
fsiino-nvidia wants to merge 14 commits into
Open
Conversation
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Allow experiments to override the speculative-token count while preserving the current default. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
fsiino-nvidia
force-pushed
the
fsiino/ultra-vllm-tuning
branch
from
September 8, 2026 20:27
36ba596 to
b894cbe
Compare
Remove obsolete experiment switches and retain the validated MTP3 defaults. Simplify Slurm argument handling and correct the coupled decode health check. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Detect prefill failures while waiting for decode readiness. Honor explicit concurrency and resume overrides over environment defaults. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
fsiino-nvidia
marked this pull request as ready for review
September 9, 2026 21:32
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Contributor
Author
|
/ok to test a26a1e2 |
Add connection and request timeouts so stalled probes cannot block prefill failure detection. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Monitor prefill and router processes, propagate unexpected exits, and stop the surviving process. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Cover override precedence, resume paths, health-check timeouts, and coupled-mode failure detection and cancellation cleanup. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Test independent and coupled node roles, existing model settings, submission overrides, invalid inputs, and serving-only execution. Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Frankie Siino <fsiino@nvidia.com> # Conflicts: # benchmarks/nemotron_3.5_super/sbatch_external_vllm.sh
Contributor
Author
|
/ok to test f656822 |
bxyu-nvidia
requested changes
Sep 11, 2026
|
|
||
| # The defaults reproduce the full-suite MTP3 configuration validated in Run | ||
| # 060: eager prefill and piecewise decode CUDA graphs with graph-owned inputs. | ||
| ULTRA_PREFILL_GPU_MEMORY_UTILIZATION="${ULTRA_PREFILL_GPU_MEMORY_UTILIZATION:-0.90}" |
Contributor
There was a problem hiding this comment.
can we hardcode these once we have a roughly tuned config?
| ;; | ||
| esac | ||
|
|
||
| case "$ULTRA_DECODE_CUDAGRAPH_COPY_INPUTS" in |
Contributor
There was a problem hiding this comment.
same as above, can we hardcode this one things are tuned?
| --distributed-timeout-seconds 3600 | ||
| # NIXL-transferred Mamba state must not coexist with locally retained | ||
| # prefix-cache blocks; doing so triggers the multiple-local-block assertion. | ||
| --no-enable-prefix-caching |
Contributor
There was a problem hiding this comment.
i think this should be fixed with more recent containers
| --tensor-parallel-size 4 | ||
| --no-async-scheduling | ||
| # Eager prefill avoids the compiled/CUDA-graph stalls observed during tuning. | ||
| --enforce-eager |
Contributor
There was a problem hiding this comment.
we should not enforce eager because it's much slower
| --max-num-seqs "$ULTRA_MAX_NUM_SEQS" | ||
| --data-parallel-size-local 1 | ||
| --tensor-parallel-size 4 | ||
| --no-async-scheduling |
Contributor
There was a problem hiding this comment.
we recently got async scheduling accuracy working!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
(branch originally cut from
fsiino/super35-vllm-model-tuning. After #2599 merged, this branch was rebuilt on top of the updated main. The Ultra commits were replayed and the overlapping launcher changes were reconciled against the merged implementation.)What this PR does
benchmarks/nemotron_3.5_super/vllm_configs/nemotron_3_ultra.sh, an Ultra-specific vLLM configuration using eager prefill, piecewise CUDA-graph decode, MTP3, FP8 KV cache, expert parallelism, and the memory and scheduler limits validated during tuning.benchmarks/nemotron_3.5_super/sbatch_external_vllm.shwith a coupled prefill/decode deployment. Each tier forms one distributed engine across four nodes because the Ultra weights cannot fit on one four-GPU node; the existing independent deployment remains available for smaller models.RESUME_EVAL_ON_REQUEUEprimarily for automatic recovery after Slurm preemptions: it keeps the results path stable across restarts and enables Gym's existing resume-from-cache behavior.Benchmark scores
Completed validation run: Slurm job
7014044, 11,213 evaluation samples. These are measured results; accuracy parity with the expected baseline is not yet established, particularly for Banking and AA-LCR.Source artifact:
results/nemotron-3-ultra-bf16-p4d4-c16-mtp3-v0271-piecewise-copyinputs-full-suite-validation-20260908/resumable_aggregate_metrics.json.Run command
Replace the placeholder values before submitting and use a new, unused experiment name for each new suite. Set
RESUME_EVAL_ON_REQUEUE=1on the first submission so Gym can reuse completed samples if Slurm preempts and requeues the job; it starts fresh when no saved results exist.The two Hydra overrides set the CRITPT and HLE dataset lists to empty, excluding those benchmarks from the suite. Remove them to include those benchmarks in the run.
Resuming after preemption or a manual restart
The main use case for
RESUME_EVAL_ON_REQUEUE=1is unattended recovery when Slurm preempts and automatically requeues a job. Without the switch or an explicit fixed results path, each restart uses a new timestamped path and cannot find the earlier results. The switch uses a stable experiment/results name and injects++resume_from_cache=true; it does not configure Slurm's preemption or requeue policy.For a manual resubmission, such as after reaching the walltime limit, wait until the previous job has stopped and repeat the command with the same experiment name, model, benchmark settings, and
RESUME_EVAL_ON_REQUEUE=1. Preserve bothresumable.jsonlandresumable_materialized_inputs.jsonl(the exact tasks selected for the run); Gym skips saved completions. Without both files, Gym starts fresh instead of resuming. For an older run with a different filename, also setROLLOUTS_FPATHto its existing rollout JSONL file.Branch-added command controls
Explicit Hydra arguments such as
++num_samples_in_parallel=32and++resume_from_cache=falsetake precedence over the corresponding environment defaults. Disabling resume explicitly does not disable the switch's stable experiment/results naming.SBATCH_TIME20:00:00or7-00:00:00NUM_SAMPLES_IN_PARALLEL16;32increased total throughput but reduced per-request speed and increased waiting.RESUME_EVAL_ON_REQUEUE0(default) or11removes job-ID/timestamp components from the experiment name and enables cached-result reuse. The validation used1and preserved progress across two preemptions.VLLM_PD_DEPLOYMENT_MODEindependentorcoupledcoupledjoins multiple nodes into one distributed prefill/decode engine. Ultra requires it because its weights cannot fit on one four-GPU node.VLLM_SLURM_SEGMENT4to align each segment with one four-node prefill or decode tier and avoid distributed startup hangs.ULTRA_ENABLE_MTP0or11because it was necessary to exceed 90 tokens/sec/request.ULTRA_NUM_SPECULATIVE_TOKENS3; it cleared the throughput target while producing substantially fewer repetition failures than MTP5.ULTRA_DECODE_ENFORCE_EAGER0or11disables compilation and CUDA graphs;0permits them. We used0to retain the faster graph-backed decode path.ULTRA_DECODE_CUDAGRAPH_MODEFULL_DECODE_ONLY,PIECEWISE, orNONEPIECEWISEwas the stable, favorable decode configuration.ULTRA_DECODE_CUDAGRAPH_COPY_INPUTS0or11for the validated piecewise CUDA-graph path.