Skip to content

[#10966][feat] AutoDeploy: kv cache manager integration [2/2] - #11149

Merged
lucaslie merged 1 commit into
NVIDIA:mainfrom
nv-auto-deploy:ll/cache_layout
Feb 4, 2026
Merged

[#10966][feat] AutoDeploy: kv cache manager integration [2/2]#11149
lucaslie merged 1 commit into
NVIDIA:mainfrom
nv-auto-deploy:ll/cache_layout

Conversation

@lucaslie

@lucaslie lucaslie commented Jan 30, 2026

Copy link
Copy Markdown
Contributor

Description

fixes #10966

AutoDeploy Features

  • more deeply aligns AD caches with KVCacheManager and MambaCacheManager
  • improved logic to determine what caches can go into the resource manager and which ones we can just allocate locally
  • clean up of resource handlers
  • attention backend cleanups
  • bug fixes for triton_attention and torch_attention (torch works, triton still produces somewhat gibberish)
  • clean up of deprecated, unused attention-related triton kernels

AutoDeploy Doc Update

  • deprecated/removed the unused auto_depoy doc folder in features/torch/auto_deploy/advanced and moved everything to features/auto_deploy/advanced
  • added a new doc page on AutoDeploy's handling of caches and integration into the KVCacheManager

Test Coverage

PR Checklist

Please review the following before submitting your PR:

  • PR description clearly explains what and why. If using CodeRabbit's summary, please make sure it makes sense.

  • PR Follows TRT-LLM CODING GUIDELINES to the best of your knowledge.

  • Test cases are provided for new code paths (see test instructions)

  • Any new dependencies have been scanned for license and vulnerabilities

  • CODEOWNERS updated if ownership changes

  • Documentation updated as needed

  • Update tava architecture diagram if there is a significant design change in PR.

  • The reviewers assigned automatically/manually are appropriate for the PR.

  • Please check this after reviewing the above items as appropriate for this PR.

GitHub Bot Help

/bot [-h] ['run', 'kill', 'skip', 'reuse-pipeline'] ...

Provide a user friendly way for developers to interact with a Jenkins server.

Run /bot [-h|--help] to print this help message.

See details below for each supported subcommand.

Details

run [--reuse-test (optional)pipeline-id --disable-fail-fast --skip-test --stage-list "A10-PyTorch-1, xxx" --gpu-type "A30, H100_PCIe" --test-backend "pytorch, cpp" --add-multi-gpu-test --only-multi-gpu-test --disable-multi-gpu-test --post-merge --extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx" --detailed-log --debug(experimental)]

Launch build/test pipelines. All previously running jobs will be killed.

--reuse-test (optional)pipeline-id (OPTIONAL) : Allow the new pipeline to reuse build artifacts and skip successful test stages from a specified pipeline or the last pipeline if no pipeline-id is indicated. If the Git commit ID has changed, this option will be always ignored. The DEFAULT behavior of the bot is to reuse build artifacts and successful test results from the last pipeline.

--disable-reuse-test (OPTIONAL) : Explicitly prevent the pipeline from reusing build artifacts and skipping successful test stages from a previous pipeline. Ensure that all builds and tests are run regardless of previous successes.

--disable-fail-fast (OPTIONAL) : Disable fail fast on build/tests/infra failures.

--skip-test (OPTIONAL) : Skip all test stages, but still run build stages, package stages and sanity check stages. Note: Does NOT update GitHub check status.

--stage-list "A10-PyTorch-1, xxx" (OPTIONAL) : Only run the specified test stages. Examples: "A10-PyTorch-1, xxx". Note: Does NOT update GitHub check status.

--gpu-type "A30, H100_PCIe" (OPTIONAL) : Only run the test stages on the specified GPU types. Examples: "A30, H100_PCIe". Note: Does NOT update GitHub check status.

--test-backend "pytorch, cpp" (OPTIONAL) : Skip test stages which don't match the specified backends. Only support [pytorch, cpp, tensorrt, triton]. Examples: "pytorch, cpp" (does not run test stages with tensorrt or triton backend). Note: Does NOT update GitHub pipeline status.

--only-multi-gpu-test (OPTIONAL) : Only run the multi-GPU tests. Note: Does NOT update GitHub check status.

--disable-multi-gpu-test (OPTIONAL) : Disable the multi-GPU tests. Note: Does NOT update GitHub check status.

--add-multi-gpu-test (OPTIONAL) : Force run the multi-GPU tests in addition to running L0 pre-merge pipeline.

--post-merge (OPTIONAL) : Run the L0 post-merge pipeline instead of the ordinary L0 pre-merge pipeline.

--extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx" (OPTIONAL) : Run the ordinary L0 pre-merge pipeline and specified test stages. Examples: --extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx".

--detailed-log (OPTIONAL) : Enable flushing out all logs to the Jenkins console. This will significantly increase the log volume and may slow down the job.

--debug (OPTIONAL) : Experimental feature. Enable access to the CI container for debugging purpose. Note: Specify exactly one stage in the stage-list parameter to access the appropriate container environment. Note: Does NOT update GitHub check status.

For guidance on mapping tests to stage names, see docs/source/reference/ci-overview.md
and the scripts/test_to_stage_mapping.py helper.

kill

kill

Kill all running builds associated with pull request.

skip

skip --comment COMMENT

Skip testing for latest commit on pull request. --comment "Reason for skipping build/test" is required. IMPORTANT NOTE: This is dangerous since lack of user care and validation can cause top of tree to break.

reuse-pipeline

reuse-pipeline

Reuse a previous pipeline to validate current commit. This action will also kill all currently running builds associated with the pull request. IMPORTANT NOTE: This is dangerous since lack of user care and validation can cause top of tree to break.

Summary by CodeRabbit

  • Documentation
    • Moved AutoDeploy docs to features section; added KV Cache Architecture guide with diagrams and updated links/descriptions; removed several outdated advanced pages.
  • New Features
    • Enabled Mermaid diagrams in docs.
  • Breaking Changes
    • KV cache unified into a single kv_cache resource; new typed resource handlers for KV/state/conv introduced; cache index parameter renamed from cache_loc to slot_idx; legacy Triton paged-KV attention kernels removed.
  • Tests
    • Tests parameterized for FlashInfer and Torch attention backends.

@lucaslie

Copy link
Copy Markdown
Contributor Author

KV Cache Architecture in tensorrt_llm/_torch/auto_deploy

Overview

The caching system in auto_deploy manages KV caches for attention layers, SSM/convolution states for Mamba models, and other stateful resources. The architecture is built around three key concepts:

  1. Resource Handlers - Abstract descriptions of cache resources (shape, dtype, layout)
  2. CachedSequenceInterface - The central manager that collects handlers and allocates caches
  3. KVCacheManager / MambaHybridCacheManager - Low-level memory managers from the executor

Flowchart: Cache Collection and Allocation Pipeline

flowchart TD
    subgraph Phase1["PHASE 1: RESOURCE HANDLER COLLECTION<br/>(insert_cached_attention transform)"]
        A1[AttentionDescriptor implementations<br/>e.g., FlashinferCachedAttention, TorchMambaDescriptor]
        A2["get_cache_initializers(node, config)<br/>- Extracts shapes from FakeTensors<br/>- Creates appropriate ResourceHandler"]
        A3["For each attention node (idx=0,1,2...):<br/>for k, handler in initializers.items():<br/>    k_indexed = f'{k}_{idx}'<br/>    cm.add_resource(k_indexed, handler)"]
        A1 --> A2
        A2 -->|"Returns ResourceHandlerDict<br/>{'kv_cache': KVPagedResourceHandler, ...}"| A3
    end

    subgraph Phase2["PHASE 2: RESOURCE SORTING<br/>(initialize_resources in CachedSequenceInterface)"]
        B1["_resource_lookup: Dict[str, Handler]<br/>All collected handlers"]
        B2["SORT BY TYPE"]
        B3["KVPagedResourceHandler → _paged_cache_order"]
        B4["SSMResourceHandler → _state_resource_order"]
        B5["CausalConvResourceHandler → _state_resource_order"]
        B6["StateResourceHandler → _state_resource_order"]
        B7["UnpagedResourceHandler → Other"]
        B1 --> B2
        B2 --> B3
        B2 --> B4
        B2 --> B5
        B2 --> B6
        B2 --> B7
    end

    subgraph Phase3["PHASE 3: COMPATIBILITY CHECKING<br/>(_identify_managed_* methods)"]
        C1["_identify_managed_kv_resources()<br/>• First KVPagedResourceHandler becomes kv_ref<br/>• All handlers matching kv_ref → kv_managed<br/>• Non-matching → local allocation later"]
        C2["_identify_managed_state_resources()<br/>• First SSMResourceHandler → ssm_ref<br/>• First CausalConvResourceHandler → conv_ref<br/>• Check n_groups constraint<br/>• Matching handlers → MambaHybridCacheManager"]
    end

    subgraph Phase4["PHASE 4: CACHE MANAGER CREATION<br/>(_create_kv_cache_manager)"]
        D1{"Has state resources?<br/>(ssm_managed or conv_managed)"}
        D2["Create MambaHybridCacheManager<br/>Manages KV + SSM + Conv buffers"]
        D3["Create KVCacheManager<br/>Manages paged KV buffers only"]
        D4["VIEW ASSIGNMENT<br/>_assign_kv_cache_views() → get_buffers(idx)<br/>_create_and_assign_state_views() → get_ssm_states/get_conv_states"]
        D5["Result: self._caches[name] = tensor_view"]
        D1 -->|YES| D2
        D1 -->|NO| D3
        D2 --> D4
        D3 --> D4
        D4 --> D5
    end

    subgraph Phase5["PHASE 5: UNMANAGED RESOURCE ALLOCATION<br/>(_allocate_unmanaged_resources)"]
        E1["For each name, handler in _resource_lookup:<br/>    if self._caches[name] is None:<br/>        self._caches[name] = handler.allocate(sequence_info)"]
        E2["Handles:<br/>• Incompatible KVPagedResourceHandler<br/>• Generic StateResourceHandler<br/>• CausalConvResourceHandler (constraint fails)<br/>• UnpagedResourceHandler"]
        E1 --> E2
    end

    subgraph Phase6["PHASE 6: OPTIONAL RESIZE<br/>(resize_kv_cache transform)"]
        F1["1. Run forward pass to measure activation memory<br/>2. Calculate mem_reserved_for_forward<br/>3. Shutdown existing KVCacheManager<br/>4. Compute optimal max_tokens<br/>5. Recreate KVCacheManager with optimal capacity"]
    end

    Phase1 --> Phase2
    Phase2 --> Phase3
    Phase3 --> Phase4
    Phase4 --> Phase5
    Phase5 --> Phase6
Loading

Detailed Pipeline Flow (ASCII Reference)

For environments where Mermaid doesn't render, here's the text-based flow:

PHASE 1: RESOURCE HANDLER COLLECTION (insert_cached_attention transform)
├── AttentionDescriptor implementations (e.g., FlashinferCachedAttention)
├── get_cache_initializers(node, config)
│   ├── Extracts shapes from FakeTensors
│   └── Returns ResourceHandlerDict {"kv_cache": KVPagedResourceHandler, ...}
└── For each attention node (idx=0,1,2...):
    └── cm.add_resource(f"{k}_{idx}", handler)  → Stores in CachedSequenceInterface

PHASE 2: RESOURCE SORTING (initialize_resources)
├── _resource_lookup contains all collected handlers
└── Sort by type:
    ├── KVPagedResourceHandler     → _paged_cache_order (for KVCacheManager)
    ├── SSMResourceHandler         → _state_resource_order (for MambaCache)
    ├── CausalConvResourceHandler  → _state_resource_order (for MambaCache)
    ├── StateResourceHandler       → _state_resource_order (local allocation)
    └── UnpagedResourceHandler     → Other (local allocation)

PHASE 3: COMPATIBILITY CHECKING
├── _identify_managed_kv_resources()
│   ├── First KVPagedResourceHandler becomes kv_ref
│   ├── All handlers matching kv_ref (head_dim, dtype, layout) → kv_managed
│   └── Non-matching handlers → local allocation later
└── _identify_managed_state_resources()
    ├── First SSMResourceHandler → ssm_ref
    ├── First CausalConvResourceHandler → conv_ref
    ├── Check n_groups constraint: conv_dim = head_dim*num_heads + 2*n_groups*d_state
    └── If constraint fails → conv_ref = None (local allocation)

PHASE 4: CACHE MANAGER CREATION (_create_kv_cache_manager)
├── Has state resources? (ssm_managed or conv_managed)
│   ├── YES → Create MambaHybridCacheManager (manages KV + SSM + Conv)
│   └── NO  → Create KVCacheManager (manages paged KV only)
└── View Assignment:
    ├── _assign_kv_cache_views()         → manager.get_buffers(idx)
    └── _create_and_assign_state_views() → manager.get_ssm_states/get_conv_states

PHASE 5: UNMANAGED RESOURCE ALLOCATION
└── For resources where self._caches[name] is None:
    └── self._caches[name] = handler.allocate(sequence_info)

PHASE 6: OPTIONAL RESIZE (resize_kv_cache transform)
├── Run forward pass to measure activation memory
├── Shutdown existing KVCacheManager
├── Compute: mem_for_paged = (free_mem - non_paged - forward_mem) * free_gpu_fraction
└── Recreate KVCacheManager with optimal max_tokens

Key Resource Handler Types

Handler Type Managed By Buffer Source Use Case
KVPagedResourceHandler KVCacheManager get_buffers(idx) Paged KV caches for attention
SSMResourceHandler MambaHybridCacheManager get_ssm_states(layer) Mamba SSM state
CausalConvResourceHandler MambaHybridCacheManager get_conv_states(layer) Mamba causal conv state
StateResourceHandler Local allocation handler.allocate() Generic per-sequence state
UnpagedResourceHandler Local allocation handler.allocate() Unpaged per-token resources

Key Files and Their Responsibilities

1. custom_ops/attention_interface.py

  • ResourceHandler (abstract base): Interface for allocating resources
  • KVPagedResourceHandler: Describes paged KV cache with num_kv_heads, head_dim, dtype, kv_layout
  • SSMResourceHandler: Describes Mamba SSM state with num_heads, head_dim, d_state
  • CausalConvResourceHandler: Describes causal conv state with conv_dim, d_conv
  • AttentionDescriptor.get_cache_initializers(): Returns ResourceHandlerDict mapping names to handlers

2. transform/library/kvcache.py

  • InsertCachedAttention: Iterates over attention nodes, calls get_cache_initializers(), and registers handlers via cm.add_resource()
  • InitializeCache: Triggers cm.initialize_resources() to allocate all caches
  • ResizeKVCache: Runs forward pass, measures memory, and calls cm.resize_kv_cache_manager()

3. shim/interface.py

  • CachedSequenceInterface: Central class managing all caches
    • add_resource(): Stores handlers in _resource_lookup
    • initialize_resources(): Sorts handlers by type, creates cache managers, assigns views
    • _identify_managed_kv_resources(): Groups compatible KV handlers
    • _identify_managed_state_resources(): Groups compatible SSM/Conv handlers with constraint checking
    • _create_kv_cache_manager(): Creates KVCacheManager or MambaHybridCacheManager
    • _allocate_unmanaged_resources(): Fallback for incompatible handlers

Example Flow: FlashInfer Attention

# In flashinfer_attention.py
class FlashinferCachedAttention(AttentionDescriptor):
    @classmethod
    def get_cache_initializers(cls, source_attn_node, cache_config):
        k_fake = source_attn_node.args[1].meta["val"]
        return {
            "kv_cache": KVPagedResourceHandler(
                num_kv_heads=k_fake.shape[2],
                head_dim=k_fake.shape[3],
                dtype=cls.resolve_cache_dtype(cache_config.dtype, k_fake.dtype),
                kv_factor=2,
                kv_layout="HND",
            )
        }

This handler gets:

  1. Collected by InsertCachedAttentioncm.add_resource("kv_cache_0", handler)
  2. Sorted into _paged_cache_order during initialize_resources()
  3. Managed by KVCacheManager if compatible with other KV handlers
  4. View assigned via self._caches["kv_cache_0"] = manager.get_buffers(0, kv_layout="HND")

Compatibility Rules

KV Cache Compatibility (for KVCacheManager)

Handlers are compatible if they match on:

  • head_dim
  • dtype
  • kv_factor
  • kv_layout

Note: num_kv_heads can differ (supports GQA/MQA with varying head counts per layer).

State Resource Compatibility (for MambaHybridCacheManager)

SSM Resources: Compatible if state_shape and dtype match.

Conv Resources: Compatible if state_shape and dtype match, AND the n_groups constraint holds:

conv_dim = head_dim * num_heads + 2 * n_groups * d_state

If this constraint cannot be satisfied with integer n_groups >= 0, Conv resources fall back to local allocation.

Comment thread tensorrt_llm/_torch/auto_deploy/shim/interface.py
@lucaslie
lucaslie marked this pull request as ready for review January 30, 2026 22:05
@lucaslie
lucaslie requested review from a team as code owners January 30, 2026 22:05
@lucaslie

Copy link
Copy Markdown
Contributor Author

@CodeRabbit summary

@coderabbitai

coderabbitai Bot commented Jan 30, 2026

Copy link
Copy Markdown
Contributor
✅ Actions performed

Summary regeneration triggered.

@lucaslie

Copy link
Copy Markdown
Contributor Author

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

@coderabbitai

coderabbitai Bot commented Jan 30, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Migrates KV cache to unified HND-style KV resources, adds typed resource handlers (KVPaged, SSM, CausalConv), refactors cache orchestration for hybrid KV+state managers, renames cache indexing from cache_locslot_idx, removes legacy Triton paged-KV kernels and related docs/tests, and updates transforms and tests.

Changes

Cohort / File(s) Summary
Docs & config
README.md, examples/auto_deploy/README.md, docs/requirements.txt, docs/source/conf.py, docs/source/features/auto_deploy/...
Updated AutoDeploy links, added sphinxcontrib-mermaid, added KV Cache Architecture doc, removed multiple legacy AutoDeploy docs and pages.
Core resource handlers
tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py
Added KVPagedResourceHandler, StateResourceHandler, SSMResourceHandler, CausalConvResourceHandler; SequenceInfo now tracks _num_blocks; allocation/equality and bytes-per-token APIs implemented.
KV consolidation (FlashInfer)
.../flashinfer_attention.py, tests touching flashinfer
Replaced separate k_cache/v_cache with single kv_cache (HND); updated initializers to use KVPagedResourceHandler(kv_layout="HND"); test updates to construct/consume combined kv cache.
Triton attention & kernels
.../triton_attention.py, .../triton_kernels/attention_with_kv_cache.py, (removed) .../attention_with_paged_kv_cache.py, (removed) _triton_attention_internal.py
Introduced PREFILL/DECODE split (_prefill_attention, _decode_attention), renamed cache_locslot_idx across APIs and kernels, removed paged-KV Triton kernels and large internal Triton attention module.
PyTorch backend
.../torch_attention.py, .../torch_backend_attention.py
Renamed parameter cache_locslot_idx in update and MHA entry points; updated indexing and metadata outputs to use slot_idx.
Mamba / backend common
.../mamba/*.py, mamba_backend_common.py
Replaced StateResourceHandler usage with SSMResourceHandler/CausalConvResourceHandler; removed custom FlashInfer state handler; delegated initializer logic to superclass.
MLA adjustments
tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py
Switched to _prefill_attention/_decode_attention kernels and added explicit QK scaling computation from combined dims.
Cache management / shim
tensorrt_llm/_torch/auto_deploy/shim/interface.py
Major refactor: resource identification (KV vs state), builders for KVCacheManager vs MambaHybridCacheManager, view assignment, unmanaged allocation, resize logic, lifecycle methods, and richer logging for hybrid KV+state setups.
Transforms
tensorrt_llm/_torch/auto_deploy/transform/library/kvcache.py, related transforms
Introduced _InsertCachedOperator base; made InsertCachedAttention/MLA inherit it; updated multiple transform classes to the new base; minor logging change.
Tests — unit & integration
tests/unittest/.../test_resource_handlers.py, test_cached_sequence_interface.py, test_flashinfer_attention_op.py, test_attention_with_kv_cache.py, integration test files and test lists
Updated many tests to use KVPagedResourceHandler, SSMResourceHandler, CausalConvResourceHandler; tests now supply kv_cache in HND layout, rename CACHE_LOCSSLOT_IDX, remove tests for paged-KV Triton kernels and deprecated op tests; parameterized integration tests over attn_backend.
Removed legacy modules
tensorrt_llm/_torch/auto_deploy/custom_ops/_triton_attention_internal.py, .../triton_kernels/attention_with_paged_kv_cache.py and related tests
Deleted legacy Triton paged-KV kernels and large internal attention implementation and their tests.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant Descriptor as AttentionDescriptor
participant Shim as CachedSequenceInterface
participant Registry as AttentionRegistry
participant Manager as KV/MambaHybridCacheManager
participant Alloc as Allocator

Descriptor->>Shim: register resource handlers (kv/state)
Shim->>Shim: _identify_managed_kv_resources()
Shim->>Shim: _identify_managed_state_resources()
Shim->>Manager: _create_kv_cache_manager(max_tokens)
Shim->>Manager: _create_and_assign_state_views(...)\n(if hybrid)
Shim->>Alloc: _allocate_unmanaged_resources()
Manager-->>Shim: return views/allocations
Shim->>Registry: expose metadata / log cache stats

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 73.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main feature: KV cache manager integration for AutoDeploy, part 2 of the work.
Description check ✅ Passed The PR description explains the changes (cache alignment, resource handler cleanup, bug fixes, documentation updates) and includes the checklist, but lacks specific test coverage details.
Linked Issues check ✅ Passed The PR implements all objectives from #10966: HND layout alignment, correct parameterization instead of byte abstraction, attention backend updates, unit test changes, and documentation restructuring.
Out of Scope Changes check ✅ Passed All code changes are aligned with issue #10966: resource handler refactoring, cache layout updates, attention backend fixes, test updates, and documentation changes are all in scope.

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

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

Important

Action Needed: IP Allowlist Update

If your organization protects your Git platform with IP whitelisting, please add the new CodeRabbit IP address to your allowlist:

  • 136.113.208.247/32 (new)
  • 34.170.211.100/32
  • 35.222.179.152/32

Reviews will stop working after February 8, 2026 if the new IP is not added to your allowlist.


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.

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #34258 [ run ] triggered by Bot. Commit: 9654482

@coderabbitai

coderabbitai Bot commented Jan 30, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR restructures AutoDeploy's cache resource handling system, introducing explicit typed resource handler classes (KVPagedResourceHandler, SSMResourceHandler, CausalConvResourceHandler), unifying KV cache initialization from separate k/v caches into single layouts, systematically renaming cache indexing parameters (cache_loc → slot_idx), removing legacy Triton paged cache implementations, and reorganizing documentation.

Changes

Cohort / File(s) Summary
Documentation structure reorganization
README.md, examples/auto_deploy/README.md
Updated documentation links from torch-specific paths to features-based paths; consolidated AutoDeploy documentation structure.
Documentation build dependencies
docs/requirements.txt, docs/source/conf.py
Added sphinxcontrib-mermaid for Sphinx-based diagram rendering support.
New AutoDeploy documentation
docs/source/features/auto_deploy/auto-deploy.md, docs/source/features/auto_deploy/advanced/kv_cache_architecture.md
Added comprehensive KV Cache Architecture documentation describing the six-phase initialization pipeline; updated main AutoDeploy page with advanced usage links.
Removed legacy documentation
docs/source/torch/auto_deploy/auto-deploy.md, docs/source/torch/auto_deploy/support_matrix.md, docs/source/torch/auto_deploy/advanced/...
Deleted outdated torch-specific AutoDeploy docs (8 files total): benchmarking, example runs, expert configurations, logging, serving, workflow, and support matrix pages.
Resource handler interface refactoring
tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py
Introduced new public resource handler classes: KVPagedResourceHandler (with explicit kv_layout support), StateResourceHandler (base), SSMResourceHandler, CausalConvResourceHandler; added num_blocks tracking to SequenceInfo.
Triton attention implementation removal
tensorrt_llm/_torch/auto_deploy/custom_ops/_triton_attention_internal.py
Deleted entire internal Triton attention module containing fused MHA variants with rope fusion and paged KV cache handling (697 lines).
FlashInfer attention backend updates
tensorrt_llm/_torch/auto_deploy/custom_ops/flashinfer_attention.py
Unified k/v cache handling: replaced separate k\_cache/v\_cache with single kv_cache using KVPagedResourceHandler; updated default kv_layout from NHD to HND; refactored get_cache_initializers accordingly.
Mamba backend resource handler migrations
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/mamba_backend_common.py, torch_backend_mamba.py, cuda_backend_causal_conv.py, torch_backend_causal_conv.py, flashinfer_backend_mamba.py
Replaced StateResourceHandler with typed handlers: SSMResourceHandler for SSM states, CausalConvResourceHandler for convolution states; simplified FlashInferStateResourceHandler removal and base class delegation.
Torch and Triton attention parameter renaming
tensorrt_llm/_torch/auto_deploy/custom_ops/torch_attention.py, torch_backend_attention.py, triton_attention.py, mla.py
Systematically renamed cache_loc parameter to slot_idx across all attention implementations; refactored decode/prefill paths in Triton attention with new function signatures (_decode_attention, _prefill_attention).
Triton kernel parameter renaming and deletion
tensorrt_llm/_torch/auto_deploy/custom_ops/triton_kernels/attention_with_kv_cache.py, attention_with_paged_kv_cache.py
Renamed cache_loc_ptr to slot_idx_ptr across 7+ kernel functions; deleted entire paged KV cache kernel module (395 lines), removing update_paged_kv_cache, attention_kv_paged_stage1, context_attention_kv_paged kernels.
Cache management interface refactoring
tensorrt_llm/_torch/auto_deploy/shim/interface.py
Major refactoring of CachedSequenceInterface: introduced 6-phase initialization pipeline with helpers (_identify_managed_kv_resources, _prepare_kv_cache_config, _create_kv_cache_manager, etc.); updated resource tracking with typed Dict structures; expanded Mamba compatibility checking.
Minor utility updates
tensorrt_llm/_torch/auto_deploy/transform/interface.py, transform/library/kvcache.py
Updated memory change detection to include free memory delta; removed diagnostic log message from cache initialization.
Test parametrization for backends
tests/integration/defs/accuracy/test_llm_api_autodeploy.py
Introduced per-backend configuration (ATTN_BACKEND_CONFIGS); parametrized test_auto_dtype over ["flashinfer", "torch"] attention backends; conditionally gated MMLU evaluation for non-torch backends.
Test list updates
tests/integration/test_lists/test-db/l0_b200.yml, l0_dgx_b200.yml, l0_dgx_h100.yml, l0_h100.yml
Updated parametrized test entries to include attn_backend parameter, replacing [False-N] with [flashinfer-False-N] or [torch-True-N] variants.
Resource handler unit test migration
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_resource_handlers.py, test_attention_op.py, test_flashinfer_attention_op.py
Migrated tests from PagedResourceHandler to KVPagedResourceHandler; added tests for SSMResourceHandler and CausalConvResourceHandler; refactored FlashInfer tests to use unified kv_cache; removed extensive legacy attention op test variants (401 lines).
Cache indexing and paging test updates
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_update_kv_cache.py, triton_kernels/test_attention_with_kv_cache.py, test_attention_with_paged_kv_cache.py
Renamed local test variables cache_loc/CACHE_LOCS to slot_idx/SLOT_IDX; deleted entire paged KV cache kernel test module (537 lines).
Shim interface test updates
tests/unittest/_torch/auto_deploy/unit/singlegpu/shim/test_cached_sequence_interface.py, transformations/library/test_kv_cache.py
Migrated resource handler usage to new typed classes; updated resource key naming from k_cache_/v_cache_ to kv_cache_*; expanded test coverage for mixed resource scenarios and MambaHybridCacheManager integration.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Suggested reviewers

  • tcherckez-nvidia
  • laikhtewari
  • kaiyux
  • danielafrimi
  • Wanli-Jiang
  • nvchenghaoz
  • nv-guomingz
🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 73.28% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The PR description contains only template placeholders and a reference to issue #10966, with minimal actual content explaining the changes, objectives, or testing approach. Add a substantive description explaining what the KV cache manager integration accomplishes, why it was necessary, and what key changes were made. Reference the detailed pipeline and resource handler architecture mentioned in PR comments.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly identifies the feature as KV cache manager integration with a specific part indicator, directly aligned with the main objective documented in PR comments.

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

✨ Finishing touches
  • 📝 Generate docstrings
🧪 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: 3

Caution

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

⚠️ Outside diff range comments (8)
tensorrt_llm/_torch/auto_deploy/custom_ops/triton_kernels/attention_with_kv_cache.py (2)

1-2: ⚠️ Potential issue | 🟠 Major

Add the required NVIDIA copyright header.

This file is missing the NVIDIA copyright header with the year of latest meaningful modification (2026). Please add the standard header used elsewhere in the repo above the module docstring.
As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.

🧩 Suggested placement
+ # Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved.
+ # (Use the standard NVIDIA license header from this repository.)
+
 """Multi-head attention kernel that can operate with kv-caches."""

3-4: 🛠️ Refactor suggestion | 🟠 Major

Use import triton.language as tl to preserve the namespace.

The coding guidelines require maintaining the module namespace when importing. The codebase consistently uses import triton.language as tl across 47+ files. This import pattern violates the mandatory guideline and should be corrected for consistency.

♻️ Suggested change
 import triton
-from triton import language as tl
+import triton.language as tl
tensorrt_llm/_torch/auto_deploy/transform/interface.py (1)

1-4: ⚠️ Potential issue | 🟡 Minor

Add the NVIDIA copyright header.
This core source file is missing the required NVIDIA copyright notice with the latest modification year.

As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.

tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/flashinfer_backend_mamba.py (1)

1-1: ⚠️ Potential issue | 🟡 Minor

Add the standard NVIDIA copyright header.

This file is missing the required NVIDIA copyright header before the imports; please add the project-standard header with the latest modification year. As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.

tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_update_kv_cache.py (2)

1-1: ⚠️ Potential issue | 🟡 Minor

Add the standard NVIDIA copyright header.

This test module is missing the required NVIDIA copyright header; please add the project-standard header with the latest modification year. As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.


3-3: ⚠️ Potential issue | 🟡 Minor

Preserve module namespace on torch_attention import.

Switch to a module import and qualify the call site.

♻️ Proposed refactor
-from tensorrt_llm._torch.auto_deploy.custom_ops.torch_attention import update_kv_cache
+import tensorrt_llm._torch.auto_deploy.custom_ops.torch_attention as torch_attention
@@
-    update_kv_cache(
+    torch_attention.update_kv_cache(

As per coding guidelines: Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/custom_ops/torch_attention.py (1)

239-253: ⚠️ Potential issue | 🟡 Minor

Rename cache_loc to slot_idx in fused_mla_ref and fused_mla_ref_fake for consistency.

The rename from cache_loc to slot_idx in update_kv_cache is correct, but fused_mla_ref (lines 264, 330, 337-338) and fused_mla_ref_fake (line 397) still use cache_loc. Since these functions call update_kv_cache and use the same semantic parameter, they should use the same name for consistency.

tests/integration/defs/accuracy/test_llm_api_autodeploy.py (1)

46-78: ⚠️ Potential issue | 🟠 Major

Ensure chunked-prefill max_num_tokens exceeds backend max_batch_size.
For attn_backend="flashinfer", max_batch_size is 512, but chunked-prefill sets max_num_tokens to 512, which violates the “must be > max(tokens_per_block, max_batch_size)” requirement and risks cache sizing failures.

💡 Proposed fix
-            # NOTE: must be > max(tokens_per_block, max_batch_size)
-            config["max_num_tokens"] = 512
+            # NOTE: must be > max(tokens_per_block, max_batch_size)
+            config["max_num_tokens"] = max(backend_cfg["max_batch_size"] + 1, 512)
🤖 Fix all issues with AI agents
In `@tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py`:
- Around line 1081-1114: The docstring for allocate() misstates the NHD layout
shape; update the docstring to match the implementation in allocate (when
kv_layout == "NHD") which returns a tensor shaped [num_blocks, tokens_per_block,
kv_factor, num_kv_heads, head_dim], or if the intended shape is different change
the tensor construction to match the documented [num_blocks, kv_factor,
tokens_per_block, num_kv_heads, head_dim]; locate the allocate function and
either correct the NHD docstring to the implementation shape or reorder the
torch.empty dimensions to match the docstring so both agree.

In
`@tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/flashinfer_backend_mamba.py`:
- Line 7: The import uses a from-import for AttentionRegistry, MHACallable,
ResourceHandlerDict; change it to import the module namespace instead (import
the attention_interface module from the parent package) and update downstream
references to use attention_interface.AttentionRegistry,
attention_interface.MHACallable, and attention_interface.ResourceHandlerDict so
the module namespace is preserved across the file.

In `@tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py`:
- Around line 1-2: Add the required NVIDIA copyright header at the very top of
the file (above the existing module docstring) and include the latest
modification year and appropriate copyright language; modify
tensorrt_llm._torch.auto_deploy.custom_ops.mla.py by inserting the standard
NVIDIA header block before the triple-quoted docstring so the file starts with
the copyright notice followed by the existing module docstring.
🧹 Nitpick comments (10)
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/triton_kernels/test_attention_with_kv_cache.py (1)

55-109: Use snake_case for local slot index lists.

SLOT_IDX is a local list; per guidelines it should be snake_case. Consider renaming to slot_idx_list and updating its uses in this test (and similarly elsewhere).
As per coding guidelines: Python local variables should use snake_case.

♻️ Suggested rename in this test
-    SLOT_IDX = list(range(0, len(SEQ_LENS)))
-    random.shuffle(SLOT_IDX)
+    slot_idx_list = list(range(0, len(SEQ_LENS)))
+    random.shuffle(slot_idx_list)
...
-        torch.tensor(SLOT_IDX, device=DEVICE, dtype=torch.int32),
+        torch.tensor(slot_idx_list, device=DEVICE, dtype=torch.int32),
...
-    for i, slot_idx in enumerate(SLOT_IDX):
+    for i, slot_idx in enumerate(slot_idx_list):
tests/unittest/_torch/auto_deploy/unit/singlegpu/transformations/library/test_kv_cache.py (3)

10-11: Prefer module import to preserve namespace.
Please keep the module namespace and update usages accordingly.

♻️ Suggested import style
-from tensorrt_llm._torch.auto_deploy.custom_ops.attention_interface import KVPagedResourceHandler
+import tensorrt_llm._torch.auto_deploy.custom_ops.attention_interface as attention_interface
As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

295-301: Remove the inline from-import and reuse the module alias.
This avoids redundant imports and keeps the namespace rule consistent with the module-level import.

♻️ Suggested update
-    from tensorrt_llm._torch.auto_deploy.custom_ops.attention_interface import (
-        KVPagedResourceHandler,
-    )
-
-    dummy_cached_interface.add_resource(
-        "kv_cache_0", KVPagedResourceHandler(8, 64, dtype=torch.float16)
-    )
+    dummy_cached_interface.add_resource(
+        "kv_cache_0",
+        attention_interface.KVPagedResourceHandler(8, 64, dtype=torch.float16),
+    )
As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

528-529: Avoid asserting on private _paged_cache_order.
Prefer a public accessor or a small test helper on CachedSequenceInterface to keep tests resilient to internal refactors.

tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py (1)

10-20: Keep triton_attention imported as a module to preserve namespace.
Update call sites to use the module-qualified functions.

♻️ Suggested update
-from .triton_attention import _decode_attention, _prefill_attention
+from . import triton_attention
@@
-        _decode_attention(
+        triton_attention._decode_attention(
@@
-        _prefill_attention(
+        triton_attention._prefill_attention(
As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_resource_handlers.py (1)

275-304: Consider moving imports to the top of the file for consistency.

The SSMResourceHandler and CausalConvResourceHandler imports are done locally inside test functions (lines 277, 287, 309, 321). While this works, it's inconsistent with how KVPagedResourceHandler is imported at the module level (line 15).

♻️ Suggested refactor: consolidate imports at module level
 from tensorrt_llm._torch.auto_deploy.custom_ops.attention_interface import (
     AttentionDescriptor,
     KVPagedResourceHandler,
     ResourceHandler,
     SequenceInfo,
     StateResourceHandler,
     UnpagedResourceHandler,
+    SSMResourceHandler,
+    CausalConvResourceHandler,
 )

Then remove the local imports from test functions.

docs/source/features/auto_deploy/advanced/kv_cache_architecture.md (1)

126-133: Minor: Table formatting could be improved for consistency.

The static analysis flagged table formatting style. While functional, consider adding consistent spacing around pipes for better readability.

📝 Suggested formatting fix
-| Handler Type | Managed By | Buffer Source | Use Case |
-|--------------|------------|---------------|----------|
+| Handler Type               | Managed By               | Buffer Source              | Use Case                        |
+|----------------------------|--------------------------|----------------------------|---------------------------------|

This is a minor style preference and doesn't affect functionality.

tests/unittest/_torch/auto_deploy/unit/singlegpu/shim/test_cached_sequence_interface.py (1)

12-19: Prefer module-level imports to keep namespace.
Consider importing the module and referencing symbols via the module namespace to align with repository import conventions.

As per coding guidelines, Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/custom_ops/flashinfer_attention.py (1)

15-25: Keep attention_interface imports namespaced.
Consider importing the module and referencing KVPagedResourceHandler/others via the module namespace.

As per coding guidelines, Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/shim/interface.py (1)

13-24: Use module import for _utils helper to keep namespace.

♻️ Suggested refactor
-from ...._utils import torch_dtype_to_binding
+from .... import _utils as trt_utils
@@
-                    "dtype": torch_dtype_to_binding(kv_ref.dtype),
+                    "dtype": trt_utils.torch_dtype_to_binding(kv_ref.dtype),
As per coding guidelines, Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

Also applies to: 371-376

Comment thread tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py
Comment thread tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py
@lucaslie
lucaslie requested a review from MrGeva January 30, 2026 22:27
@lucaslie

Copy link
Copy Markdown
Contributor 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 #34263 [ run ] triggered by Bot. Commit: a348171

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #34263 [ run ] completed with state SUCCESS. Commit: a348171
/LLM/main/L0_MergeRequest_PR pipeline #26424 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

MrGeva added a commit to nv-auto-deploy/TensorRT-LLM that referenced this pull request Feb 2, 2026
Adapt TRT-LLM attention to work with Lucas's KV cache changes (PR NVIDIA#11149):

- TrtllmKVResourceHandler now extends KVPagedResourceHandler for proper
  cache interface recognition, with __eq__ returning False to use
  PTCacheBackend's own cache management instead of shared KVCacheManager
- Calculate optimal num_blocks based on available GPU memory (80%)
  instead of using undersized value from dummy KVCacheManager
- Fix GPU work tensor sizing in PTCacheBackend to use actual allocated
  block count (config.num_pages) rather than sequence_info.num_blocks
- Handle 5D->4D tensor squeeze for kv_factor=1 dimension from KVCacheManager
- Remove torch.cuda.synchronize() that broke CUDA graph capture

These changes resolve memory corruption issues during warmup and shape
mismatches during inference that occurred after rebasing on the new
KV cache manager API.

Signed-off-by: Eran Geva <egeva@nvidia.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@MrGeva MrGeva left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

Comment thread README.md Outdated

@QiJune QiJune left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

Signed-off-by: Lucas Liebenwein <11156568+lucaslie@users.noreply.github.com>
@lucaslie

lucaslie commented Feb 3, 2026

Copy link
Copy Markdown
Contributor Author

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

@lucaslie
lucaslie enabled auto-merge (squash) February 3, 2026 22:56
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #34697 [ run ] triggered by Bot. Commit: 3a387ce

@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: 5

Caution

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

⚠️ Outside diff range comments (24)
docs/source/conf.py (1)

1-5: ⚠️ Potential issue | 🟠 Major

Add the required NVIDIA copyright header.
This Python source is missing the NVIDIA copyright header with the year of latest meaningful modification (2026).

🔧 Proposed header
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
 # Configuration file for the Sphinx documentation builder.
 #
 # For the full list of built-in configuration values, see the documentation:
 # https://www.sphinx-doc.org/en/master/usage/configuration.html
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/transform/interface.py (1)

1-4: ⚠️ Potential issue | 🟠 Major

Add the required NVIDIA copyright header.
This Python source is missing the NVIDIA copyright header with the year of latest meaningful modification (2026).

🔧 Proposed header
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
 """The interface for all transforms.
 
 This module defines the base classes and interfaces for all transforms.
 """
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/transform/library/kvcache.py (1)

1-2: ⚠️ Potential issue | 🟠 Major

Update SPDX header year to reflect the 2026 modification.
The file was modified in 2026, so the header year should be updated.

🔧 Proposed fix
-# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py (1)

1-10: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header.

This source file is missing the required NVIDIA copyright notice with the latest modification year.

📝 Suggested header (match existing SPDX style)
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/custom_ops/triton_kernels/attention_with_kv_cache.py (1)

1-5: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header.

This file is missing the required NVIDIA header with the latest modification year.

📝 Suggested header (match SPDX style)
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/custom_ops/triton_attention.py (3)

1-5: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header.

This file is missing the required NVIDIA header with the latest modification year.

📝 Suggested header (match SPDX style)
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.

278-303: ⚠️ Potential issue | 🟡 Minor

Silence unused slot_idx in the fake kernel.

This triggers ARG001; add a local no-op to satisfy lint.

🧹 Suggested fix
 def flattened_mha_fake(
     # Q, K, V
     q: torch.Tensor,
     k: torch.Tensor,
     v: torch.Tensor,
     # STANDARD METADATA
     batch_info_host: torch.Tensor,
     seq_len: torch.Tensor,
     input_pos: torch.Tensor,
     slot_idx: torch.Tensor,
     cu_seqlen: torch.Tensor,
@@
 ):
+    _ = slot_idx
     return q.new_empty(*q.shape[:-1], v.shape[-1]).contiguous()

143-161: ⚠️ Potential issue | 🟠 Major

Fix grid sizing: max(seq_len) returns a Tensor and cannot be used in Triton grid tuples.

seq_len is a torch.Tensor. Python's max(seq_len) yields a 0-d Tensor, which cannot be used directly in Triton grid dimension tuples. Extract the maximum sequence length as a Python int once and reuse it in both the kernel call at line 143 and the grid assignment at line 160.

🛠️ Suggested fix
-    update_kv_cache[(num_prefill, n_kv_heads, (max(seq_len) + SEQ_BLOCK - 1) // SEQ_BLOCK)](
+    max_seq_len = int(seq_len.max().item())
+    num_blocks = (max_seq_len + SEQ_BLOCK - 1) // SEQ_BLOCK
+    update_kv_cache[(num_prefill, n_kv_heads, num_blocks)](
         k,
         v,
         seq_len,
         seq_start,
         k_cache,
         v_cache,
         input_pos,
         slot_idx,
         max_cache_seq_len,
         n_kv_heads,
         q_d_head,
         v_d_head,
         32,
         GENERATE_ONLY=False,
     )

-    grid = (num_prefill, n_heads, (max(seq_len) + SEQ_BLOCK - 1) // SEQ_BLOCK)
+    grid = (num_prefill, n_heads, num_blocks)
tensorrt_llm/_torch/auto_deploy/transform/library/kvcache_transformers.py (1)

1-10: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header.

This file is missing the required NVIDIA header with the latest modification year.

📝 Suggested header (match SPDX style)
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/transform/library/hidden_states.py (1)

1-2: ⚠️ Potential issue | 🟡 Minor

Update the SPDX header year to the latest modification year.

The header still reflects 2025 even though this file has 2026 changes.

📝 Suggested update
-# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
As per coding guidelines, all TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/custom_ops/torch_attention.py (1)

264-264: ⚠️ Potential issue | 🟡 Minor

Standardize parameter naming: use slot_idx instead of cache_loc in fused_mla_ref and related functions.

The inconsistency is confirmed. Both update_kv_cache (line 232) and fused_mla_ref (line 264) perform identical cache indexing operations—retrieving and storing key-value cache entries—but use different parameter names: slot_idx vs cache_loc. Since fused_mla_ref calls update_kv_cache and passes cache_loc as the argument for what update_kv_cache expects as slot_idx (line 330), and both functions use the parameter identically for indexing (lines 248, 251 vs 337–338), the naming should be unified. The same pattern appears in fused_mla_ref_fake (line 397).

tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/triton_kernels/test_attention_with_kv_cache.py (2)

1-6: ⚠️ Potential issue | 🟡 Minor

Missing SPDX copyright header.

This file is missing the required NVIDIA copyright header. Per coding guidelines, all TensorRT-LLM source files should contain an SPDX copyright header with the year of latest meaningful modification.

📝 Proposed fix
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import math
 import random

194-199: ⚠️ Potential issue | 🟠 Major

Missing assert on torch.allclose — test will always pass.

The torch.allclose call on line 194 is not wrapped in an assert statement, so this test will pass regardless of whether the values match.

🐛 Proposed fix
-    torch.allclose(
+    assert torch.allclose(
         ref.squeeze().cpu().to(torch.float32),
         output.squeeze().cpu().to(torch.float32),
         atol=1e-2,
         rtol=1e-2,
     )
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/torch_backend_causal_conv.py (1)

1-11: ⚠️ Potential issue | 🟡 Minor

Missing SPDX copyright header.

This file is missing the required NVIDIA SPDX copyright header. Per coding guidelines, all TensorRT-LLM source files should contain an SPDX copyright header.

📝 Proposed fix
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 """Custom op collection for cached causal conv1d in pure PyTorch.
tests/unittest/_torch/auto_deploy/unit/singlegpu/transformations/library/test_kv_cache.py (1)

1-6: ⚠️ Potential issue | 🟡 Minor

Missing SPDX copyright header.

This test file is missing the required NVIDIA SPDX copyright header.

📝 Proposed fix
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 from typing import List, Optional
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/torch_backend_mamba.py (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Missing SPDX copyright header.

This file is missing the required NVIDIA SPDX copyright header.

📝 Proposed fix
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 """Custom op collection for cached mamba2 ssm transform (linear attention) in pure PyTorch.
tensorrt_llm/_torch/auto_deploy/custom_ops/mamba/flashinfer_backend_mamba.py (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Missing SPDX copyright header.

This file is missing the required NVIDIA SPDX copyright header.

📝 Proposed fix
+# SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 from typing import List
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_resource_handlers.py (1)

1-8: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header (2026).

This file is missing the required NVIDIA header for TensorRT-LLM source files.

📝 Suggested header
+ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ # SPDX-License-Identifier: Apache-2.0
As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_flashinfer_attention_op.py (1)

1-5: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header (2026).

This file is missing the required NVIDIA header for TensorRT-LLM source files.

📝 Suggested header
+ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ # SPDX-License-Identifier: Apache-2.0
As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tests/integration/defs/accuracy/test_llm_api_autodeploy.py (1)

1-2: ⚠️ Potential issue | 🟠 Major

Update the NVIDIA copyright year to 2026.

This file was modified in 2026 but still lists 2025 in the header.

📝 Suggested header tweak
-# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tests/unittest/_torch/auto_deploy/unit/singlegpu/shim/test_cached_sequence_interface.py (1)

1-7: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header (2026).

This file is missing the required NVIDIA header for TensorRT-LLM source files.

📝 Suggested header
+ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ # SPDX-License-Identifier: Apache-2.0
As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.
tensorrt_llm/_torch/auto_deploy/custom_ops/flashinfer_attention.py (2)

1-5: ⚠️ Potential issue | 🟠 Major

Add the NVIDIA copyright header (2026).

This file is missing the required NVIDIA header for TensorRT-LLM source files.

📝 Suggested header
+ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ # SPDX-License-Identifier: Apache-2.0
As per coding guidelines: All TensorRT-LLM source files (.cpp, .h, .cu, .py, and other source files) should contain an NVIDIA copyright header with the year of latest meaningful modification.

462-469: ⚠️ Potential issue | 🟡 Minor

Silence unused-argument lint in fake op.

🧹 Suggested fix
 def flashinfer_mha_with_cache_fake(
@@
-    kv_cache: torch.Tensor,
+    kv_cache: torch.Tensor,
@@
 ) -> torch.Tensor:
+    _ = kv_cache
     return torch.empty_like(q.contiguous())
tensorrt_llm/_torch/auto_deploy/shim/interface.py (1)

111-116: ⚠️ Potential issue | 🟠 Major

to() doesn't update unmanaged caches because the result isn't assigned.

Tensor.to(...) returns a new tensor; without assignment, caches stay on the old device.

🛠️ Suggested fix
         for name, cache in self._caches.items():
             if name in self._unmanaged_resources:
-                cache.to(*args, **kwargs)
+                self._caches[name] = cache.to(*args, **kwargs)
🤖 Fix all issues with AI agents
In `@tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py`:
- Around line 151-177: The calls to the Triton helpers are passing page indices
(`cache_loc`) instead of per-sequence slot indices; update the metadata and call
sites so `_decode_attention` and `_prefill_attention` receive `slot_idx`
(per-sequence slot indices) rather than `cache_loc` (page indices): rename the
metadata argument to `slot_idx`, change any slicing/usage that currently reads
`cache_loc` to use `slot_idx` (including the arguments passed into
`_decode_attention` and `_prefill_attention`), and update
`get_standard_metadata_args` to expose and return `slot_idx` so all call sites
use the correct slot indices for unpaged cache accesses and after slot
migration.

In `@tensorrt_llm/_torch/auto_deploy/shim/interface.py`:
- Around line 1-4: This file is missing the required NVIDIA copyright header
(2026); add the standard NVIDIA copyright/header block at the very top of the
file before any imports (above the existing import copy / import functools
lines) using the 2026 year and the canonical TensorRT-LLM header text used
across the repo so it appears in tensorrt_llm._torch.auto_deploy.shim.interface
(the module containing the shown imports and typing declarations).

In `@tests/integration/defs/accuracy/test_llm_api_autodeploy.py`:
- Around line 103-107: The chunked-prefill configuration sets
config["max_num_tokens"] = 512 which violates the requirement that
max_num_tokens must be strictly greater than max_batch_size (max_batch_size is
512 for flashinfer); update the code in the block guarded by
enable_chunked_prefill (where config dict is modified) to set
config["max_num_tokens"] to a value strictly greater than max_batch_size (e.g.,
max_batch_size + 1 or a constant like 513) so the constraint is satisfied.
- Around line 61-73: Annotate the mutable class attribute ATTN_BACKEND_CONFIGS
on the TestLlama3_1_8B class with typing.ClassVar to make it explicit that it is
a class-level shared constant; add the appropriate typing imports (e.g., from
typing import ClassVar, Dict, Any) and change the declaration to include a
ClassVar type annotation such as ATTN_BACKEND_CONFIGS: ClassVar[Dict[str,
Dict[str, Any]]] = {...} so the linter (RUF012) recognizes it as a class
variable.

In
`@tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_flashinfer_attention_op.py`:
- Around line 23-34: The function _attention_with_fp8_kv_cache currently
declares an unused parameter v; remove v from the function signature and update
any internal references or local variables accordingly (there are none inside),
and update all call sites/tests that pass v to stop supplying that argument (or
pass only q,k,kv_cache,k_scale,v_scale,prefill_seq_len,causal,mask in the new
order). Also apply the same removal to the other duplicate helper instance
mentioned (the similar function around the other occurrence) so both function
signatures and callers remain consistent.
🧹 Nitpick comments (10)
tensorrt_llm/_torch/auto_deploy/custom_ops/attention_interface.py (1)

14-14: Prefer namespace import for typing.

The current from typing import ... import violates the namespace-import guideline; consider switching to import typing as t and qualifying type names.

As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/transform/library/kvcache_transformers.py (1)

19-205: Use module namespace import for .kvcache.

Guidelines prefer maintaining module namespaces; consider importing the module and qualifying _InsertCachedOperator.

💡 Suggested change
-from .kvcache import _InsertCachedOperator
+from . import kvcache
@@
-class HFReplaceCachedAttn(_InsertCachedOperator):
+class HFReplaceCachedAttn(kvcache._InsertCachedOperator):
As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.
tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py (1)

19-19: Prefer module namespace import for triton_attention.

Switch to a module import and qualify _decode_attention/_prefill_attention to follow namespace guidelines.

As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/transform/library/hidden_states.py (1)

44-44: Prefer module namespace import for .kvcache.

Switch to from . import kvcache and qualify _InsertCachedOperator to follow namespace import guidance.

As per coding guidelines, always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tests/unittest/_torch/auto_deploy/unit/singlegpu/transformations/library/test_kv_cache.py (1)

295-297: Redundant import — KVPagedResourceHandler is already imported at module level.

KVPagedResourceHandler is already imported at line 11. This local import is unnecessary.

♻️ Proposed fix
     # Add a resource to verify initialize_resources is called
-    from tensorrt_llm._torch.auto_deploy.custom_ops.attention_interface import (
-        KVPagedResourceHandler,
-    )
-
     dummy_cached_interface.add_resource(
         "kv_cache_0", KVPagedResourceHandler(8, 64, dtype=torch.float16)
     )
tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_resource_handlers.py (1)

13-20: Keep module namespace in imports.

Prefer module-level imports and qualify usages rather than importing symbols directly.

As per coding guidelines: Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tests/unittest/_torch/auto_deploy/unit/singlegpu/custom_ops/test_flashinfer_attention_op.py (1)

6-6: Keep module namespace in imports.

Prefer module-level imports and qualify usages rather than importing symbols directly.

As per coding guidelines: Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tests/unittest/_torch/auto_deploy/unit/singlegpu/shim/test_cached_sequence_interface.py (1)

12-23: Keep module namespace in imports.

Prefer module-level imports and qualify usages rather than importing symbols directly.

As per coding guidelines: Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/custom_ops/flashinfer_attention.py (1)

15-25: Keep module namespace in imports.

Prefer module-level imports and qualify usages rather than importing symbols directly.

As per coding guidelines: Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

tensorrt_llm/_torch/auto_deploy/shim/interface.py (1)

13-24: Keep module namespace in imports.

Prefer module-level imports and qualify usages rather than importing symbols directly.

As per coding guidelines: Always maintain the namespace when importing Python modules, even if only one class or function from a module is used.

Comment thread tensorrt_llm/_torch/auto_deploy/custom_ops/mla.py
Comment thread tensorrt_llm/_torch/auto_deploy/shim/interface.py
Comment thread tests/integration/defs/accuracy/test_llm_api_autodeploy.py
Comment thread tests/integration/defs/accuracy/test_llm_api_autodeploy.py
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #34697 [ run ] completed with state SUCCESS. Commit: 3a387ce
/LLM/main/L0_MergeRequest_PR pipeline #26773 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

@lucaslie

lucaslie commented Feb 4, 2026

Copy link
Copy Markdown
Contributor Author

/bot skip --comment "All single-gpu and all AD multi-gpu tests are passing"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #34785 [ skip ] triggered by Bot. Commit: 3a387ce

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #34785 [ skip ] completed with state SUCCESS. Commit: 3a387ce
Skipping testing for commit 3a387ce

@lucaslie
lucaslie merged commit 925d911 into NVIDIA:main Feb 4, 2026
7 checks passed
SchumiDing pushed a commit to SchumiDing/TensorRT-LLM that referenced this pull request Feb 6, 2026
…VIDIA#11149)

Signed-off-by: Lucas Liebenwein <11156568+lucaslie@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.

[Feature]: AutoDeploy: KVCache Streamlined (HND layout, contiguous states, attention cleanup, docs)

5 participants