Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions configs/nvidia-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10214,6 +10214,21 @@ glm5.1-fp8-b200-tilert-agentic:
additional-settings:
- "DECODE_NODES=1"

dsv41flash-fp4-b200-vllm-agentic-dspark:
image: vllm/vllm-openai:deepseekv41-flash-0909
model: deepseek-ai/DeepSeek-V4.1-Flash
model-prefix: dsv41flash
runner: cluster:b200-nscale
precision: fp4
framework: vllm
multinode: false
scenarios:
agentic-coding:
- dram-utilization: 0.80
search-space:
# Engram weights use UVA DRAM; the KV cache stays GPU-resident.
- { tp: 4, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 8, 16, 32, 64, 128] }

dsv41flash-fp4-gb300-vllm-agentic-dspark:
image: vllm/vllm-openai:deepseekv41-flash-0909
model: deepseek-ai/DeepSeek-V4.1-Flash
Expand Down
20 changes: 20 additions & 0 deletions perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7212,3 +7212,23 @@
description:
- "Allow 7200 seconds for GB300 DSv4.1 Flash engine startup; the one-hour frontend deadline interrupted cold graph capture"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2961

- config-keys:
- dsv41flash-fp4-b200-vllm-agentic-dspark
description:
- "Add B200 TP4 AgentX through concurrency 128 with Engram UVA DRAM offload and native five-token DSpark"
- "Use deepseekv41-flash-0909 with adaptive verification and available-port selection"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2960

- config-keys:
- dsv41flash-fp4-b200-vllm-agentic-dspark
description:
- "Align with the official single-node TP recipe: default model runner and scheduler batching"
- "Keep AgentX concurrency 1-128, UVA offload, DSpark, and concurrency-sized graph capture"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2960

- config-keys:
- dsv41flash-fp4-b200-vllm-agentic-dspark
description:
- "Use thinking-on golden synthetic AL 3.51 for five-token DSpark throughput; disable adaptive verification and retain real verification for evals"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2960
18 changes: 16 additions & 2 deletions runners/launch_b200-nscale-compat.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ set -x
# portability, but we resolve to pre-staged paths here to avoid repeated
# downloading on every Nscale node. Runs for both single-node and multinode
# launches.
if [[ $MODEL_PREFIX == "dsr1" && $PRECISION == "fp4" ]]; then
if [[ "$MODEL_PREFIX" == "dsv41flash" && "$PRECISION" == "fp4" && "$FRAMEWORK" == "vllm" && "$IS_MULTINODE" != "true" ]]; then
export MODEL_PATH="$MODEL"
export HF_HUB_CACHE_HOST_PATH="/data/home/sa-shared/gharunners/hf-hub-cache"
mkdir -p "$HF_HUB_CACHE_HOST_PATH"
elif [[ $MODEL_PREFIX == "dsr1" && $PRECISION == "fp4" ]]; then
export MODEL_PATH="/scratch/models/DeepSeek-R1-0528-NVFP4-v2"
export SRT_SLURM_MODEL_PREFIX="dsr1"
elif [[ $MODEL_PREFIX == "dsr1" && $PRECISION == "fp8" ]]; then
Expand Down Expand Up @@ -526,6 +530,16 @@ else
CONTAINER_MOUNT_DIR=/workspace
fi

if [[ "$MODEL_PREFIX" == "dsv41flash" ]]; then
CONTAINER_MOUNT_DIR=/ix
export INFMAX_CONTAINER_WORKSPACE=/ix
export RESULT_DIR=/ix/results
export HF_HUB_CACHE=/hf-cache
CONTAINER_MOUNTS="$GITHUB_WORKSPACE:/ix,$HF_HUB_CACHE_HOST_PATH:/hf-cache,$AIPERF_MMAP_CACHE_HOST_PATH:/aiperf_mmap_cache"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing engine-ready timeout override

Medium Severity

The new B200 dsv41flash launch path never sets VLLM_ENGINE_READY_TIMEOUT_S, so startup stays on the one-hour default from dsv41flash_fp4_vllm_mtp.sh. The matching GB300 recipe already needed 7200 seconds for this same image, checkpoint, and TP4 capture after that deadline killed cold graph capture.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 052a811. Configure here.

else
CONTAINER_MOUNTS="$GITHUB_WORKSPACE:$CONTAINER_MOUNT_DIR,$MODEL_PATH:$MODEL_PATH,$AIPERF_MMAP_CACHE_HOST_PATH:/aiperf_mmap_cache"
fi

# The runner lease reserves the Slurm nodes before this single-node job is
# submitted to the Nscale batch_1 partition.
export GPU_COUNT="${GPU_COUNT:-${TP:?TP must be set}}"
Expand Down Expand Up @@ -556,7 +570,7 @@ else

srun --jobid=$JOB_ID \
--container-image=$SQUASH_FILE \
--container-mounts=$GITHUB_WORKSPACE:$CONTAINER_MOUNT_DIR,$MODEL_PATH:$MODEL_PATH,$AIPERF_MMAP_CACHE_HOST_PATH:/aiperf_mmap_cache \
--container-mounts="$CONTAINER_MOUNTS" \
--no-container-mount-home \
--container-workdir=$CONTAINER_MOUNT_DIR \
--no-container-entrypoint --export=ALL,PORT=8888,AIPERF_DATASET_MMAP_CACHE_DIR=/aiperf_mmap_cache \
Expand Down
48 changes: 48 additions & 0 deletions runners/test_dsv41flash_b200.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import json
import subprocess
from pathlib import Path

import pytest

REPO_ROOT = Path(__file__).resolve().parents[1]


def run_bash(command: str, *args: Path | str) -> subprocess.CompletedProcess[str]:
return subprocess.run(
["bash", "-c", command, "bash", *(str(arg) for arg in args)],
check=False,
capture_output=True,
text=True,
)


def test_b200_v41_uses_hf_cache_without_mounting_model_id(tmp_path: Path) -> None:
log = tmp_path / "launch.jsonl"
result = run_bash(
'''
mkdir() { :; }
salloc() { :; }
squeue() { echo 123; }
srun() {
python3 -c 'import json,os,sys; open(sys.argv[1], "a").write(json.dumps({"args":sys.argv[2:], "model":os.environ["MODEL"], "cache":os.environ["HF_HUB_CACHE"]})+"\\n")' "$SRUN_LOG" "$@"
}
export MODEL_PREFIX=dsv41flash PRECISION=fp4 FRAMEWORK=vllm
export MODEL=deepseek-ai/DeepSeek-V4.1-Flash IS_MULTINODE=false
export SPEC_DECODING=mtp TP=4 RUNNER_NAME=b200-test IS_AGENTIC=1
export SCENARIO_SUBDIR=agentic/ EXP_NAME=dsv41flash_tp4_conc1
export IMAGE=vllm/test:fixture GITHUB_WORKSPACE="$1" SRUN_LOG="$2"
cd "$GITHUB_WORKSPACE"
source runners/launch_b200-nscale-compat.sh
''',
REPO_ROOT, log,
)
assert result.returncode == 0, result.stderr
serve = json.loads(log.read_text().splitlines()[-1])
assert serve["model"] == "deepseek-ai/DeepSeek-V4.1-Flash"
assert serve["cache"] == "/hf-cache"
mounts = next(arg for arg in serve["args"] if arg.startswith("--container-mounts="))
assert f"{REPO_ROOT}:/ix," in mounts
assert ":/hf-cache," in mounts
assert "deepseek-ai/" not in mounts
assert serve["args"][-2] == "bash"
assert (REPO_ROOT / serve["args"][-1]).is_file()
Loading