Repository navigation
Ultra 3 vllm tuning - #2645
Ultra 3 vllm tuning#2645
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>
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>
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
|
/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
|
/ok to test f656822 |
|
|
||
| # 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}" |
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 |
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 |
There was a problem hiding this comment.
i think this should be fixed with more recent containers
There was a problem hiding this comment.
Updated the container 0.27.1 -> 0.29 and reran.
| --tensor-parallel-size 4 | ||
| --no-async-scheduling | ||
| # Eager prefill avoids the compiled/CUDA-graph stalls observed during tuning. | ||
| --enforce-eager |
There was a problem hiding this comment.
we should not enforce eager because it's much slower
There was a problem hiding this comment.
Removed --enforce-eager
| --max-num-seqs "$ULTRA_MAX_NUM_SEQS" | ||
| --data-parallel-size-local 1 | ||
| --tensor-parallel-size 4 | ||
| --no-async-scheduling |
There was a problem hiding this comment.
we recently got async scheduling accuracy working!
There was a problem hiding this comment.
Sounds good. I've enabled async scheduling on prefill, but kept it disabled on decode. Decode async was retested with vllm 0.29 but throughput was 89.96 versus 95.55 tokens/sec/request with synchronous decode.
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Enable prefix caching and piecewise graphs with async prefill and synchronous decode. Replace tuning overrides and eager fallback with settings tested in run 7091385. 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
|
/ok to test |
@fsiino-nvidia, there was an error processing your request: See the following link for more information: https://docs.gha-runners.nvidia.com/cpr/e/1/ |
Signed-off-by: Frankie Siino <fsiino@nvidia.com> # Conflicts: # benchmarks/nemotron_3.5_super/sbatch_external_vllm.sh
Signed-off-by: Frankie Siino <fsiino@nvidia.com>
|
/ok to test |
@fsiino-nvidia, there was an error processing your request: See the following link for more information: https://docs.gha-runners.nvidia.com/cpr/e/1/ |
|
/ok to test ac30c28 |
|
🔄 Merge queue validation started! You can track the progress here: https://github.com/NVIDIA-NeMo/Gym/actions/runs/35420126531 |
|
🔄 Merge queue validation started! You can track the progress here: https://github.com/NVIDIA-NeMo/Gym/actions/runs/35420453311 |
(Originally branched from
fsiino/super35-vllm-model-tuning, PR #2599. After that PR merged, we moved the Ultra changes onto updated main and kept the shared launcher compatible. Main was subsequently merged again atf656822f6.)What this PR does
benchmarks/nemotron_3.5_super/vllm_configs/nemotron_3_ultra.sh: a fixed Ultra BF16 recipe using piecewise CUDA graphs on both tiers, MTP3, prefix caching, asynchronous prefill, synchronous decode, FP8 KV cache, FP16 Mamba state with stochastic rounding, and expert parallelism.benchmarks/nemotron_3.5_super/sbatch_external_vllm.sh. Ultra uses four prefill nodes and four decode nodes, each with four GPUs; each tier distributes the model across 16 GPUs. The default remains independent deployment for models that fit a complete replica on one node. Existing router defaults and sampling overrides are preserved.tests/unit_tests/test_super_vllm_launcher.py.Benchmark scores
7014044 / f656822f67093754*AA-LCR's newer score covers 1,457/1,600 attempts, versus 1,600/1,600 previously; the apparent increase is not a clean comparison. Tau3-Average equally weights Airline, Retail, Telecom, and Banking. Omniscience answer accuracy was 24.38%/24.08%; that is a different metric from OmniIndex and must not be compared with the tracker's OmniIndex value.
Score artifacts:
results/nemotron-3-ultra-bf16-p4d4-c16-mtp3-v0271-piecewise-copyinputs-full-suite-validation-20260908/resumable_aggregate_metrics.jsonresults/nemotron-3-ultra-mtp3-c16-syncdecode-full-super-20260912-023329/resumable_aggregate_metrics.jsonRun command — Super suite, post-merge 0.29 (30 minutes)
The two dataset-list overrides exclude CRITPT and HLE. Remove the corresponding final argument to include either benchmark in a fresh experiment.
EXPORT_TO_CSV=0skips the optional exporter, whose Omniscience metric-key mismatch remains unresolved; evaluation JSON and final aggregate metrics are still written.Run command — SWE-bench Verified, post-merge 0.29 (30 minutes)
Uses the same Ultra recipe, container, concurrency 24, and coupled P4/D4 allocation as Super, with the OpenCode agent and OpenSandbox configs. Run from the repository root with the existing OpenSandbox connection configured in
env.yamlor the environment. The distinct experiment name keeps SWE-bench results separate; no CRITPT/HLE exclusions are needed because the Super config is not loaded.Each command reserves eight nodes / 32 GPUs; running both simultaneously requires 16 nodes / 64 GPUs. These are separate 30-minute validation jobs, not full-suite score runs. Check model/router readiness, live generation, tokens/sec/request, waiting, KV usage, and saved-output health; additionally check sandbox startup and agent activity for SWE-bench. Startup and sandbox preparation consume part of the allocation, so SWE-bench may save few completed attempts within this window. The launcher submits a separate job-scoped cleanup job for each evaluation.
Command controls and resume
VLLM_PD_DEPLOYMENT_MODEindependent(default),coupledcoupledbecause a complete replica does not fit on one four-GPU node.VLLM_SLURM_SEGMENTSEGMENT. If both are unset/empty, use all allocated nodes as one segment.4aligns each segment with a four-node tier, the placement used in successful Ultra runs.SEGMENTVLLM_SLURM_SEGMENTis unset/empty. No need to set both.SBATCH_TIME04:00:00default configurable.00:30:00bounds this tuning test; it is not enough for the full suite.VLLM_USE_V2_MODEL_RUNNER01will be overridden by the launcher. V1 is version-specific and deprecated, so future containers need revalidation.SBATCH_EXPORTALLhere++num_samples_in_parallel24improved aggregate generation relative to20while averaging above 90 tokens/sec/request; it does not prove proportionally faster suite completion.ROLLOUTS_FPATH+++resume_from_cachetrueorfalsetrueon the first submission to preserve completed work across Slurm requeues.For a manual resume, wait until the previous job stops, replace the timestamp-generating
EXPERIMENT_NAMEassignment with its exact previous experiment name, and rerun with the same fixed output path, model, recipe, container, datasets, and resume override. Preserve bothresumable.jsonlandresumable_materialized_inputs.jsonl; the latter records the selected tasks. A Slurm requeue reuses the submitted environment without needing that manual edit. Interrupted, unsaved work may be repeated; neither control configures Slurm's requeue policy.Without
ROLLOUTS_FPATH, the launcher chooses a new timestamped output path at each restart, so++resume_from_cache=truealone will not find the prior results. Without resume enabled, Gym may clear the selected output. For any new tuning configuration or dataset selection, use a fresh experiment/output path rather than mixing results with a previous run.Changes since review at
f656822f6ULTRA_*switches and their validation branches. Prefill/decode memory utilization is0.90/0.95, batched-token limits are16384/8192, maximum sequences is64, and MTP drafts three extra tokens. Graph modes, copied inputs, and decode capture sizes are fixed in the recipe.PIECEWISEgraphs with copied inputs; no--enforce-eagerflag or eager fallback remains.7153011; matching post-warmup durations gave 89.96 versus 95.55 tokens/sec/request with synchronous decode, approximately 6% slower. The reviewer recommendation was to use it if it helps, not require it on both tiers.NUM_SAMPLES_IN_PARALLELandRESUME_EVAL_ON_REQUEUE. Commands now use Hydra's++num_samples_in_parallel, a fixedROLLOUTS_FPATH, and++resume_from_cache=true. Launcher tests cover argument preservation and stable output paths across requeues and manual restarts.cpu-normalcleanup QOS. Support both main'sSEGMENTand our higher-priorityVLLM_SLURM_SEGMENT, falling back to the calculated node count and emitting exactly one--segmentargument. Coupled serving remains opt-in.