Unverified Commit bd6028d6 authored by Michael Goin's avatar Michael Goin Committed by GitHub
Browse files

Optimized topk for topk=1 (Llama-4) (#16512)


Signed-off-by: default avatarmgoin <mgoin64@gmail.com>
parent 802329de
...@@ -37,7 +37,7 @@ from vllm.model_executor.layers.rotary_embedding import get_rope ...@@ -37,7 +37,7 @@ from vllm.model_executor.layers.rotary_embedding import get_rope
from vllm.model_executor.model_loader.weight_utils import default_weight_loader from vllm.model_executor.model_loader.weight_utils import default_weight_loader
from .llama import LlamaForCausalLM, LlamaMLP, LlamaModel from .llama import LlamaForCausalLM, LlamaMLP, LlamaModel
from .utils import (AutoWeightsLoader, extract_layer_index, from .utils import (AutoWeightsLoader, extract_layer_index, fast_topk,
is_pp_missing_parameter) is_pp_missing_parameter)
...@@ -50,7 +50,7 @@ class Llama4MoE(nn.Module): ...@@ -50,7 +50,7 @@ class Llama4MoE(nn.Module):
topk: int, topk: int,
renormalize: bool, renormalize: bool,
) -> Tuple[torch.Tensor, torch.Tensor]: ) -> Tuple[torch.Tensor, torch.Tensor]:
router_scores, router_indices = torch.topk(gating_output, topk, dim=-1) router_scores, router_indices = fast_topk(gating_output, topk, dim=-1)
router_scores = torch.sigmoid(router_scores.float()).to( router_scores = torch.sigmoid(router_scores.float()).to(
hidden_states.dtype) hidden_states.dtype)
return (router_scores, router_indices.to(torch.int32)) return (router_scores, router_indices.to(torch.int32))
......
...@@ -703,3 +703,12 @@ def cast_overflow_tensors( ...@@ -703,3 +703,12 @@ def cast_overflow_tensors(
clamp_value = torch.finfo(tensors.dtype).max - offset clamp_value = torch.finfo(tensors.dtype).max - offset
tensors = torch.clamp(tensors, min=-clamp_value, max=clamp_value) tensors = torch.clamp(tensors, min=-clamp_value, max=clamp_value)
return tensors return tensors
def fast_topk(values, topk, dim):
if topk == 1:
# Use max along the specified dimension to get both value and index
return torch.max(values, dim=dim, keepdim=True)
else:
# Use topk for efficiency with larger k values
return torch.topk(values, topk, dim=dim)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment