Skip to content

[#11422][feat] AutoDeploy: Piecewise cudagraph support Prototype - #11515

Merged
nvchenghaoz merged 19 commits into
NVIDIA:mainfrom
nv-auto-deploy:chenghao/piecewise_cudagraph_0211
Mar 6, 2026
Merged

[#11422][feat] AutoDeploy: Piecewise cudagraph support Prototype#11515
nvchenghaoz merged 19 commits into
NVIDIA:mainfrom
nv-auto-deploy:chenghao/piecewise_cudagraph_0211

Conversation

@nvchenghaoz

@nvchenghaoz nvchenghaoz commented Feb 13, 2026

Copy link
Copy Markdown
Collaborator

The PR is to enable the piecewise cudagraph support to improve the TTFT. Some perf numbers from my local test TTFT -

Qwen 3.5 35B 1k/1k TP2 NVFP4
image

Qwen 3.5 35B 1k/1k TP2 BF16
image

GLM 4.7 Flash 1k/1k BF16
image

GLM 4.7 Flash 1k/1k NVFP4
image

Nemotron Nano V3
image

Remaining Piecewise CG work:

  1. Improve the peak memory usage for Piecewise CG during the capture / warmup stage.
  2. Model sweep to feature complete.

Summary by CodeRabbit

  • New Features

    • Added piecewise CUDA graph execution mode supporting both monolithic and split graph paths for improved performance on mixed prefill-decode workloads.
    • Added configuration options to enable piecewise mode and customize token bucket sizes; auto-generates optimal buckets when not specified.
  • Bug Fixes

    • Improved output tensor padding in attention and SSM operations to prevent garbage values in bucketed execution scenarios.

@nvchenghaoz
nvchenghaoz requested a review from a team as a code owner February 13, 2026 20:46
@nvchenghaoz
nvchenghaoz marked this pull request as draft February 13, 2026 20:46
@coderabbitai

coderabbitai Bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This pull request introduces a dual-mode CUDA graph execution system with piecewise graph splitting support. It adds graph dispatch logic to select between monolithic (decode-only) and piecewise (prefill/mixed) paths, includes utilities to partition graphs at dynamic ops, and integrates piecewise compilation into the backend pipeline with configurable token buckets.

Changes

Cohort / File(s) Summary
Dual-mode CUDA graph dispatch
tensorrt_llm/_torch/auto_deploy/compile/backends/torch_cudagraph.py
Introduces PiecewiseCapturedGraph and DualModeCapturedGraph classes; extends TorchCudagraphCompiler with piecewise_enabled mode and new initialization parameters; dispatches forward execution between monolithic and piecewise paths based on batch metadata and token counts.
Piecewise graph execution engine
tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py
Adds ADPiecewiseRunner class to manage per-bucket CUDA graph state across warmup, capture, and replay phases; includes SegmentEntry dataclass for tracking graph, inputs, and outputs; implements static/dynamic input separation and zero-copy output reuse via registry.
Graph analysis utilities
tensorrt_llm/_torch/auto_deploy/compile/piecewise_utils.py
Introduces split_graph_at_dynamic_ops() to partition FX GraphModules at dynamic op boundaries; adds is_dynamic_cached_op() to detect uncapturable ops; includes SplitInfo dataclass to report partition metadata.
Attention implementations
tensorrt_llm/_torch/auto_deploy/custom_ops/attention/flashinfer_attention.py, torch_backend_attention.py, triton_attention.py
Adds output tensor zero-padding post-processing to sanitize tail positions beyond num_total_tokens, ensuring no garbage values in bucketed/mixed execution scenarios.
Attention interface
tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py
Adds padded_num_tokens and piecewise_bucket_sizes runtime state; includes find_nearest_piecewise_bucket() utility; adjusts forward shaping logic to use effective token counts aligned with piecewise bucket sizes.
Mamba/SSM implementations
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/flashinfer_backend_mamba.py, triton_backend_mamba.py, cuda_backend_causal_conv.py, triton_backend_causal_conv.py
Adds output/input zero-padding post-processing and optional dtype casting to preallocated buffers to maintain correct tensor shapes and avoid garbage values in piecewise execution.
Executor integration
tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py
Adds post-scatter padding computation to align tensor shapes to nearest piecewise bucket; adds post-forward truncation to restore actual token dimensions in logits before returning to caller.
Compilation configuration
tensorrt_llm/_torch/auto_deploy/config/default.yaml
Enables piecewise_enabled and sets piecewise_num_tokens to [8, 16] as default bucket sizes.
Compilation pipeline
tensorrt_llm/_torch/auto_deploy/transform/library/compile_model.py
Adds piecewise_enabled and piecewise_num_tokens fields to CompileModelConfig; introduces _generate_default_piecewise_num_tokens() helper; implements auto-generation and validation of bucket sizes; integrates piecewise arguments into backend instantiation via extra_kwargs and config overrides.

Sequence Diagram

sequenceDiagram
    participant User as User Code
    participant Dispatcher as DualModeCapturedGraph
    participant Monolithic as Monolithic<br/>CapturedGraph
    participant Piecewise as PiecewiseCapturedGraph
    participant Runner as ADPiecewiseRunner
    participant CUDA as CUDA Graph<br/>Execution

    User->>Dispatcher: forward(args, kwargs)
    Note over Dispatcher: Inspect batch_info_host<br/>and token counts
    
    alt Decode-only path
        Dispatcher->>Monolithic: forward(args)
        Monolithic->>CUDA: Replay monolithic<br/>graph
        CUDA-->>Monolithic: outputs
        Monolithic-->>Dispatcher: outputs
    else Prefill/Mixed path
        Dispatcher->>Piecewise: forward(args)
        Piecewise->>Piecewise: Find matching<br/>bucket
        Piecewise->>Runner: forward(submodule_args)
        Note over Runner: Determine phase<br/>(warmup/capture/replay)
        alt Warmup Phase
            Runner->>Runner: Track tensor ptrs
            Runner->>Runner: Run eagerly
        else Capture Phase
            Runner->>Runner: Identify dynamic inputs
            Runner->>CUDA: Capture graph
            CUDA-->>Runner: Graph handle
            Runner->>Runner: Register static outputs
        else Replay Phase
            Runner->>Runner: Copy dynamic inputs
            Runner->>CUDA: Replay graph
            CUDA-->>Runner: outputs
        end
        Runner-->>Piecewise: outputs
        Piecewise-->>Dispatcher: outputs
    end
    
    Dispatcher-->>User: outputs
Loading

Estimated Code Review Effort

🎯 4 (Complex) | ⏱️ ~50 minutes

🚥 Pre-merge checks | ✅ 1 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.04% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (279 files):

⚔️ .github/CODEOWNERS (content)
⚔️ .github/workflows/blossom-ci.yml (content)
⚔️ .gitignore (content)
⚔️ ATTRIBUTIONS-Python.md (content)
⚔️ CODING_GUIDELINES.md (content)
⚔️ README.md (content)
⚔️ cpp/CMakeLists.txt (content)
⚔️ cpp/include/tensorrt_llm/batch_manager/kvCacheManager.h (content)
⚔️ cpp/include/tensorrt_llm/batch_manager/llmRequest.h (content)
⚔️ cpp/include/tensorrt_llm/batch_manager/rnnStateManager.h (content)
⚔️ cpp/include/tensorrt_llm/common/cudaUtils.h (content)
⚔️ cpp/include/tensorrt_llm/executor/dataTransceiverState.h (content)
⚔️ cpp/include/tensorrt_llm/executor/executor.h (content)
⚔️ cpp/include/tensorrt_llm/executor/serialization.h (content)
⚔️ cpp/include/tensorrt_llm/executor/types.h (content)
⚔️ cpp/tensorrt_llm/batch_manager/cacheFormatter.cpp (content)
⚔️ cpp/tensorrt_llm/batch_manager/cacheFormatter.h (content)
⚔️ cpp/tensorrt_llm/batch_manager/cacheTransceiver.cpp (content)
⚔️ cpp/tensorrt_llm/batch_manager/dataTransceiver.cpp (content)
⚔️ cpp/tensorrt_llm/batch_manager/kvCacheManager.cpp (content)
⚔️ cpp/tensorrt_llm/batch_manager/mlaCacheFormatter.cpp (content)
⚔️ cpp/tensorrt_llm/batch_manager/rnnStateManager.cpp (content)
⚔️ cpp/tensorrt_llm/common/ncclUtils.cpp (content)
⚔️ cpp/tensorrt_llm/common/opUtils.h (content)
⚔️ cpp/tensorrt_llm/executor/cache_transmission/nixl_utils/CMakeLists.txt (content)
⚔️ cpp/tensorrt_llm/executor/multimodalInput.cpp (content)
⚔️ cpp/tensorrt_llm/executor/serialization.cpp (content)
⚔️ cpp/tensorrt_llm/executor/serializeUtils.h (content)
⚔️ cpp/tensorrt_llm/kernels/causalConv1d/causalConv1d.cu (content)
⚔️ cpp/tensorrt_llm/kernels/contextFusedMultiHeadAttention/fused_multihead_attention_v2.cpp (content)
⚔️ cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQAImplPrecompiled.cpp (content)
⚔️ cpp/tensorrt_llm/kernels/fusedLayernormKernels/layernorm_param.h (content)
⚔️ cpp/tensorrt_llm/kernels/fusedLayernormKernels/low_latency_layernorm.cuh (content)
⚔️ cpp/tensorrt_llm/kernels/fusedLayernormKernels/ws_layernorm.cuh (content)
⚔️ cpp/tensorrt_llm/kernels/fusedLayernormKernels/ws_layernorm.h (content)
⚔️ cpp/tensorrt_llm/kernels/fusedLayernormKernels/ws_layernorm_fp4_traits.cu (content)
⚔️ cpp/tensorrt_llm/kernels/tinygemm2/tinygemm2_kernel.cuh (content)
⚔️ cpp/tensorrt_llm/kernels/trtllmGenKernels/fmha/fmhaKernels.h (content)
⚔️ cpp/tensorrt_llm/nanobind/CMakeLists.txt (content)
⚔️ cpp/tensorrt_llm/nanobind/batch_manager/bindings.cpp (content)
⚔️ cpp/tensorrt_llm/nanobind/batch_manager/kvCacheManager.cpp (content)
⚔️ cpp/tensorrt_llm/nanobind/batch_manager/llmRequest.cpp (content)
⚔️ cpp/tensorrt_llm/nanobind/batch_manager/llmRequest.h (content)
⚔️ cpp/tensorrt_llm/nanobind/executor/bindings.cpp (content)
⚔️ cpp/tensorrt_llm/nanobind/executor/request.cpp (content)
⚔️ cpp/tensorrt_llm/plugins/CMakeLists.txt (content)
⚔️ cpp/tensorrt_llm/plugins/ncclPlugin/allreducePlugin.cpp (content)
⚔️ cpp/tensorrt_llm/runtime/CMakeLists.txt (content)
⚔️ cpp/tensorrt_llm/runtime/ipcNvlsMemory.cu (content)
⚔️ cpp/tensorrt_llm/thop/CMakeLists.txt (content)
⚔️ cpp/tensorrt_llm/thop/allreduceOp.cpp (content)
⚔️ cpp/tensorrt_llm/thop/fusedAddRMSNormQuant.cpp (content)
⚔️ cpp/tests/e2e_tests/batch_manager/trtGptModelTest.cpp (content)
⚔️ cpp/tests/unit_tests/batch_manager/kvCacheManagerTest.cpp (content)
⚔️ cpp/tests/unit_tests/batch_manager/microBatchSchedulerTest.cpp (content)
⚔️ cpp/tests/unit_tests/executor/serializeUtilsTest.cpp (content)
⚔️ cpp/tests/unit_tests/runtime/virtualMemoryTest.cpp (content)
⚔️ docs/source/blogs/tech_blog/blog16_Accelerating_Long_Context_Inference_with_Skip_Softmax_Attention.md (content)
⚔️ docs/source/features/disagg-serving.md (content)
⚔️ docs/source/features/kvcache.md (content)
⚔️ docs/source/index.rst (content)
⚔️ examples/auto_deploy/model_registry/models.yaml (content)
⚔️ examples/constraints.txt (content)
⚔️ examples/disaggregated/clients/disagg_client.py (content)
⚔️ examples/models/core/glm-4-9b/README.md (content)
⚔️ jenkins/L0_Test.groovy (content)
⚔️ requirements-dev.txt (content)
⚔️ requirements.txt (content)
⚔️ scripts/build_wheel.py (content)
⚔️ security_scanning/docs/poetry.lock (content)
⚔️ security_scanning/examples/auto_deploy/poetry.lock (content)
⚔️ security_scanning/examples/draft_target_model/poetry.lock (content)
⚔️ security_scanning/examples/eagle/poetry.lock (content)
⚔️ security_scanning/examples/llm-eval/lm-eval-harness/poetry.lock (content)
⚔️ security_scanning/examples/lookahead/poetry.lock (content)
⚔️ security_scanning/examples/medusa/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/baichuan/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/bloom/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/chatglm-6b/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/chatglm2-6b/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/chatglm3-6b-32k/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/dbrx/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/deepseek_v1/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/deepseek_v2/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/falcon/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/gptj/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/gptneox/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/grok/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/hyperclovax/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/internlm/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/jais/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/mmdit/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/mpt/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/opt/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/skywork/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/smaug/poetry.lock (content)
⚔️ security_scanning/examples/models/contrib/stdit/poetry.lock (content)
⚔️ security_scanning/examples/models/core/commandr/poetry.lock (content)
⚔️ security_scanning/examples/models/core/gemma/poetry.lock (content)
⚔️ security_scanning/examples/models/core/glm-4-9b/poetry.lock (content)
⚔️ security_scanning/examples/models/core/gpt/poetry.lock (content)
⚔️ security_scanning/examples/models/core/llama/poetry.lock (content)
⚔️ security_scanning/examples/models/core/mamba/poetry.lock (content)
⚔️ security_scanning/examples/models/core/mixtral/poetry.lock (content)
⚔️ security_scanning/examples/models/core/mllama/poetry.lock (content)
⚔️ security_scanning/examples/models/core/nemotron/poetry.lock (content)
⚔️ security_scanning/examples/models/core/phi/poetry.lock (content)
⚔️ security_scanning/examples/models/core/qwen/poetry.lock (content)
⚔️ security_scanning/examples/models/core/qwen2audio/poetry.lock (content)
⚔️ security_scanning/examples/models/core/qwenvl/poetry.lock (content)
⚔️ security_scanning/examples/models/core/recurrentgemma/poetry.lock (content)
⚔️ security_scanning/examples/models/core/whisper/poetry.lock (content)
⚔️ security_scanning/examples/ngram/poetry.lock (content)
⚔️ security_scanning/examples/quantization/poetry.lock (content)
⚔️ security_scanning/examples/ray_orchestrator/poetry.lock (content)
⚔️ security_scanning/examples/redrafter/poetry.lock (content)
⚔️ security_scanning/examples/serve/poetry.lock (content)
⚔️ security_scanning/examples/trtllm-eval/poetry.lock (content)
⚔️ security_scanning/metadata.json (content)
⚔️ security_scanning/poetry.lock (content)
⚔️ security_scanning/pyproject.toml (content)
⚔️ security_scanning/triton_backend/poetry.lock (content)
⚔️ tensorrt_llm/_torch/attention_backend/flashinfer.py (content)
⚔️ tensorrt_llm/_torch/attention_backend/interface.py (content)
⚔️ tensorrt_llm/_torch/attention_backend/sparse/rocket.py (content)
⚔️ tensorrt_llm/_torch/attention_backend/trtllm.py (content)
⚔️ tensorrt_llm/_torch/attention_backend/vanilla.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/compile/backends/torch_cudagraph.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/config/default.yaml (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/README.md (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/attention/flashinfer_attention.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/attention/torch_attention.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/attention/torch_backend_attention.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/attention/triton_attention.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/fused_moe/triton_moe.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/fused_moe/trtllm_moe.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/cuda_backend_causal_conv.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/flashinfer_backend_mamba.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/triton_backend_causal_conv.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/triton_backend_mamba.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/custom_ops/mla/__init__.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/export/export.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/models/custom/__init__.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/models/quant_config_reader.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/transform/interface.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/transform/library/compile_model.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/transform/library/fused_moe.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/transform/library/quantization.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/transform/library/sharding.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/transform/library/ssm_cache.py (content)
⚔️ tensorrt_llm/_torch/auto_deploy/utils/node_utils.py (content)
⚔️ tensorrt_llm/_torch/compilation/multi_stream/auto_multi_stream.py (content)
⚔️ tensorrt_llm/_torch/compilation/patterns/ar_residual_norm.py (content)
⚔️ tensorrt_llm/_torch/custom_ops/cpp_custom_ops.py (content)
⚔️ tensorrt_llm/_torch/custom_ops/torch_custom_ops.py (content)
⚔️ tensorrt_llm/_torch/custom_ops/trtllm_gen_custom_ops.py (content)
⚔️ tensorrt_llm/_torch/models/checkpoints/hf/nemotron_h_weight_mapper.py (content)
⚔️ tensorrt_llm/_torch/models/checkpoints/hf/qwen3_moe_weight_mapper.py (content)
⚔️ tensorrt_llm/_torch/models/checkpoints/hf/qwen3vl_moe_weight_mapper.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_deepseekv3.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_llama.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_llava_next.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_nemotron_h.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_qwen2vl.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_qwen3_next.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_qwen3vl.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_qwen3vl_moe.py (content)
⚔️ tensorrt_llm/_torch/models/modeling_speculative.py (content)
⚔️ tensorrt_llm/_torch/modules/attention.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/communication/communication_factory.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/communication/deep_ep.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/communication/deep_ep_low_latency.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/configurable_moe.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/fused_moe_cute_dsl.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/fused_moe_cutlass.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/fused_moe_deepgemm.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/fused_moe_triton.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/fused_moe_trtllm_gen.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/interface.py (content)
⚔️ tensorrt_llm/_torch/modules/fused_moe/quantization.py (content)
⚔️ tensorrt_llm/_torch/modules/linear.py (content)
⚔️ tensorrt_llm/_torch/modules/mamba/mamba2_metadata.py (content)
⚔️ tensorrt_llm/_torch/modules/mamba/mamba2_mixer.py (content)
⚔️ tensorrt_llm/_torch/modules/mamba/ssd_chunk_scan.py (content)
⚔️ tensorrt_llm/_torch/modules/mamba/ssd_chunk_state.py (content)
⚔️ tensorrt_llm/_torch/modules/mlp.py (content)
⚔️ tensorrt_llm/_torch/modules/rms_norm.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/_util.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/cuda_graph_runner.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/llm_request.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/mamba_cache_manager.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/model_engine.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/py_executor.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/py_executor_creator.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/request_utils.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/resource_manager.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/sampler.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/sampling_utils.py (content)
⚔️ tensorrt_llm/_torch/pyexecutor/sampling_utils_flashinfer.py (content)
⚔️ tensorrt_llm/_torch/speculative/__init__.py (content)
⚔️ tensorrt_llm/_torch/speculative/eagle3.py (content)
⚔️ tensorrt_llm/_torch/speculative/interface.py (content)
⚔️ tensorrt_llm/_torch/speculative/mtp.py (content)
⚔️ tensorrt_llm/_torch/speculative/utils.py (content)
⚔️ tensorrt_llm/_torch/utils.py (content)
⚔️ tensorrt_llm/_utils.py (content)
⚔️ tensorrt_llm/evaluate/lm_eval.py (content)
⚔️ tensorrt_llm/executor/base_worker.py (content)
⚔️ tensorrt_llm/executor/executor.py (content)
⚔️ tensorrt_llm/executor/result.py (content)
⚔️ tensorrt_llm/inputs/data.py (content)
⚔️ tensorrt_llm/inputs/multimodal.py (content)
⚔️ tensorrt_llm/inputs/registry.py (content)
⚔️ tensorrt_llm/llmapi/disagg_utils.py (content)
⚔️ tensorrt_llm/llmapi/llm.py (content)
⚔️ tensorrt_llm/llmapi/llm_args.py (content)
⚔️ tensorrt_llm/llmapi/mpi_session.py (content)
⚔️ tensorrt_llm/serve/cluster_storage.py (content)
⚔️ tensorrt_llm/serve/harmony_adapter.py (content)
⚔️ tensorrt_llm/serve/metadata_server.py (content)
⚔️ tensorrt_llm/serve/openai_server.py (content)
⚔️ tensorrt_llm/tools/layer_wise_benchmarks/runner.py (content)
⚔️ tensorrt_llm/version.py (content)
⚔️ tests/integration/defs/accuracy/references/gsm8k.yaml (content)
⚔️ tests/integration/defs/accuracy/references/mmlu.yaml (content)
⚔️ tests/integration/defs/accuracy/test_disaggregated_serving.py (content)
⚔️ tests/integration/defs/accuracy/test_llm_api_autodeploy.py (content)
⚔️ tests/integration/defs/accuracy/test_llm_api_pytorch.py (content)
⚔️ tests/integration/defs/agg_unit_mem_df.csv (content)
⚔️ tests/integration/defs/disaggregated/test_auto_scaling.py (content)
⚔️ tests/integration/defs/disaggregated/test_disaggregated.py (content)
⚔️ tests/integration/defs/examples/test_ad_speculative_decoding.py (content)
⚔️ tests/integration/defs/perf/disagg/test_configs/wideep/perf/deepseek-v32-fp4_1k1k_ctx1_gen1_dep32_bs32_eplb288_mtp0_ccb-NIXL.yaml (content)
⚔️ tests/integration/defs/perf/disagg/utils/common.py (content)
⚔️ tests/integration/defs/perf/disagg/utils/config_loader.py (content)
⚔️ tests/integration/defs/perf/pytorch_model_config.py (content)
⚔️ tests/integration/defs/perf/test_perf.py (content)
⚔️ tests/integration/defs/utils/periodic_junit.py (content)
⚔️ tests/integration/test_lists/qa/llm_function_core.txt (content)
⚔️ tests/integration/test_lists/qa/llm_function_rtx6k.txt (content)
⚔️ tests/integration/test_lists/qa/llm_perf_core.yml (content)
⚔️ tests/integration/test_lists/qa/llm_spark_perf.yml (content)
⚔️ tests/integration/test_lists/test-db/l0_a10.yml (content)
⚔️ tests/integration/test_lists/test-db/l0_b200.yml (content)
⚔️ tests/integration/test_lists/test-db/l0_dgx_b200.yml (content)
⚔️ tests/integration/test_lists/test-db/l0_dgx_h100.yml (content)
⚔️ tests/integration/test_lists/test-db/l0_h100.yml (content)
⚔️ tests/integration/test_lists/waives.txt (content)
⚔️ tests/unittest/_torch/auto_deploy/_utils_test/_model_test_utils.py (content)
⚔️ tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/moe/test_triton_moe.py (content)
⚔️ tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/moe/test_trtllm_moe.py (content)
⚔️ tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_update_kv_cache.py (content)
⚔️ tests/unittest/_torch/auto_deploy/unit/singlegpu/transformations/library/test_moe_fusion.py (content)
⚔️ tests/unittest/_torch/executor/test_py_executor.py (content)
⚔️ tests/unittest/_torch/executor/test_request_utils.py (content)
⚔️ tests/unittest/_torch/modeling/test_modeling_llama.py (content)
⚔️ tests/unittest/_torch/modules/moe/quantize_utils.py (content)
⚔️ tests/unittest/_torch/modules/moe/test_moe_backend.py (content)
⚔️ tests/unittest/_torch/modules/moe/test_moe_module.py (content)
⚔️ tests/unittest/_torch/multi_gpu/test_user_buffers.py (content)
⚔️ tests/unittest/_torch/multimodal/test_find_num_image_tokens.py (content)
⚔️ tests/unittest/_torch/multimodal/test_mm_encoder_standalone.py (content)
⚔️ tests/unittest/_torch/ray_orchestrator/single_gpu/test_llm_update_weights.py (content)
⚔️ tests/unittest/_torch/sampler/test_beam_search.py (content)
⚔️ tests/unittest/_torch/sampler/test_torch_sampler.py (content)
⚔️ tests/unittest/_torch/speculative/test_eagle3.py (content)
⚔️ tests/unittest/api_stability/api_stability_core.py (content)
⚔️ tests/unittest/api_stability/references_committed/request_output.yaml (content)
⚔️ tests/unittest/bindings/test_executor_bindings.py (content)
⚔️ tests/unittest/disaggregated/test_remoteDictionary.py (content)
⚔️ tests/unittest/llmapi/apps/_test_openai_responses.py (content)
⚔️ tests/unittest/llmapi/test_llm.py (content)
⚔️ tests/unittest/llmapi/test_llm_kv_cache_events.py (content)
⚔️ tests/unittest/llmapi/test_llm_multi_gpu.py (content)
⚔️ tests/unittest/llmapi/test_llm_multi_gpu_pytorch.py (content)
⚔️ tests/unittest/llmapi/test_llm_pytorch.py (content)
⚔️ tests/unittest/utils/util.py (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
Description check ⚠️ Warning The PR description is completely missing; only the template structure exists without any author-provided content explaining the changes. Add a detailed description explaining the piecewise CUDA graph feature, its purpose, impact, test coverage, and any relevant design decisions. Complete all template sections including Test Coverage and PR Checklist items.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly describes the main feature: introducing piecewise CUDA graph support for AutoDeploy. It is concise, specific, and accurately reflects the primary changes across multiple files implementing dual-mode graph execution, piecewise splitting utilities, and bucket-based padding.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 10

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/cuda_backend_causal_conv.py (1)

1-1: ⚠️ Potential issue | 🟡 Minor

Update copyright year to 2026.

The file is being modified in 2026, but the copyright header still reads 2022-2025. As per coding guidelines, the year should be updated on modified files.

-# SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/triton_backend_mamba.py (1)

1-1: ⚠️ Potential issue | 🟡 Minor

Copyright year should be updated to 2026.

The header says 2022-2025 but this file is being modified in 2026. As per coding guidelines, "update year on modified files."

Proposed fix
-# SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
tensorrt_llm/_torch/auto_deploy/transform/library/compile_model.py (1)

1-1: ⚠️ Potential issue | 🟡 Minor

Missing NVIDIA copyright header on modified file.

This file lacks a copyright header. As per coding guidelines, "Include NVIDIA copyright header on ALL new files and update year on modified files."

🤖 Fix all issues with AI agents
In `@tensorrt_llm/_torch/auto_deploy/compile/backends/torch_cudagraph.py`:
- Around line 510-524: The piecewise branch can be created without being
captured which leads to replaying a None graph; update the compile path in
torch_cudagraph.py (where PiecewiseCapturedGraph is created and
warmup_and_capture is conditionally called) to validate that
piecewise.cuda_graphs (or equivalent captured graph state on
PiecewiseCapturedGraph) is non-empty before returning DualModeCapturedGraph, and
if capture was skipped (get_mixed_args_kwargs_for_compile is None or
piecewise_num_tokens empty) either raise a clear error or set piecewise to None
so DualModeCapturedGraph is only constructed with a valid captured piecewise
graph; alternatively, implement a guard in
DualModeCapturedGraph.forward/ADPiecewiseRunner.forward to detect missing
captured graphs and fall back to eager execution when piecewise.cuda_graphs is
None/empty.

In `@tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py`:
- Around line 238-240: The fallback currently silently proceeds to call
static_inp.copy_(new_inp, non_blocking=True) when shapes are incompatible;
instead, detect the mismatch and raise a clear RuntimeError (or ValueError) that
includes the shapes of static_inp and new_inp and the context (e.g., tensor
names or index) so callers see a helpful message; modify the branch in
piecewise_runner.py (where static_inp and new_inp are compared) to construct and
raise that explicit error (or log the shapes before raising) rather than
performing the blind copy.
- Around line 1-2: This file is missing the required NVIDIA copyright header
with the Apache License 2.0; add the standard NVIDIA copyright block (including
the year of latest meaningful modification) at the top of
tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py before the module
docstring, ensuring the exact Apache-2.0 wording and license URL are included
and preserving the existing module docstring (ADPiecewiseRunner...) after the
header.
- Around line 182-196: Remove the unused entry parameter from the
_identify_dynamic_indices method signature and update its only caller to pass
just flat_args; specifically, change def _identify_dynamic_indices(self, entry:
SegmentEntry, flat_args: List[Any]) to def _identify_dynamic_indices(self,
flat_args: List[Any]) and update the call site that currently passes (entry,
flat_args) to call _identify_dynamic_indices(flat_args) so the method no longer
accepts or references entry and the argument list matches.
- Around line 338-347: Add defensive checks before replay: ensure
entry.cuda_graph is not None and entry.dynamic_indices is not None (used by
_prepare_replay_inputs) and raise a clear RuntimeError or fallback to a
non-cuda-graph path if either is missing. Specifically, in the code path around
_prepare_replay_inputs(entry, flat_args) and entry.cuda_graph.replay(), check
entry.dynamic_indices and entry.cuda_graph and if absent log/raise a message
like "cuda_graph capture missing for entry X; cannot replay" or call the
fallback execution path that computes and returns entry.static_output without
replay. Update callers to rely on the explicit error/fallback so failures are
debuggable.

In `@tensorrt_llm/_torch/auto_deploy/compile/piecewise_utils.py`:
- Around line 1-7: Add the standard NVIDIA Apache-2.0 copyright header to the
top of the new module tensorrt_llm._torch.auto_deploy.compile.piecewise_utils
(before the existing module docstring); include the year of latest meaningful
modification and the full Apache-2.0 boilerplate used across the repo so the
file has the required legal header. Ensure the header precedes the triple-quoted
module docstring and matches the format used in other files in the codebase.
- Around line 138-151: Add a unit test that builds a GraphModule whose first
non-placeholder node is a dynamic op to ensure partitioning/classification works
for that edge case; construct a small model or torch.fx graph where
is_dynamic_cached_op returns true for the first real node and then run the same
partitioning logic that populates node_to_partition, partition_counter,
dynamic_partitions and partition_ids_in_order (the mapping code in
piecewise_utils.py) and assert the first dynamic partition is recorded and
subsequent static ops get the correct partition ids. Target the partitioning
code paths that update partition_counter[0], node_to_partition,
dynamic_partitions and the partition_ids_in_order guard to validate behavior
when a dynamic op appears first.

In `@tensorrt_llm/_torch/auto_deploy/config/default.yaml`:
- Around line 206-207: Default piecewise settings are unsafe: change
piecewise_enabled to false and piecewise_num_tokens to null in default.yaml to
avoid silently ignored configs, and add explicit validation in the compiler
layer (e.g., CompilerBackend.compile or CompilerBackend.__init__) to raise or
log an error when piecewise_enabled=true is passed to incompatible backends
(e.g., TorchCompileCompiler, TorchSimpleCompiler or any backend whose name
contains "compile"/"simple"); also replace the hardcoded small buckets [8,16]
with null (auto-generate power-of-two buckets starting at 64) or
document/justify nonstandard buckets if you keep them.

In `@tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py`:
- Around line 549-555: _user-specified piecewise bucket sizes can exceed the
InputBuffer's max_num_tokens causing _shape_for_forward to slice out-of-bounds;
when processing user config (in compile_model.py) validate and clamp or reject
entries in piecewise_bucket_sizes against max_num_tokens before assigning to the
model so effective_num_tokens never exceeds InputBuffer size. Specifically, when
you parse piecewise_bucket_sizes in compile_model.py, iterate each bucket value
and ensure 0 < bucket <= max_num_tokens (either clamp to max_num_tokens or raise
a config error), then pass the validated list to the model (so attributes used
by _shape_for_forward and methods referencing _padded_num_tokens /
total_num_tokens remain safe).

In `@tensorrt_llm/_torch/auto_deploy/transform/library/compile_model.py`:
- Around line 127-136: The code currently only filters piecewise_num_tokens < 3
but not buckets larger than the model max causing out-of-bounds in
_shape_for_forward; update the logic that builds valid_buckets (and dropped) to
also remove values > cm.info.max_num_tokens (use cm.info.max_num_tokens to
compute the upper bound), log which buckets were dropped for being too large
(include max value context), and assign the filtered list to
config_overrides["piecewise_num_tokens"] so piecewise_num_tokens from
self.config cannot exceed cm.info.max_num_tokens.
🧹 Nitpick comments (8)
tensorrt_llm/_torch/auto_deploy/custom_ops/attention/flashinfer_attention.py (1)

456-470: torch.zeros allocation in branch 1 is not CUDA-graph-capture safe.

Line 463 allocates a new tensor via torch.zeros(...). If this path is ever reached during CUDA graph capture (or warm-up), the dynamic allocation will not be captured correctly, leading to silent failures or errors on replay.

The elif branch (line 468) correctly uses in-place zero_(), which is safe. If the first branch is also expected to execute under CUDA graph capture, consider pre-allocating the padded output buffer (e.g., always allocate y at size bs upfront) and filling it, rather than conditionally allocating a new tensor.

If the invariant is that y.shape[0] == bs always holds during capture (because inputs are bucketed), a defensive assertion would make this contract explicit:

Suggested assertion
     bs = b * s
+    if torch.cuda.is_current_stream_capturing() or cuda_graph_state.in_warm_up():
+        assert y.shape[0] >= bs, (
+            f"During CG capture y.shape[0]={y.shape[0]} must be >= bs={bs}"
+        )
     if y.shape[0] < bs:
tensorrt_llm/_torch/auto_deploy/compile/piecewise_utils.py (1)

91-98: Substring matching is fragile — prefer exact match after suffix stripping.

The comment on line 91 says "Strip the .default suffix if present for matching," but the code doesn't actually strip it. Instead it uses dyn_op in op_name, which is a loose substring check that could match unintended ops (e.g., auto_deploy::torch_cached_ssm would also match a hypothetical auto_deploy::torch_cached_ssm_v2).

Consider stripping .default (or any overload suffix) and doing an exact match:

Proposed fix
     # Strip the ".default" suffix if present for matching
     dynamic_ops = _get_all_dynamic_op_names()
-    # Check with namespace::name format
-    for dyn_op in dynamic_ops:
-        if dyn_op in op_name:
-            return True
-
-    return False
+    # Normalize: strip overload suffix (e.g. ".default") for exact matching
+    base_name = op_name.rsplit(".", 1)[0] if "." in op_name else op_name
+    return base_name in dynamic_ops
tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py (2)

41-65: _warmup_data_ptrs in SegmentEntry and _track_warmup_ptrs are dead code.

The module docstring (lines 21–26) explains that data-ptr change detection during warmup is unreliable and not used. _identify_dynamic_indices correctly ignores _warmup_data_ptrs and instead classifies all non-weight tensors as dynamic. However, _warmup_data_ptrs is still defined in SegmentEntry and _track_warmup_ptrs is still called during warmup — both are dead code paths that serve no purpose and may confuse future readers.

Consider removing _warmup_data_ptrs from SegmentEntry and _track_warmup_ptrs from ADPiecewiseRunner, or add a comment indicating these are retained intentionally for future use/debugging.


82-94: Mutable class-level attributes should use ClassVar and phase should be validated with an enum/literal type.

The static analysis tool (Ruff RUF012) correctly flags _static_output_registry as a mutable class attribute without ClassVar. Additionally, _current_num_tokens and _current_phase are shared class-level state that should also be annotated with ClassVar for clarity.

Proposed fix
+from typing import ClassVar
 ...
 
-    _current_num_tokens: Optional[int] = None
-    _current_phase: str = "replay"
-    _static_output_registry: Dict[Tuple[int, int], torch.Tensor] = {}
+    _current_num_tokens: ClassVar[Optional[int]] = None
+    _current_phase: ClassVar[str] = "replay"
+    _static_output_registry: ClassVar[Dict[Tuple[int, int], torch.Tensor]] = {}
tensorrt_llm/_torch/auto_deploy/compile/backends/torch_cudagraph.py (4)

12-12: Remove unused noqa directive.

Ruff (RUF100) reports the # noqa: I001 directive on import copy is unnecessary since the I001 rule is not enabled.

-import copy  # noqa: I001
+import copy

28-29: Imports deviate from the project's from package.subpackage import module guideline.

The coding guidelines state: "Python imports must use from package.subpackage import module style; never use from module import Class." These lines import classes/functions directly from modules (ADPiecewiseRunner from piecewise_runner, SplitInfo and split_graph_at_dynamic_ops from piecewise_utils). Strictly following the guideline would be:

from .. import piecewise_runner
from .. import piecewise_utils

and then reference piecewise_runner.ADPiecewiseRunner, piecewise_utils.SplitInfo, etc. That said, the existing code in this file already uses from torch.cuda import CUDAGraph, so this is a pre-existing pattern. Flagging for awareness. As per coding guidelines: "Python imports must use from package.subpackage import module style; never use from module import Class."


412-432: _is_decode_only fallback heuristic is fragile.

The fallback (lines 426–429) checks v.shape[1] == 1 on 2D+ tensors to detect decode-only batches. This assumes a specific tensor layout ([batch, seq_len, ...]). If a model uses different shapes or the first matching kwarg doesn't follow this convention, misclassification could route traffic to the wrong execution path.

Consider adding a debug-level log when the fallback heuristic is triggered, so misrouting issues are diagnosable:

Proposed fix
         # Fallback heuristic: check if first batched input has sequence dim == 1
         # (decode = 1 token per sequence)
         for name in self.batched_input_names:
             v = kwargs.get(name)
             if v is not None and isinstance(v, torch.Tensor) and v.ndim >= 2:
+                ad_logger.debug(
+                    f"DualModeCapturedGraph: using fallback heuristic on '{name}' "
+                    f"(shape={v.shape}) to determine decode-only status"
+                )
                 return v.shape[1] == 1

53-73: _submod_has_cuda_ops conservatively returns True for all non-FX modules — consider logging.

This is fine for correctness, but when debugging why a trivial submodule was wrapped, the conservative default could be confusing. A debug log when the fallback triggers would help:

     if not isinstance(submod, GraphModule):
+        ad_logger.debug(f"_submod_has_cuda_ops: non-FX module assumed to have CUDA ops")
         return True  # Conservative: non-FX modules assumed to have GPU ops

Comment thread tensorrt_llm/_torch/auto_deploy/compile/backends/torch_cudagraph.py
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_utils.py
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_utils.py
Comment thread tensorrt_llm/_torch/auto_deploy/config/default.yaml Outdated
Comment thread tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py Outdated
Comment thread tensorrt_llm/_torch/auto_deploy/transform/library/compile_model.py
Comment thread tensorrt_llm/_torch/auto_deploy/config/default.yaml Outdated
@suyoggupta

Copy link
Copy Markdown
Collaborator

can we update the PR with TTFT numbers for GLM (h100 and b200)

@lucaslie lucaslie left a comment

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.

I don't think SequenceInfo is the right place to handle padding logic. Please remove the padding logic from there. Instead, I suggest the following approach:

Edit: [A: Improvement for current approach]

  1. Make use of padding wrapper we have already for _prepare_inputs
  2. In _prepare_inputs set batch_info by not counting the padding tokens. This way the attention operators won't process the padded tokens since all of them read batch_info_host to split the batch.

Edit: [B: Ideal architecture]
Ideally, we can also address the clean architecture with handling padding/truncation in the piecewise cg infrastructure. This removes all hacks for this PR across all attention backends, ad_executor, and SequenceInfo to 0. From a first principle, this PR should at most touch two files (torch_cudagraph compile backend and the compile_model transform)

Edit: per discussion with @nvchenghaoz, he will spend 1-2 days on B to see if it can be done as part of this PR or otherwise just incorporate the feedback A for the current approach

Comment thread tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py Outdated
Comment thread tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py Outdated
Comment thread tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py Outdated
Comment thread tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py Outdated
Comment thread tensorrt_llm/_torch/auto_deploy/compile/piecewise_runner.py
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: nvchenghaoz <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
@nvchenghaoz
nvchenghaoz force-pushed the chenghao/piecewise_cudagraph_0211 branch from 70a5786 to 67ebed8 Compare February 26, 2026 04:54
@nvchenghaoz
nvchenghaoz requested a review from a team as a code owner February 26, 2026 04:54
@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run

@nvchenghaoz nvchenghaoz changed the title [#11422][feat] AutoDeploy: Draft for Piecewise cudagraph support [#11422][feat] AutoDeploy: Piecewise cudagraph support Prototype Feb 26, 2026
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #36968 [ run ] triggered by Bot. Commit: 67ebed8 Link to invocation

@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37746 [ run ] triggered by Bot. Commit: aa1c5d7 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37746 [ run ] completed with state SUCCESS. Commit: aa1c5d7
/LLM/main/L0_MergeRequest_PR pipeline #29220 completed with status: 'FAILURE'

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37769 [ run ] triggered by Bot. Commit: aa1c5d7 Link to invocation

@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37780 [ run ] triggered by Bot. Commit: d747294 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37769 [ run ] completed with state ABORTED. Commit: aa1c5d7
/LLM/main/L0_MergeRequest_PR pipeline #29238 completed with status: 'FAILURE'

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37780 [ run ] completed with state SUCCESS. Commit: d747294
/LLM/main/L0_MergeRequest_PR pipeline #29252 completed with status: 'FAILURE'

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1"

1 similar comment
@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37894 [ run ] triggered by Bot. Commit: 2131229 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37896 [ run ] triggered by Bot. Commit: 2131229 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37894 [ run ] completed with state ABORTED. Commit: 2131229

Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37896 [ run ] completed with state SUCCESS. Commit: 2131229
/LLM/main/L0_MergeRequest_PR pipeline #29342 completed with status: 'FAILURE'

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37913 [ run ] triggered by Bot. Commit: 2131229 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37913 [ run ] completed with state SUCCESS. Commit: 2131229
/LLM/main/L0_MergeRequest_PR pipeline #29358 completed with status: 'FAILURE'

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37942 [ run ] triggered by Bot. Commit: 2131229 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37942 [ run ] completed with state FAILURE. Commit: 2131229
/LLM/main/L0_MergeRequest_PR pipeline #29386 completed with status: 'FAILURE'

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@nvchenghaoz

Copy link
Copy Markdown
Collaborator Author

/bot run --extra-stage "DGX_B200-4_GPUs-AutoDeploy-1, DGX_H100-4_GPUs-AutoDeploy-1" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37975 [ run ] triggered by Bot. Commit: 2131229 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #37975 [ run ] completed with state SUCCESS. Commit: 2131229
/LLM/main/L0_MergeRequest_PR pipeline #29410 completed with status: 'SUCCESS'
Pipeline passed with automatic retried tests. Check the rerun report for details.

Link to invocation

@nvchenghaoz
nvchenghaoz merged commit b5a4e34 into NVIDIA:main Mar 6, 2026
5 checks passed
dominicshanshan pushed a commit to dominicshanshan/TensorRT-LLM that referenced this pull request Mar 9, 2026
NVIDIA#11515)

Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: nvchenghaoz <211069071+nvchenghaoz@users.noreply.github.com>
tianyuz-nv pushed a commit to wanqian-nv/TensorRT-LLM that referenced this pull request Mar 19, 2026
NVIDIA#11515)

Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: nvchenghaoz <211069071+nvchenghaoz@users.noreply.github.com>
limin2021 pushed a commit to limin2021/TensorRT-LLM that referenced this pull request Mar 19, 2026
NVIDIA#11515)

Signed-off-by: Chenghao Zhang <211069071+nvchenghaoz@users.noreply.github.com>
Signed-off-by: nvchenghaoz <211069071+nvchenghaoz@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants