from diffulex.moe.config import ( get_mlp_only_layers, get_moe_intermediate_size, get_num_experts, get_num_experts_per_tok, get_norm_topk_prob, is_moe_layer, ) from diffulex.distributed.parallel_state import fetch_parallel_state def build_mlp_or_moe(config, layer_idx: int, dense_factory): """Build a dense MLP or MoE block according to the config.""" if is_moe_layer(config, layer_idx): from diffulex.moe.layer import build_moe_block parallel_state = fetch_parallel_state() if parallel_state.is_ep_enabled(): return build_moe_block("ep", config) if parallel_state.is_tp_enabled(): return build_moe_block("tp", config) return build_moe_block("naive", config) return dense_factory() def __getattr__(name: str): if name in ("FusedMoE", "SparseMoEBlock"): from diffulex.moe.layer import FusedMoE return FusedMoE if name == "build_moe_block": from diffulex.moe.layer import build_moe_block return build_moe_block if name in ("DispatcherOutput", "TokenDispatcher", "build_token_dispatcher"): from diffulex.moe.dispatcher import DispatcherOutput, TokenDispatcher, build_token_dispatcher return { "DispatcherOutput": DispatcherOutput, "TokenDispatcher": TokenDispatcher, "build_token_dispatcher": build_token_dispatcher, }[name] if name == "DeepEPDispatcher": from diffulex.moe.dispatcher.deepep_dispatcher import DeepEPDispatcher return DeepEPDispatcher if name == "NaiveA2ADispatcher": from diffulex.moe.dispatcher.naive_dispatcher import NaiveA2ADispatcher return NaiveA2ADispatcher if name == "DeepEPMode": from diffulex.moe.mode import DeepEPMode return DeepEPMode if name in ("DispatchMetadata", "DeepEPDispatchMetadata", "DispatcherStage", "ExpertExecutionMetadata", "RouterMetadata"): from diffulex.moe.metadata import ( DeepEPDispatchMetadata, DispatchMetadata, DispatcherStage, ExpertExecutionMetadata, RouterMetadata, ) return { "DeepEPDispatchMetadata": DeepEPDispatchMetadata, "DispatchMetadata": DispatchMetadata, "DispatcherStage": DispatcherStage, "ExpertExecutionMetadata": ExpertExecutionMetadata, "RouterMetadata": RouterMetadata, }[name] raise AttributeError(name) __all__ = [ "FusedMoE", "SparseMoEBlock", "DeepEPDispatchMetadata", "DispatchMetadata", "DispatcherStage", "DeepEPDispatcher", "DeepEPMode", "DispatcherOutput", "ExpertExecutionMetadata", "NaiveA2ADispatcher", "RouterMetadata", "TokenDispatcher", "build_token_dispatcher", "build_mlp_or_moe", "get_mlp_only_layers", "get_moe_intermediate_size", "get_num_experts", "get_num_experts_per_tok", "get_norm_topk_prob", "is_moe_layer", ]