Enable trtllm-gen BF16 MoE for MTP (#24260)

Co-authored-by: b8zhong <b8zhong@users.noreply.github.com>
This commit is contained in:
Brayden Zhong
2026-05-09 03:14:17 -07:00
committed by GitHub
co-authored by b8zhong
parent f1a9a455e0
commit f4b7e73699
2 changed files with 10 additions and 21 deletions
@@ -1020,9 +1020,11 @@ def fused_experts_none_to_flashinfer_trtllm_bf16(
"Please check flashinfer version to use bf16 with flashinfer_trtllm backend." "Please check flashinfer version to use bf16 with flashinfer_trtllm backend."
) from e ) from e
assert ( _SUPPORTED_BF16_ACTIVATIONS = {"silu", "relu2"}
runner_config.activation == "silu" assert runner_config.activation in _SUPPORTED_BF16_ACTIVATIONS, (
), "Only silu is supported for flashinfer trtllm moe" f"Only {_SUPPORTED_BF16_ACTIVATIONS} are supported for flashinfer trtllm bf16 moe, "
f"got '{runner_config.activation}'."
)
if not use_routed_topk: if not use_routed_topk:
assert ( assert (
dispatch_output.topk_output.topk_config.renormalize dispatch_output.topk_output.topk_config.renormalize
@@ -1030,9 +1032,7 @@ def fused_experts_none_to_flashinfer_trtllm_bf16(
assert ( assert (
runner_config.num_fused_shared_experts == 0 runner_config.num_fused_shared_experts == 0
), "Fused shared experts are not supported for flashinfer trtllm moe" ), "Fused shared experts are not supported for flashinfer trtllm moe"
assert ( activation_type = get_activation_type(runner_config.activation)
runner_config.is_gated
), "Only gated MoEs are supported for flashinfer trtllm moe"
hidden_states = dispatch_output.hidden_states hidden_states = dispatch_output.hidden_states
topk_output = dispatch_output.topk_output topk_output = dispatch_output.topk_output
@@ -1072,6 +1072,7 @@ def fused_experts_none_to_flashinfer_trtllm_bf16(
else 1.0 else 1.0
), ),
tune_max_num_tokens=next_power_of_2(hidden_states.shape[0]), tune_max_num_tokens=next_power_of_2(hidden_states.shape[0]),
activation_type=activation_type,
) )
else: else:
assert TopKOutputChecker.format_is_bypassed(topk_output) assert TopKOutputChecker.format_is_bypassed(topk_output)
@@ -1094,6 +1095,7 @@ def fused_experts_none_to_flashinfer_trtllm_bf16(
routing_method_type=runner_config.routing_method_type, routing_method_type=runner_config.routing_method_type,
routed_scaling_factor=runner_config.routed_scaling_factor, routed_scaling_factor=runner_config.routed_scaling_factor,
tune_max_num_tokens=next_power_of_2(hidden_states.shape[0]), tune_max_num_tokens=next_power_of_2(hidden_states.shape[0]),
activation_type=activation_type,
) )
return StandardCombineInput(hidden_states=final_hidden_states) return StandardCombineInput(hidden_states=final_hidden_states)
+2 -15
View File
@@ -1894,6 +1894,7 @@ class ServerArgs:
self.quantization self.quantization
in ["fp8", "modelopt_fp8", "modelopt_fp4", "modelopt_mixed"] in ["fp8", "modelopt_fp8", "modelopt_fp4", "modelopt_mixed"]
or is_kimi_k2_k25_thinking_int4 or is_kimi_k2_k25_thinking_int4
or self.quantization is None
) )
): ):
self.moe_runner_backend = "flashinfer_trtllm" self.moe_runner_backend = "flashinfer_trtllm"
@@ -3333,22 +3334,8 @@ class ServerArgs:
): ):
self.speculative_draft_model_revision = "main" self.speculative_draft_model_revision = "main"
# FlashInfer trtllm moe bf16 only support RenormalizeNaive routing method and Deepseek routing method
# It is hard to tell the routing method in draft model, and the moe layer in draft model is not the bottleneck among
# end to end, so we just avoid using trtllm_moe for speculative decoding.
from sglang.srt.layers.moe.utils import MoeRunnerBackend
if self.speculative_moe_runner_backend is None: if self.speculative_moe_runner_backend is None:
self.speculative_moe_runner_backend = ( self.speculative_moe_runner_backend = self.moe_runner_backend
"auto"
if self.moe_runner_backend
in ["flashinfer_trtllm", "flashinfer_trtllm_routed"]
else self.moe_runner_backend
)
else:
assert not MoeRunnerBackend(
self.speculative_moe_runner_backend
).is_flashinfer_trtllm(), "Currently speculative MoE runner backend doesn't support flashinfer_trtllm, please use triton or auto backend for speculative moe runner instead."
if self.speculative_algorithm is not None: if self.speculative_algorithm is not None:
self.speculative_algorithm = self.speculative_algorithm.upper() self.speculative_algorithm = self.speculative_algorithm.upper()