From d2ca3002d93314a08bbddf9c6eb6ee78b1343407 Mon Sep 17 00:00:00 2001 From: Song Zhixin Date: Mon, 27 Jul 2026 23:31:36 +0800 Subject: [PATCH] [MRV2][Performance] Skip no-op FP32 logits materialization (#47711) Signed-off-by: jesse Signed-off-by: Song Zhixin Co-authored-by: Wentao Ye <44945378+yewentao256@users.noreply.github.com> Co-authored-by: Jee Jee Li --- vllm/v1/worker/gpu/sample/sampler.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/vllm/v1/worker/gpu/sample/sampler.py b/vllm/v1/worker/gpu/sample/sampler.py index e34e2acf37..3503b699f9 100644 --- a/vllm/v1/worker/gpu/sample/sampler.py +++ b/vllm/v1/worker/gpu/sample/sampler.py @@ -152,6 +152,9 @@ class Sampler: expanded_local_pos: torch.Tensor, skip_top_k_top_p: bool = False, ) -> torch.Tensor: + if not self._requires_logits_processing(idx_mapping_np): + return logits + # Copy logits to a new FP32 tensor. logits = torch.empty_like(logits, dtype=torch.float32).copy_(logits) @@ -194,6 +197,24 @@ class Sampler: logits, expanded_idx_mapping, idx_mapping_np ) + def _requires_logits_processing(self, idx_mapping_np: np.ndarray) -> bool: + if np.any(self.logit_bias_state.use_logit_bias[idx_mapping_np]): + return True + if np.any(self.penalties_state.use_penalty[idx_mapping_np]): + return True + if np.any(self.bad_words_state.num_bad_words.np[idx_mapping_np] > 0): + return True + + states = self.sampling_states + temperatures = states.temperature.np[idx_mapping_np] + if np.any((temperatures != 0.0) & (temperatures != 1.0)): + return True + if np.any(states.min_p.np[idx_mapping_np] != 0.0): + return True + if np.any(states.top_k.np[idx_mapping_np] != states.vocab_size): + return True + return bool(np.any(states.top_p.np[idx_mapping_np] != 1.0)) + def sample( self, logits: torch.Tensor,