Skip to content
Open
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

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3
model:
path: deepseek-v4-pro
container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23
precision: fp4
dynamo:
install: true
wheel: "1.4.0.dev20260730"
request_plane: tcp
resources:
gpu_type: b200
prefill_nodes: 1
prefill_workers: 1
gpus_per_prefill: 8
decode_nodes: 2
decode_workers: 2
gpus_per_decode: 8
gpus_per_node: 8
backend:
type: trtllm
prefill_environment:
TLLM_LOG_LEVEL: INFO
TRTLLM_SERVER_DISABLE_GC: '1'
TRTLLM_WORKER_DISABLE_GC: '1'
TRTLLM_ENABLE_PDL: '1'
ENROOT_ALLOW_DEV: 'yes'
NCCL_GRAPH_MIXING_SUPPORT: '0'
MIMALLOC_PURGE_DELAY: '0'
PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True
TLLM_PROFILE_LOG_RANKS: all
TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82'
UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp
NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins
decode_environment:
TLLM_LOG_LEVEL: INFO
TRTLLM_SERVER_DISABLE_GC: '1'
TRTLLM_WORKER_DISABLE_GC: '1'
TRTLLM_ENABLE_PDL: '1'
ENROOT_ALLOW_DEV: 'yes'
NCCL_GRAPH_MIXING_SUPPORT: '0'
MIMALLOC_PURGE_DELAY: '0'
TLLM_PROFILE_LOG_RANKS: all
TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82'
UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp
NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins
trtllm_config:
prefill:
cache_transceiver_config:
backend: NIXL
kv_transfer_timeout_ms: 600000
transceiver_runtime: PYTHON
cuda_graph_config:
disable_overlap_scheduler: true
enable_attention_dp: true
kv_cache_config:
dtype: fp8
enable_block_reuse: false
free_gpu_memory_fraction: 0.5
tokens_per_block: 128
max_batch_size: 2
max_num_tokens: 8192
max_seq_len: 8232
moe_config:
backend: TRTLLM
load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml
moe_expert_parallel_size: 8
pipeline_parallel_size: 1
print_iter_log: true
speculative_config:
decoding_type: MTP
max_draft_len: 3
tensor_parallel_size: 8
decode:
cache_transceiver_config:
backend: NIXL
kv_transfer_timeout_ms: 600000
transceiver_runtime: PYTHON
cuda_graph_config:
batch_sizes:
- 1
- 2
- 4
enable_padding: true
enable_attention_dp: true
enable_lm_head_tp_in_adp: true
kv_cache_config:
dtype: fp8
enable_block_reuse: false
free_gpu_memory_fraction: 0.8
tokens_per_block: 128
max_batch_size: 4
max_num_tokens: 16
max_seq_len: 9256
moe_config:
backend: TRTLLM
load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml
use_low_precision_moe_combine: true
moe_expert_parallel_size: 8
num_postprocess_workers: 4
pipeline_parallel_size: 1
print_iter_log: true
speculative_config:
decoding_type: MTP
max_draft_len: 3
stream_interval: 100
tensor_parallel_size: 8
benchmark:
type: sa-bench
isl: 8192
osl: 1024
concurrencies: "64"
req_rate: inf
random_range_ratio: 0.8
use_chat_template: true
custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer"
frontend:
type: dynamo
enable_multiple_frontends: false
health_check:
max_attempts: 540
interval_seconds: 10
environment:
TRTLLM_SERVER_DISABLE_GC: '1'
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: disagg-b200-8k1k-1p3d-dep8-dep8-b8-eplb384-mtp0
model:
path: deepseek-v4-pro
container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23
precision: fp4
dynamo:
install: true
wheel: "1.4.0.dev20260730"
request_plane: tcp
resources:
gpu_type: b200
prefill_nodes: 1
prefill_workers: 1
gpus_per_prefill: 8
decode_nodes: 3
decode_workers: 3
gpus_per_decode: 8
gpus_per_node: 8
backend:
type: trtllm
prefill_environment:
TLLM_LOG_LEVEL: INFO
TRTLLM_SERVER_DISABLE_GC: '1'
TRTLLM_WORKER_DISABLE_GC: '1'
TRTLLM_ENABLE_PDL: '1'
ENROOT_ALLOW_DEV: 'yes'
NCCL_GRAPH_MIXING_SUPPORT: '0'
MIMALLOC_PURGE_DELAY: '0'
PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True
TLLM_PROFILE_LOG_RANKS: all
UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp
NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins
decode_environment:
TLLM_LOG_LEVEL: INFO
TRTLLM_SERVER_DISABLE_GC: '1'
TRTLLM_WORKER_DISABLE_GC: '1'
TRTLLM_ENABLE_PDL: '1'
ENROOT_ALLOW_DEV: 'yes'
NCCL_GRAPH_MIXING_SUPPORT: '0'
MIMALLOC_PURGE_DELAY: '0'
TLLM_PROFILE_LOG_RANKS: all
UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp
NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins
trtllm_config:
prefill:
cache_transceiver_config:
backend: NIXL
kv_transfer_timeout_ms: 600000
transceiver_runtime: PYTHON
cuda_graph_config:
disable_overlap_scheduler: true
enable_attention_dp: true
kv_cache_config:
dtype: fp8
enable_block_reuse: false
free_gpu_memory_fraction: 0.5
tokens_per_block: 128
max_batch_size: 2
max_num_tokens: 8192
max_seq_len: 8232
moe_config:
backend: TRTLLM
load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml
moe_expert_parallel_size: 8
pipeline_parallel_size: 1
print_iter_log: true
tensor_parallel_size: 8
decode:
cache_transceiver_config:
backend: NIXL
kv_transfer_timeout_ms: 600000
transceiver_runtime: PYTHON
cuda_graph_config:
batch_sizes:
- 1
- 2
- 4
- 8
enable_padding: true
enable_attention_dp: true
enable_lm_head_tp_in_adp: false
kv_cache_config:
dtype: fp8
enable_block_reuse: false
free_gpu_memory_fraction: 0.8
tokens_per_block: 128
max_batch_size: 8
max_num_tokens: 8
max_seq_len: 9256
moe_config:
backend: TRTLLM
load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml
use_low_precision_moe_combine: true
moe_expert_parallel_size: 8
num_postprocess_workers: 4
pipeline_parallel_size: 1
print_iter_log: true
stream_interval: 100
tensor_parallel_size: 8
benchmark:
type: sa-bench
isl: 8192
osl: 1024
concurrencies: "192"
req_rate: inf
random_range_ratio: 0.8
use_chat_template: true
custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer"
frontend:
type: dynamo
enable_multiple_frontends: false
health_check:
max_attempts: 540
interval_seconds: 10
environment:
TRTLLM_SERVER_DISABLE_GC: '1'
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3
model:
path: deepseek-v4-pro
container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23
precision: fp4
dynamo:
install: true
wheel: "1.4.0.dev20260730"
request_plane: tcp
resources:
gpu_type: b200
prefill_nodes: 1
prefill_workers: 1
gpus_per_prefill: 8
decode_nodes: 4
decode_workers: 4
gpus_per_decode: 8
gpus_per_node: 8
backend:
type: trtllm
prefill_environment:
TLLM_LOG_LEVEL: INFO
TRTLLM_SERVER_DISABLE_GC: '1'
TRTLLM_WORKER_DISABLE_GC: '1'
TRTLLM_ENABLE_PDL: '1'
ENROOT_ALLOW_DEV: 'yes'
NCCL_GRAPH_MIXING_SUPPORT: '0'
MIMALLOC_PURGE_DELAY: '0'
PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True
TLLM_PROFILE_LOG_RANKS: all
TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82'
UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp
NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins
decode_environment:
TLLM_LOG_LEVEL: INFO
TRTLLM_SERVER_DISABLE_GC: '1'
TRTLLM_WORKER_DISABLE_GC: '1'
TRTLLM_ENABLE_PDL: '1'
ENROOT_ALLOW_DEV: 'yes'
NCCL_GRAPH_MIXING_SUPPORT: '0'
MIMALLOC_PURGE_DELAY: '0'
TLLM_PROFILE_LOG_RANKS: all
TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82'
UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp
NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins
trtllm_config:
prefill:
cache_transceiver_config:
backend: NIXL
kv_transfer_timeout_ms: 600000
transceiver_runtime: PYTHON
cuda_graph_config:
disable_overlap_scheduler: true
enable_attention_dp: true
kv_cache_config:
dtype: fp8
enable_block_reuse: false
free_gpu_memory_fraction: 0.5
tokens_per_block: 128
max_batch_size: 2
max_num_tokens: 8192
max_seq_len: 8232
moe_config:
backend: TRTLLM
load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml
moe_expert_parallel_size: 8
pipeline_parallel_size: 1
print_iter_log: true
speculative_config:
decoding_type: MTP
max_draft_len: 3
tensor_parallel_size: 8
decode:
cache_transceiver_config:
backend: NIXL
kv_transfer_timeout_ms: 600000
transceiver_runtime: PYTHON
cuda_graph_config:
batch_sizes:
- 1
- 2
- 4
enable_padding: true
enable_attention_dp: true
enable_lm_head_tp_in_adp: true
kv_cache_config:
dtype: fp8
enable_block_reuse: false
free_gpu_memory_fraction: 0.8
tokens_per_block: 128
max_batch_size: 2
max_num_tokens: 8
Comment on lines +77 to +92

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 In disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3.yaml, decode's cuda_graph_config.batch_sizes is [1, 2, 4] but decode.max_batch_size is 2, so the batch-4 CUDA graph can never be exercised. This looks like a copy-paste leftover from the sibling b4 recipe (disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3.yaml, which correctly uses [1, 2, 4] with max_batch_size: 4) — batch_sizes should be trimmed to [1, 2] here.

Extended reasoning...

The bug: In benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3.yaml, the decode block sets:

max_batch_size: 2
max_num_tokens: 8
cuda_graph_config:
  batch_sizes:
  - 1
  - 2
  - 4
  enable_padding: true

TensorRT-LLM's decode-side batching can never dispatch more than max_batch_size (2) requests at once, so the batch-size-4 CUDA graph entry is unreachable — no request stream can ever fill it. This is purely a config-consistency issue, not a crash: TRT-LLM either ignores/clamps cuda-graph batch sizes above max_batch_size or wastes one extra graph capture (time + a bit of GPU memory) for a size it will never use.

Why this happened: Every other recipe added in this PR keeps the largest cuda_graph_config.batch_sizes entry exactly equal to max_batch_size — e.g. the sibling disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3.yaml (same dep8-dep8/eplb384/mtp3 template, just b4 instead of b2) uses the identical list [1, 2, 4] but with max_batch_size: 4. The max_num_tokens: 8 in the b2 file (2 requests × 4 tokens/step under MTP draft_len=3) further corroborates that this file was derived from the b4 template by reducing max_batch_size/max_num_tokens from 4→2, but the batch_sizes list was never trimmed to match.

Step-by-step proof:

  1. Decode's scheduler is capped at max_batch_size: 2 — it will never admit a 3rd or 4th concurrent request.
  2. At startup, TensorRT-LLM captures a CUDA graph for each entry in batch_sizes: sizes 1, 2, and 4.
  3. Because the scheduler cap is 2, no runtime batch can ever reach size 4, so the size-4 graph is captured but never invoked.
  4. Cross-checking against all 16 recipes in this PR (b4, b8, b16, b32, b64, b128, b256 variants), every single one keeps max(batch_sizes) == max_batch_size; this b2 file is the sole outlier.

Fix: Change batch_sizes to [1, 2] to match max_batch_size: 2, consistent with every other recipe in this PR.

Why nit, not normal: This doesn't break the run — TensorRT-LLM handles cuda-graph batch sizes above the scheduler cap gracefully (filtering/clamping), so the worst-case impact is a modest amount of wasted graph-capture time and GPU memory at startup, not a functional failure or incorrect output. It's a legitimate cleanup that all three independent verifiers agreed should be fixed but flagged as non-blocking.

max_seq_len: 9256
moe_config:
backend: TRTLLM
load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml
use_low_precision_moe_combine: true
moe_expert_parallel_size: 8
num_postprocess_workers: 4
pipeline_parallel_size: 1
print_iter_log: true
speculative_config:
decoding_type: MTP
max_draft_len: 3
stream_interval: 100
tensor_parallel_size: 8
benchmark:
type: sa-bench
isl: 8192
osl: 1024
concurrencies: "64"
req_rate: inf
random_range_ratio: 0.8
use_chat_template: true
custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer"
frontend:
type: dynamo
enable_multiple_frontends: false
health_check:
max_attempts: 540
interval_seconds: 10
environment:
TRTLLM_SERVER_DISABLE_GC: '1'
Loading
Loading