Download reference/code/Diffulex-mbd-lms/diffulex/moe/metadata.py from Ouzhang/hku_diffusion_dllm: direct link, hf CLI and curl.
- Browser
- Download file 4.54 kB
-
https://huggingface.co/Ouzhang/hku_diffusion_dllm/resolve/main/reference/code/Diffulex-mbd-lms/diffulex/moe/metadata.py
- Command line
-
hf download hf://Ouzhang/hku_diffusion_dllm/reference/code/Diffulex-mbd-lms/diffulex/moe/metadata.py
-
curl -L -o metadata.py https://huggingface.co/Ouzhang/hku_diffusion_dllm/resolve/main/reference/code/Diffulex-mbd-lms/diffulex/moe/metadata.py
4.54 kB
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from enum import Enum, auto | |
| import torch | |
| from diffulex.moe.topk.output import TopKOutput | |
| class RouterMetadata: | |
| router_logits: torch.Tensor | |
| topk_ids: torch.Tensor | |
| topk_weights: torch.Tensor | |
| def empty( | |
| cls, | |
| hidden_states: torch.Tensor, | |
| *, | |
| num_experts: int, | |
| top_k: int, | |
| ) -> "RouterMetadata": | |
| """Empty router output for idle/local-empty ranks in EP collectives.""" | |
| return cls( | |
| router_logits=hidden_states.new_empty((0, num_experts)), | |
| topk_ids=torch.full( | |
| (0, top_k), | |
| -1, | |
| device=hidden_states.device, | |
| dtype=torch.int32, | |
| ), | |
| topk_weights=torch.empty( | |
| (0, top_k), | |
| device=hidden_states.device, | |
| dtype=hidden_states.dtype, | |
| ), | |
| ) | |
| def from_topk_output(cls, topk_output: TopKOutput) -> "RouterMetadata": | |
| return cls( | |
| router_logits=topk_output.router_logits, | |
| topk_ids=topk_output.ids, | |
| topk_weights=topk_output.weights, | |
| ) | |
| class DispatcherStage(Enum): | |
| INITIAL = auto() | |
| AFTER_DISPATCH_A = auto() | |
| AFTER_DISPATCH_B = auto() | |
| AFTER_COMBINE_A = auto() | |
| class DispatchMetadata: | |
| num_tokens: int | |
| hidden_size: int | |
| dtype: torch.dtype | |
| device: torch.device | |
| send_splits: list[int] | |
| recv_splits: list[int] | |
| recv_hidden_states: torch.Tensor | |
| recv_local_expert: torch.Tensor | |
| recv_token_indices: torch.Tensor | |
| recv_weights: torch.Tensor | |
| total_recv_slots: int | |
| active_dispatch: bool = True | |
| num_local_tokens: int | None = None | |
| local_token_indices: torch.Tensor | None = None | |
| class ExpertExecutionMetadata: | |
| packed_token_ids: torch.Tensor | |
| packed_local_expert_ids: torch.Tensor | |
| packed_weights: torch.Tensor | |
| num_slots: int | |
| seg_indptr: torch.Tensor | None = None | |
| num_recv_tokens_per_expert: torch.Tensor | None = None | |
| sorted_slot_ids: torch.Tensor | None = None | |
| expert_block_ids: torch.Tensor | None = None | |
| num_tokens_post_padded: int | None = None | |
| disable_aligned_metadata: bool = False | |
| class DeepEPDispatchMetadata(DispatchMetadata): | |
| src2dst: torch.Tensor | None = None | |
| reorder_indices: torch.Tensor | None = None | |
| reordered_token_indices: torch.Tensor | None = None | |
| reordered_local_expert_ids: torch.Tensor | None = None | |
| seg_indptr: torch.Tensor | None = None | |
| num_recv_tokens_per_expert: torch.Tensor | None = None | |
| native_handle: object | None = None | |
| native_recv_num_tokens: int | None = None | |
| native_recv_topk_ids: torch.Tensor | None = None | |
| native_recv_topk_weights: torch.Tensor | None = None | |
| low_latency: bool = False | |
| low_latency_handle: object | None = None | |
| low_latency_topk_ids: torch.Tensor | None = None | |
| low_latency_topk_weights: torch.Tensor | None = None | |
| low_latency_recv_count: torch.Tensor | None = None | |
| low_latency_capacity: int | None = None | |
| def to_expert_execution_metadata(self) -> ExpertExecutionMetadata: | |
| recv_local_expert = ( | |
| self.reordered_local_expert_ids | |
| if self.reordered_local_expert_ids is not None | |
| else self.recv_local_expert | |
| ) | |
| if recv_local_expert is None: | |
| raise ValueError("DeepEPDispatchMetadata is missing recv_local_expert information.") | |
| recv_weights = self.recv_weights | |
| if recv_weights is None: | |
| raise ValueError("DeepEPDispatchMetadata is missing recv_weights.") | |
| num_slots = int(recv_local_expert.numel()) | |
| packed_token_ids = torch.arange( | |
| num_slots, | |
| device=recv_local_expert.device, | |
| dtype=torch.int32, | |
| ) | |
| return ExpertExecutionMetadata( | |
| packed_token_ids=packed_token_ids, | |
| packed_local_expert_ids=recv_local_expert.to(torch.int32).contiguous(), | |
| packed_weights=recv_weights.contiguous(), | |
| num_slots=num_slots, | |
| seg_indptr=self.seg_indptr, | |
| num_recv_tokens_per_expert=self.num_recv_tokens_per_expert, | |
| disable_aligned_metadata=self.low_latency, | |
| ) | |
| __all__ = [ | |
| "DispatchMetadata", | |
| "DeepEPDispatchMetadata", | |
| "DispatcherStage", | |
| "ExpertExecutionMetadata", | |
| "RouterMetadata", | |
| ] | |