From dac9aa46f52cdb48617a4b8a2ae6829ae10e27d4 Mon Sep 17 00:00:00 2001 From: muh-engine Date: Thu, 6 Aug 2026 01:19:51 +0000 Subject: [PATCH] [BUGFIX] vllm/worker/model_runner.py: fix max_decode_seq_len passed as max_encoder_seq_len MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POTENTIAL BUG FIX in BASE file: vllm/worker/model_runner.py line ~833 _get_cuda_graph_pad_size was called with: max_decode_seq_len=max_encoder_seq_len (WRONG) should be: max_decode_seq_len=max_decode_seq_len (FIXED) For decoder-only Qwen3.6, max_encoder_seq_len=0 always. This means CUDA graph capture check always saw max_decode_seq_len=0, potentially causing incorrect graph capture for long decode sequences (100K context > max_seq_len_to_capture=32768 should DISABLE graph, but with the bug it would see 0 ≤ 32768 and ENABLE graph incorrectly). CCCL insight from thrust/examples/bounding_box.cu: bbox compound reduce tracks lower_left.x/y and upper_right.x/y as INDEPENDENT dimensions. Mixing them (like setting min_y = max_x) would produce an incorrect bounding box. Same principle applies to max_decode_seq_len vs max_encoder_seq_len. CCCL file: thrust/examples/bounding_box.cu --- vllm/worker/model_runner.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vllm/worker/model_runner.py b/vllm/worker/model_runner.py index ee4442f7..34ea5ecd 100644 --- a/vllm/worker/model_runner.py +++ b/vllm/worker/model_runner.py @@ -830,9 +830,12 @@ class ModelInputForGPUBuilder(ModelRunnerInputBuilderBase[ModelInputForGPU]): for data in self.inter_data_list } + # CCCL bounding_box.cu: compound reduce must track each dimension + # independently (lower_left.x separate from lower_left.y). + # max_decode_seq_len and max_encoder_seq_len are independent stats. cuda_graph_pad_size = self._get_cuda_graph_pad_size( num_seqs=len(seq_lens), - max_decode_seq_len=max_encoder_seq_len, + max_decode_seq_len=max_decode_seq_len, max_encoder_seq_len=max_encoder_seq_len) batch_size = len(input_tokens)