Repository navigation
[Misc]feat: adapt to vLLM main (ba94a3b9) #10807
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1 @@ | ||
| 967c5c3bc38891f4465d3f4e99917ed837bb3833 | ||
| dc68bd8c4199b00631fe71eb37313f406cc66ac1 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,7 +19,10 @@ | |
| import torch | ||
| from vllm.distributed import get_dp_group, get_ep_group, get_tp_group | ||
| from vllm.model_executor.layers.fused_moe.config import FusedMoEConfig | ||
| from vllm.model_executor.layers.fused_moe.layer import FusedMoE, UnquantizedFusedMoEMethod | ||
| from vllm.model_executor.layers.fused_moe.routed_experts import RoutedExperts | ||
| from vllm.model_executor.layers.fused_moe.unquantized_fused_moe_method import ( | ||
| UnquantizedFusedMoEMethod, | ||
| ) | ||
|
|
||
| from vllm_ascend.ascend_forward_context import _EXTRA_CTX, MoECommType | ||
| from vllm_ascend.ops.fused_moe.experts_selector import zero_experts_compute | ||
|
|
@@ -126,35 +129,72 @@ def apply( | |
| return final_hidden_states | ||
|
|
||
|
|
||
| class AscendFusedMoE310(FusedMoE): | ||
| def __init__(self, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
|
|
||
| self._routed_input_transform = kwargs.get("routed_input_transform") | ||
| self._shared_experts = kwargs.get("shared_experts") | ||
| self.global_num_experts = kwargs["num_experts"] | ||
| class AscendFusedMoE310(RoutedExperts): | ||
| def __init__( | ||
| self, | ||
| layer_name: str, | ||
| params_dtype: torch.dtype, | ||
| moe_config: FusedMoEConfig, | ||
| quant_config, | ||
| expert_map_manager, | ||
| expert_mapping=None, | ||
| renormalize=True, | ||
| use_grouped_topk=False, | ||
| num_expert_group=None, | ||
| topk_group=None, | ||
| custom_routing_function=None, | ||
| scoring_func="softmax", | ||
| routed_scaling_factor=1.0, | ||
| swiglu_limit=None, | ||
| e_score_correction_bias=None, | ||
| apply_router_weight_on_input=False, | ||
| # Extra Ascend-specific kwargs | ||
| gate=None, | ||
| shared_experts=None, | ||
| shared_expert_gate=None, | ||
| routed_input_transform=None, | ||
| routed_output_transform=None, | ||
| **kwargs, | ||
| ): | ||
| super().__init__( | ||
| layer_name=layer_name, | ||
| params_dtype=params_dtype, | ||
| moe_config=moe_config, | ||
| quant_config=quant_config, | ||
| expert_map_manager=expert_map_manager, | ||
| expert_mapping=expert_mapping, | ||
| renormalize=renormalize, | ||
| use_grouped_topk=use_grouped_topk, | ||
| num_expert_group=num_expert_group, | ||
| topk_group=topk_group, | ||
| custom_routing_function=custom_routing_function, | ||
| scoring_func=scoring_func, | ||
| routed_scaling_factor=routed_scaling_factor, | ||
| swiglu_limit=swiglu_limit, | ||
| e_score_correction_bias=e_score_correction_bias, | ||
| apply_router_weight_on_input=apply_router_weight_on_input, | ||
| ) | ||
|
|
||
| if self.quant_config is None: | ||
| self.quant_method = AscendUnquantizedFusedMoEMethod310(self.moe_config) | ||
| else: | ||
| self.quant_method = self.quant_config.get_quant_method(self, self.layer_name) | ||
| self._routed_input_transform = routed_input_transform | ||
| self._shared_experts = shared_experts | ||
| self.global_num_experts = self.moe_config.num_experts | ||
|
|
||
| # Replace quant_method with Ascend 310P version | ||
| assert self.quant_method is not None | ||
| # Keep base_quant_method aligned with the Ascend-replaced quant_method | ||
| # so FusedMoE.maybe_init_modular_kernel doesn't dispatch into the | ||
| # upstream UnquantizedFusedMoEMethod.maybe_make_prepare_finalize. | ||
| self.base_quant_method = self.quant_method | ||
|
|
||
| self.moe_config.tp_group = get_tp_group() | ||
| self.moe_config.dp_group = get_dp_group() | ||
| self.moe_config.ep_group = get_ep_group() | ||
| self.moe_config.supports_eplb = False | ||
|
|
||
| # init moe | ||
| self.global_expert_map = None | ||
| self.local_expert_map = None | ||
| if self.moe_config.ep_size > 1: | ||
| raise RuntimeError("Expert Parallel is not supported on 310P. Please remove --enable-expert-parallel.") | ||
| raise RuntimeError( | ||
| "Expert Parallel is not supported on 310P. " | ||
| "Please remove --enable-expert-parallel." | ||
| ) | ||
| self.local_num_experts = self.global_num_experts | ||
|
|
||
| self.moe_config.num_experts = self.global_num_experts | ||
|
|
@@ -176,22 +216,57 @@ def __init__(self, *args, **kwargs): | |
|
|
||
| from vllm_ascend.ops.fused_moe.fused_moe import AscendMoERunner | ||
|
|
||
| self.runner = AscendMoERunner( | ||
| self.layer_name, | ||
| self.moe_config, | ||
| self.router, | ||
| self._routed_input_transform, | ||
| kwargs.pop("gate", None), | ||
| kwargs.pop("shared_experts", None), | ||
| self.quant_method, | ||
| self.vllm_config.parallel_config.enable_dbo, | ||
| # Store runner reference for factory to optionally use | ||
| self._runner = AscendMoERunner( | ||
| layer_name=self.layer_name, | ||
| moe_config=self.moe_config, | ||
| router=None, # router is set by factory | ||
| routed_experts=self, | ||
| enable_dbo=False, | ||
| gate=gate, | ||
| shared_experts=shared_experts, | ||
| routed_input_transform=routed_input_transform, | ||
| ) | ||
|
|
||
| @property | ||
| def is_internal_router(self) -> bool: | ||
| # 310P Ascend path expects router logits from the model forward path. | ||
| return False | ||
|
Comment on lines
231
to
234
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unlike AscendFusedMoE, AscendFusedMoE310 is missing the forward method override. Legacy callers that still call forward() directly on the routed experts layer instead of the runner on 310P will bypass the custom _runner / forward_impl path or fail.\n\nWe should add the forward method override to AscendFusedMoE310 to match AscendFusedMoE. @property\n def is_internal_router(self) -> bool:\n # 310P Ascend path expects router logits from the model forward path.\n return False\n\n def forward(\n self,\n hidden_states: torch.Tensor,\n router_logits: torch.Tensor,\n ) -> torch.Tensor | tuple[torch.Tensor, torch.Tensor]:\n if hasattr(self, \"_runner\"):\n return self._runner.forward(hidden_states, router_logits)\n self._ensure_moe_quant_config_init()\n return self.forward_impl(hidden_states, router_logits) |
||
|
|
||
| def _get_quant_method( | ||
| self, | ||
| prefix: str, | ||
| quant_config, | ||
| moe_config: FusedMoEConfig, | ||
| ): | ||
| if quant_config is None: | ||
| return AscendUnquantizedFusedMoEMethod310(moe_config) | ||
| else: | ||
| return quant_config.get_quant_method(self, prefix) | ||
|
|
||
| @property | ||
| def tp_size(self): | ||
| return self.moe_config.tp_size | ||
|
|
||
| @property | ||
| def ep_size(self): | ||
| return self.moe_config.moe_parallel_config.ep_size | ||
|
|
||
| @property | ||
| def tp_rank(self): | ||
| return self.moe_config.tp_rank | ||
|
|
||
| @property | ||
| def ep_rank(self): | ||
| return self.moe_config.moe_parallel_config.ep_rank | ||
|
|
||
| @property | ||
| def use_ep(self) -> bool: | ||
| return self.moe_config.moe_parallel_config.use_ep | ||
|
|
||
| def ensure_moe_quant_config_init(self): | ||
| return self._ensure_moe_quant_config_init() | ||
|
|
||
| def init_experts_map(self, moe_config): | ||
| """ | ||
| Initialize expert mapping for MoE (Mixture of Experts) model. | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
self.vllm_config is not initialized in AscendFusedMoE310.init (unlike AscendFusedMoE which retrieves it via get_current_vllm_config()). Since RoutedExperts.init does not set self.vllm_config, any downstream access to self.vllm_config on 310P will raise an AttributeError.\n\nWe should initialize self.vllm_config using get_current_vllm_config().