| """Configuration for GLEAN-pruned OLMoE: variable-width, variable-count experts. |
| """ |
|
|
| from transformers.models.olmoe.configuration_olmoe import OlmoeConfig |
|
|
|
|
| class PrunedOlmoeConfig(OlmoeConfig): |
| """OlmoeConfig plus a per-(layer, expert) width table. |
| |
| ``expert_widths[l]`` lists the SwiGLU intermediate width of each surviving |
| expert in decoder layer ``l``, in expert order. Lists are ragged: layers |
| may keep different numbers of experts (deleted experts simply don't |
| appear — the router in layer ``l`` has ``len(expert_widths[l])`` rows), |
| and each width may differ (multiples of the GEMM block size, 128, for |
| variable-MegaBlocks execution). ``None`` means an unpruned model |
| (uniform ``num_experts`` × ``intermediate_size``). |
| |
| The inherited ``num_experts`` / ``intermediate_size`` keep their ORIGINAL |
| (pre-pruning) values for provenance; the width table is authoritative for |
| the built architecture. |
| """ |
|
|
| model_type = "pruned_olmoe" |
|
|
| def __init__(self, expert_widths: list[list[int]] | None = None, **kwargs): |
| super().__init__(**kwargs) |
| self.expert_widths = expert_widths |
|
|