deepinfer-moe-forward
deepinfer/deepinfer/model_executor/models/v4_modules/mlp.py · a679bb8 · L565–616 · 固定 commit 上游
这是固定版本源码的只读摘录;可在线阅读,也可通过上游链接查看原文件。
565 def forward(
566 self,
567 hidden_states: torch.Tensor | tuple[torch.Tensor, torch.Tensor],
568 hidden_states_bf16: torch.Tensor,
569 input_metadata: InputMetadata,
570 ) -> torch.Tensor:
571 if self.use_mega_moe:
572 return self.mega_moe_forward(hidden_states, hidden_states_bf16, input_metadata)
573
574 topk_idx, topk_weights = self.gate_forward(hidden_states_bf16, input_metadata)
575
576 try:
577 # Dispatch
578 event_overlap = self.dispatch(
579 hidden_states,
580 topk_idx,
581 topk_weights,
582 input_metadata,
583 None,
584 )
585 moe_in_hidden, _dispatched_topk_idx, dispatched_topk_weights, handle = event_overlap.current_stream_wait()
586
587 # MoE compute
588 with cuda_graph_timer.record(
589 "routed_experts",
590 enabled=(self.layer_idx == 1 and not input_metadata.is_prompt),
591 scale=eplb.current().num_moe_layers,
592 ):
593 moe_out_hidden = self.routed_experts_forward(
594 moe_in_hidden,
595 dispatched_topk_weights,
596 handle.psum_num_recv_tokens_per_expert,
597 expected_m=None,
598 )
599
600 # Combine
601 combine_pre_evt = self.ep_buffer.capture()
602 with limit_num_sms(envs.DEEPINFER_USERBUFFER_COMM_SMS, enabled=PLATFORM.is_gpu):
603 shared_out = self.shared_forward(hidden_states)
604 event_overlap = self.combine(
605 moe_out_hidden,
606 shared_out,
607 handle,
608 combine_pre_evt,
609 )
610 moe_combined_hidden, _combined_topk_weights = event_overlap.current_stream_wait()
611
612 except Exception:
613 logger.exception(f"[rank {PG.get_rank()}] Exception during MoE forward, topk_idx.shape = {topk_idx.shape}")
614 raise
615
616 return moe_combined_hidden