Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
cfcab7c
Add --parallel-warmup phase to replay benchmark
hnover-nv Apr 27, 2026
e6694fa
Fork checkpointing_state_update kernel and test (placeholder = today)
hnover-nv Apr 28, 2026
de30678
Trim heads_per_block tests: drop PDL parametrize, pin batch=8
hnover-nv Apr 28, 2026
1819cb4
Add --variant {replay,checkpointing} flag to benchmark
hnover-nv Apr 29, 2026
4dfd300
Print mismatch magnitude in checkpointing tests on assertion failure
hnover-nv Apr 29, 2026
8ff8e94
Rectangle CB factoring in checkpointing_state_update kernel
hnover-nv Apr 29, 2026
ed569d3
Track Mamba replay history window in cache manager
hnover-nv May 14, 2026
b4c53c5
Cache-write semantics: PNAT-aware writes + WRITE_CHECKPOINT/RECTANGLE…
hnover-nv Apr 29, 2026
a9dff37
Add computation of n_writes and the nwrite-partition metadata vector …
hnover-nv May 18, 2026
93bf1d5
Add int8/int16/fp8 quant state to checkpointing kernel + benchmark/te…
hnover-nv Apr 30, 2026
93f5d2a
Benchmark: --sr-modes RN,SR sweep param replaces --philox-rounding flag
hnover-nv Apr 30, 2026
f837935
rect_precompute opt B: pre-wait factor_dt × exp_diff via cb_scaled sc…
hnover-nv May 6, 2026
d2bcdc5
Fix _checkpointing_main_kernel: handle PNAT > T-1 when max_window > T
hnover-nv May 5, 2026
aeab6a7
rect_precompute opt C: vectorize per-head loop, keep combo (H,T,K) li…
hnover-nv May 6, 2026
7740397
Rectangle nowrite kernel + benchmark axes (--rectangle-for-nowrite, -…
hnover-nv May 4, 2026
7362767
checkpointing_precompute (replay) opt: vectorize loops 1+2 via (H,T,T…
hnover-nv May 6, 2026
39f0854
Add maindl + dlgrouped modes + PDL-out-of-main for dl-family chains
hnover-nv May 5, 2026
ea9ed6c
main kernels: vectorize HAS_Z output loop ((T, M) tile op)
hnover-nv May 6, 2026
cbebb65
Slot-perm dispatch: USE_PERM/REVERSE_PERM constexprs in dl-family ker…
hnover-nv May 7, 2026
96df458
rect: convention swap — new tokens at runtime [PNAT, PNAT+T) instead …
hnover-nv May 7, 2026
3d1e4c1
hardcode-sort: bench-side per-iter PNAT pre-sort (kernel unchanged) +…
hnover-nv May 7, 2026
a5311d0
test/bench: --max-window default 16 matches Nemotron-Super production
hnover-nv May 7, 2026
33a5d43
dl_write_only debug mode + EO regression isolation runs
hnover-nv May 7, 2026
bbcc22e
TMA state load/store toggles for rect/replay main kernels (backlog #17)
hnover-nv May 7, 2026
4bf337a
persistent_main: maindl pattern, n_writes/batch_total kernel args, ct…
hnover-nv May 7, 2026
f078fc7
SR randomness over-generation fix (backlog #19)
hnover-nv May 8, 2026
6d5a663
persistent_dynamic: single-launch persistent kernel with runtime per-…
hnover-nv May 8, 2026
3d7ee6f
cupti: in-process kernel timing for benchmark_replay_selective_state_…
hnover-nv May 8, 2026
ab17e86
merge: cupti timing + persistent kernels (with TMA refactor + bench p…
hnover-nv May 8, 2026
a1460de
persistent: cap launch grid at min(NUM_PERSISTENT, total_work)
hnover-nv May 11, 2026
f0e805b
bench + persistent kernel: scale compile-warmup parallelism
hnover-nv May 11, 2026
bef4981
bench: cache + grow-in-place batch-scaled tensors
hnover-nv May 12, 2026
658485b
bench: crash-safe JSONL incremental persistence + resume + per-main k…
hnover-nv May 12, 2026
5789041
bench: speed up mamba replay benchmark CUPTI parsing
hnover-nv May 12, 2026
a6604e5
bench: tune mamba replay benchmark host overhead
hnover-nv May 12, 2026
00d78f6
bench: defer mamba replay CUPTI parsing
hnover-nv May 12, 2026
fc0dce3
bench: compute compact CUPTI stats in parser process
hnover-nv May 12, 2026
ccdc799
bench: trim cuda graph capture host overhead
hnover-nv May 13, 2026
80e5710
bench: group mixed cuda graph replays
hnover-nv May 13, 2026
c69ea44
bench: reduce cuda graph pre-capture warmup
hnover-nv May 13, 2026
73a438a
bench: add mix-only replay benchmark mode
hnover-nv May 13, 2026
eb76214
bench: keep compact per-iter mix stats
hnover-nv May 13, 2026
25836d8
bench: keep CUPTI flush probe scratch helper
hnover-nv May 12, 2026
f5ccc28
bench: JSONL-canonical artifact + host-blind resume + cell-list mode
hnover-nv May 12, 2026
0abdb90
bench: compile-warmup CPS-grouping + cell-list direct enum + phase ma…
hnover-nv May 13, 2026
811f2cb
bench: iterate cell-list directly (O(|cells|), not O(cartesian))
hnover-nv May 15, 2026
8e91b93
bench: guard cell-list-direct iter on 'not warmup_only'
hnover-nv May 15, 2026
ac8ec9e
bench: compile-warmup uses per-cell outer in cell-list mode (no outer…
hnover-nv May 15, 2026
646c9a2
checkpointing: wire TMA load under IS_DYNAMIC=True + per-path descrip…
hnover-nv May 15, 2026
e9ead28
bench: retry CUPTI parser spawn with timeout + alive polling
hnover-nv May 15, 2026
be5046f
bench: add --mp-start-method forkserver option
hnover-nv May 15, 2026
588bcaf
mamba_checkpointing kernel: pack int8/int16 SR random bits + supporti…
hnover-nv May 16, 2026
42b1382
mamba_checkpointing: promote pd WC_IS_CONSTEXPR refactor to live kernel
hnover-nv May 18, 2026
6a8d3c4
mamba_checkpointing: _slim copies (kernel/test/bench) — persistent_dy…
hnover-nv May 18, 2026
0515114
mamba_checkpointing: fix dA_cumsum cross-step continuity in slim prec…
hnover-nv May 19, 2026
c578008
mamba_checkpointing/slim: wire split-form loop_stages/cta_per_sm in t…
hnover-nv May 19, 2026
11ed0b8
Merge slim Mamba replay kernel sources
hnover-nv May 19, 2026
d7c1e39
mamba replay benchmark: harden driver cell handling
hnover-nv May 19, 2026
4a5a398
mamba replay: fix rectangle precompute write-read race
hnover-nv May 19, 2026
da8f6e4
mamba replay: handle rectangle fallback and pad slots
hnover-nv May 20, 2026
5acc881
mamba replay: benchmark cache slot load knob
hnover-nv May 20, 2026
18a353e
mamba replay: specialize rectangle gather fallback
hnover-nv May 20, 2026
b319eac
mamba replay: remove pad-slot guard and hsort default
hnover-nv May 20, 2026
97f0b6d
mamba replay: add nowrite-first launch knob
hnover-nv May 20, 2026
f4b1060
mamba replay: double-buffer old_x to eliminate write-path race
hnover-nv May 20, 2026
6546272
mamba replay: double-buffer old_x cache allocation
hnover-nv May 20, 2026
2ed22dc
mamba replay: address review cleanup
hnover-nv May 20, 2026
c1d4c5a
mamba benchmark: restore FlashInfer replay baseline
hnover-nv May 20, 2026
92de174
mamba benchmark: model FlashInfer cache-slot indirection
hnover-nv May 20, 2026
ef75adf
mamba benchmark: improve default timing UX
hnover-nv May 20, 2026
d17b7fd
remove scratch kernel copies and do precommit fixes
hnover-nv May 20, 2026
f3f5be4
Update mamba replay default tunings
hnover-nv May 20, 2026
141006b
Merge main wheel target for mamba checkpointing
hnover-nv May 21, 2026
481f9d1
Merge current main for mamba checkpointing
hnover-nv May 22, 2026
6127ae3
[None][fix] stabilize Triton Mamba softplus
hnover-nv May 26, 2026
172cc08
Clean up mamba replay default tuning
hnover-nv May 22, 2026
7f5b6f3
Merge softmax fix and current head.
hnover-nv May 28, 2026
c99fcdf
Merge in head (has softmax already). Also fix PNAT size to int32.
hnover-nv May 29, 2026
e02ff1e
Merge current main for Mamba checkpointing
hnover-nv Jun 3, 2026
1c76c1f
Wire AutoDeploy checkpoint replay support
hnover-nv Jun 4, 2026
452a129
Merge current main into Mamba checkpointing
hnover-nv Jun 4, 2026
a2b12e8
Fix empty persistent-main PDL bridge
hnover-nv Jun 5, 2026
bbed7f2
Zero initialize Mamba base state caches
hnover-nv Jun 5, 2026
e623f4d
Keep Mamba dummy replay slots nowrite
hnover-nv Jun 5, 2026
68ab316
Add memory clobber to Mamba replay PDL wait
hnover-nv Jun 7, 2026
f4f6768
Hoist Mamba replay PDL wait and update tunings
hnover-nv Jun 9, 2026
dcf8e5a
Require explicit Mamba replay cache metadata
hnover-nv Jun 10, 2026
63f3033
Clean up Mamba checkpoint replay plumbing
hnover-nv Jun 11, 2026
349b5c6
Merge main into Mamba checkpoint replay
hnover-nv Jun 11, 2026
63ad831
Clean up Mamba replay seed handling and precompute tuning
hnover-nv Jun 12, 2026
c1365f5
Fix Mamba replay gating without spec decode
hnover-nv Jun 12, 2026
12a4642
Fix AutoDeploy replay resource validation
hnover-nv Jun 12, 2026
a90d5cc
Fix replay benchmark kwargs and int8 tunings
hnover-nv Jun 12, 2026
061ce29
Handle strided TMA state layout for replay
hnover-nv Jun 13, 2026
038cc1a
Merge main through 1283c6b for mamba checkpointing
hnover-nv Jun 13, 2026
3436b76
Update Mamba replay precompute tunings
hnover-nv Jun 15, 2026
cb8ce0e
Merge main through feca41c for mamba checkpointing
hnover-nv Jun 15, 2026
1990828
Refresh Mamba dummy mask under inference mode. The dummy mask refact…
hnover-nv Jun 16, 2026
80b1f7a
Keep AutoDeploy replay metadata standalone
hnover-nv Jun 16, 2026
d417759
Lower Ultra ADP MTP KV cache fraction
hnover-nv Jun 17, 2026
ca32494
remove benchmark and flashinfer imports for PR
hnover-nv May 21, 2026
4538e22
Merge branch 'main' into mamba_checkpointing_submit
hnover-nv Jun 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
from .._compat import KvCacheConfig, nvtx_range, prefer_pinned, str_dtype_to_torch
from ..utils.logger import ad_logger
from ..utils.node_utils import extract_op_args, get_op_schema
from .mamba.replay_metadata import REPLAY_WORK_ITEM_WIDTH

Constant = Union[int, float, str, None]

Expand Down Expand Up @@ -2204,10 +2205,9 @@ def from_base(


class ReplayOldXHandler(SpeculativeOnly, StateResourceHandler):
"""Per-layer old_x cache for the replay SSM kernel (single-buffered, bf16).
"""Per-layer old_x cache for the replay SSM kernel (double-buffered, bf16).

Shape: (max_batch, T, num_heads, head_dim) — T is determined by the manager's
spec_config (max_draft_len + 1), not by this handler. Acts as a type marker.
Shape: (max_batch, 2, replay_history_size, num_heads, head_dim).
Routes to MambaHybridCacheManager via get_replay_old_x(layer_idx).
"""

Expand Down Expand Up @@ -2235,7 +2235,7 @@ def __eq__(self, other) -> bool:
class ReplayOldBHandler(SpeculativeOnly, StateResourceHandler):
"""Per-layer old_B cache for the replay SSM kernel (double-buffered, bf16).

Shape: (max_batch, 2, T, n_groups, d_state) — T from manager.
Shape: (max_batch, 2, replay_history_size, n_groups, d_state).
Routes to MambaHybridCacheManager via get_replay_old_B(layer_idx).
"""

Expand Down Expand Up @@ -2263,7 +2263,7 @@ def __eq__(self, other) -> bool:
class ReplayOldDtHandler(SpeculativeOnly, StateResourceHandler):
"""Per-layer old_dt cache for the replay SSM kernel (double-buffered, fp32).

Shape: (max_batch, 2, num_heads, T) — T from manager.
Shape: (max_batch, 2, num_heads, replay_history_size).
Routes to MambaHybridCacheManager via get_replay_old_dt(layer_idx).
"""

Expand All @@ -2285,7 +2285,7 @@ def __eq__(self, other) -> bool:
class ReplayOldDAcumsumHandler(SpeculativeOnly, StateResourceHandler):
"""Per-layer old_dA_cumsum cache for the replay SSM kernel (double-buffered, fp32).

Shape: (max_batch, 2, num_heads, T) — T from manager.
Shape: (max_batch, 2, num_heads, replay_history_size).
Routes to MambaHybridCacheManager via get_replay_old_dA_cumsum(layer_idx).
"""

Expand Down Expand Up @@ -2346,6 +2346,35 @@ def __eq__(self, other) -> bool:
return isinstance(other, ReplayPrevNumAcceptedHandler)


class ReplayWorkItemsHandler(ResourceHandler):
Comment thread
hnover-nv marked this conversation as resolved.
"""Shared per-forward replay work items for the checkpoint replay SSM kernel.

Shape: (max_batch, REPLAY_WORK_ITEM_WIDTH) int32. Each row is
(position_in_decode_batch, cache_slot, prev_num_accepted_tokens, cache_buf_idx).
"""

def allocate(self, sequence_info) -> torch.Tensor:
return torch.empty(
sequence_info.max_num_state_slots,
REPLAY_WORK_ITEM_WIDTH,
device=sequence_info.device,
Comment thread
hnover-nv marked this conversation as resolved.
Comment thread
hnover-nv marked this conversation as resolved.
dtype=torch.int32,
)

def __eq__(self, other) -> bool:
return isinstance(other, ReplayWorkItemsHandler)


class ReplayNWritesHandler(ResourceHandler):
"""Shared single-element device tensor holding the replay write-count."""

def allocate(self, sequence_info) -> torch.Tensor:
return torch.empty(1, device=sequence_info.device, dtype=torch.int32)

def __eq__(self, other) -> bool:
return isinstance(other, ReplayNWritesHandler)


class IntermediateConvStateHandler(SpeculativeOnly, StateResourceHandler):
"""Intermediate conv state cache descriptor for speculative decoding.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from typing import List, Optional
from typing import List, Optional, cast

import torch
from flashinfer.mamba import selective_state_update as _flashinfer_ssm_update
Expand All @@ -31,11 +31,13 @@
IntermediateSSMStateHandler,
MHACallable,
ReplayCacheBufIdxHandler,
ReplayNWritesHandler,
ReplayOldBHandler,
ReplayOldDAcumsumHandler,
ReplayOldDtHandler,
ReplayOldXHandler,
ReplayPrevNumAcceptedHandler,
ReplayWorkItemsHandler,
ResourceHandlerDict,
)
from .mamba_backend_common import (
Expand Down Expand Up @@ -64,7 +66,7 @@ def _fi_align(t: torch.Tensor) -> torch.Tensor:
"ssm_state_cache",
"intermediate_ssm_state_cache",
# replay buffers: written in-place by the precompute and main kernels
# (double-buffered B/dt/dA_cumsum, single-buffered x); None in non-replay mode
# (double-buffered x/B/dt/dA_cumsum); None in non-replay mode
"replay_old_x",
"replay_old_b",
"replay_old_dt",
Expand Down Expand Up @@ -95,14 +97,22 @@ def _flashinfer_cached_ssm(
intermediate_ssm_state_cache: Optional[
torch.Tensor
], # [spec_state_size, max_draft_len+1, num_heads, head_dim, d_state]; None in replay mode
replay_old_x: Optional[torch.Tensor], # [max_batch, T, nheads, head_dim]; None in non-replay
replay_old_b: Optional[torch.Tensor], # [max_batch, 2, T, ngroups, dstate]; None in non-replay
replay_old_dt: Optional[torch.Tensor], # [max_batch, 2, nheads, T] fp32; None in non-replay
replay_old_x: Optional[
torch.Tensor
], # [max_batch, 2, history, nheads, head_dim]; None in non-replay
replay_old_b: Optional[
torch.Tensor
], # [max_batch, 2, history, ngroups, dstate]; None in non-replay
replay_old_dt: Optional[
torch.Tensor
], # [max_batch, 2, nheads, history] fp32; None in non-replay
replay_old_da_cumsum: Optional[
torch.Tensor
], # [max_batch, 2, nheads, T] fp32; None in non-replay
], # [max_batch, 2, nheads, history] fp32; None in non-replay
replay_cache_buf_idx: Optional[torch.Tensor], # [max_batch] int32; None in non-replay
replay_prev_num_accepted: Optional[torch.Tensor], # [max_batch] int32; None in non-replay
replay_work_items: Optional[torch.Tensor], # [max_batch, 4] int32; None in non-replay
replay_n_writes: Optional[torch.Tensor], # [1] int32; None in non-replay
# CONSTANTS
time_step_limit: List[float],
chunk_size: int,
Expand Down Expand Up @@ -198,6 +208,34 @@ def _flashinfer_cached_ssm(

use_replay = batch_info.is_use_replay()
if use_replay:
missing_replay_tensors = [
name
for name, tensor in (
("replay_old_x", replay_old_x),
("replay_old_b", replay_old_b),
("replay_old_dt", replay_old_dt),
("replay_old_da_cumsum", replay_old_da_cumsum),
("replay_cache_buf_idx", replay_cache_buf_idx),
("replay_prev_num_accepted", replay_prev_num_accepted),
("replay_work_items", replay_work_items),
("replay_n_writes", replay_n_writes),
)
if tensor is None
]
if missing_replay_tensors:
raise RuntimeError(
"flashinfer_cached_ssm replay path missing required tensors: "
f"{', '.join(missing_replay_tensors)}"
)
replay_old_x = cast(torch.Tensor, replay_old_x)
replay_old_b = cast(torch.Tensor, replay_old_b)
replay_old_dt = cast(torch.Tensor, replay_old_dt)
replay_old_da_cumsum = cast(torch.Tensor, replay_old_da_cumsum)
replay_cache_buf_idx = cast(torch.Tensor, replay_cache_buf_idx)
replay_prev_num_accepted = cast(torch.Tensor, replay_prev_num_accepted)
replay_work_items = cast(torch.Tensor, replay_work_items)
replay_n_writes = cast(torch.Tensor, replay_n_writes)

# Replay path: fast-forward SSM state via tl.dot on cached values.
# State is updated in-place; no disable_state_update needed.
# x_extend/B_extend/C_extend are non-contiguous views from the CUDA graph's
Expand All @@ -218,13 +256,20 @@ def _flashinfer_cached_ssm(
B_extend,
C_extend,
out=preallocated_ssm_out_e,
n_writes=replay_n_writes,
replay_work_items=replay_work_items[:num_extend],
D=D_full,
dt_bias=dt_bias_hp,
dt_softplus=True,
state_batch_indices=slot_idx_extend,
launch_with_pdl=True, # PDL chain: triton_causal_conv extend → precompute → main
)
else:
if intermediate_ssm_state_cache is None:
raise RuntimeError(
"flashinfer_cached_ssm non-replay extend branch requires "
"intermediate_ssm_state_cache"
)
if intermediate_ssm_state_cache.size(1) < tokens_per_extend:
raise RuntimeError(
"flashinfer_cached_ssm: intermediate_ssm_state_cache is too small "
Expand Down Expand Up @@ -342,14 +387,22 @@ def _flashinfer_cached_ssm_fake(
intermediate_ssm_state_cache: Optional[
torch.Tensor
], # [spec_state_size, max_draft_len+1, num_heads, head_dim, d_state]; None in replay mode
replay_old_x: Optional[torch.Tensor], # [max_batch, T, nheads, head_dim]; None in non-replay
replay_old_b: Optional[torch.Tensor], # [max_batch, 2, T, ngroups, dstate]; None in non-replay
replay_old_dt: Optional[torch.Tensor], # [max_batch, 2, nheads, T] fp32; None in non-replay
replay_old_x: Optional[
torch.Tensor
], # [max_batch, 2, history, nheads, head_dim]; None in non-replay
replay_old_b: Optional[
torch.Tensor
], # [max_batch, 2, history, ngroups, dstate]; None in non-replay
replay_old_dt: Optional[
torch.Tensor
], # [max_batch, 2, nheads, history] fp32; None in non-replay
replay_old_da_cumsum: Optional[
torch.Tensor
], # [max_batch, 2, nheads, T] fp32; None in non-replay
], # [max_batch, 2, nheads, history] fp32; None in non-replay
replay_cache_buf_idx: Optional[torch.Tensor], # [max_batch] int32; None in non-replay
replay_prev_num_accepted: Optional[torch.Tensor], # [max_batch] int32; None in non-replay
replay_work_items: Optional[torch.Tensor], # [max_batch, 4] int32; None in non-replay
replay_n_writes: Optional[torch.Tensor], # [1] int32; None in non-replay
# CONSTANTS
time_step_limit: List[float],
chunk_size: int,
Expand Down Expand Up @@ -400,7 +453,7 @@ def get_cache_initializers(

ssm_h = ret["ssm_state_cache"]

# All 7 optional caches are always registered positionally (None = unused in this mode).
# Optional replay/spec caches are registered positionally (None = unused in this mode).
# intermediate_ssm_state_cache: real in non-replay, None in replay.
# replay_old_*: real in replay mode (SM80+), None otherwise.
if use_replay:
Expand All @@ -418,6 +471,8 @@ def get_cache_initializers(
ret["replay_old_da_cumsum"] = ReplayOldDAcumsumHandler(num_heads=ssm_h.num_heads)
ret["replay_cache_buf_idx"] = ReplayCacheBufIdxHandler()
ret["replay_prev_num_accepted"] = ReplayPrevNumAcceptedHandler()
ret["replay_work_items"] = ReplayWorkItemsHandler()
ret["replay_n_writes"] = ReplayNWritesHandler()
else:
ret["intermediate_ssm_state_cache"] = IntermediateSSMStateHandler.from_base(ssm_h)
ret["replay_old_x"] = None
Expand All @@ -426,4 +481,6 @@ def get_cache_initializers(
ret["replay_old_da_cumsum"] = None
ret["replay_cache_buf_idx"] = None
ret["replay_prev_num_accepted"] = None
ret["replay_work_items"] = None
ret["replay_n_writes"] = None
return ret
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# 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.

"""Replay metadata layout shared by AutoDeploy Mamba descriptors."""

REPLAY_WORK_POSITION_IN_DECODE_BATCH = 0
REPLAY_WORK_CACHE_SLOT = 1
REPLAY_WORK_PNAT = 2
REPLAY_WORK_CACHE_BUF_IDX = 3
REPLAY_WORK_ITEM_WIDTH = 4
1 change: 1 addition & 0 deletions tensorrt_llm/_torch/auto_deploy/shim/ad_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -993,6 +993,7 @@ def _prepare_inputs(
_ungathered_new_lens=new_tokens_lens,
**extra_args,
)
self.cache_seq_interface.prepare_replay_metadata()

self.iter_states["num_ctx_requests"] = num_prefill
self.iter_states["num_ctx_tokens"] = num_prefill_tokens
Expand Down
Loading
Loading