celmoe-vp
celmoe-vp — доменно-агностичная библиотека для иерархических Mixture-of-Experts: явная маршрутизация по уровням, объединение представлений уровней (fusion) и составная целевая функция (global / per-level / bridge + лоссы экспертов).
PyPI:
pip install celmoe-vp
Импорт в Python:
import celmoe
Пакет не привязан к морфологии; это переиспользуемый слой оркестрации для приложений вроде morphoformer.
Документация по устройству пакета: ARCHITECTURE.md (MoE + иерархия + multi-task, схема модулей, mermaid-поток данных).
Что такое CELMoE здесь
CELMoE трактуется как три механизма в одном API:
| Компонент | Смысл |
|---|---|
| MoE | На каждом уровне — набор экспертов; для каждого элемента батча выбирается имя эксперта (список длины B на уровень). |
| Иерархия | Уровни в CELMoEConfig.levels выполняются по порядку; скрытое состояние передаётся «вниз» по стеку уровней. |
| Multi-task | Итоговый лосс собирается из нескольких областей: глобальные функции, функции на конкретном уровне, межуровневые (bridge) и тензоры из ExpertResult.losses. |
Вы реализуете содержимое экспертов и при необходимости подменяете модуль fusion.
Структура пакета (v2)
celmoe/
config/ # ExpertConfig, HierarchyLevelConfig, CELMoEConfig
core/ # типы, ExpertModule, LearnedFusion, HierarchicalCELMoE
loss/ # LossBundle, CELMoELossAPI
utils/ # routing_constant, validate_routing_length, merge_routing
Стабильный вход — корневой namespace:
from celmoe import CELMoEConfig, HierarchicalCELMoE, CELMoELossAPI, routing_constant
Точечные импорты (по желанию):
from celmoe.core.types import LevelRouting, ExpertContext
from celmoe.loss import LossBundle
Конфигурация
Публичный слой — dataclass-ы:
ExpertConfig— один эксперт:loss_weight,stop_gradient_from_parent, произвольныйmetadata.HierarchyLevelConfig— уровень (universal,family,language, …): словарь экспертов, опциональныйfallback_expert, флагenabled.CELMoEConfig—hidden_size, список уровней, параметры fusion (fusion_dropout,use_learned_fusionзарезервировано для совместимости; фактическая подмена fusion — через аргумент конструктора модели).
Контракт эксперта
Эксперты наследуют ExpertModule:
from celmoe import ExpertBatch, ExpertModule, ExpertResult
class MyExpert(ExpertModule):
def forward(self, batch: ExpertBatch) -> ExpertResult:
return ExpertResult(hidden=batch.hidden)
ExpertBatch: hidden, context, mask, state (строковые метки вроде уровня/эксперта).
ExpertResult: hidden, словарь losses (попадут в общий CELMoEOutput с префиксами), произвольный aux.
Иерархическое выполнение
HierarchicalCELMoE прогоняет включённые уровни, для каждого уровня применяет выбранных по маршруту экспертов, собирает лоссы уровня и передаёт скрытое состояние дальше. Затем все LevelOutput.hidden объединяются через fusion (по умолчанию LearnedFusion; можно передать свой nn.Module).
Формат маршрута — LevelRouting: dict[str, list[str]], каждый список длины батча:
{
"universal": ["core", "core", "core"],
"family": ["slavic", "romance", "slavic"],
"language": ["rus", "spa", "bul"],
}
Если на уровне ровно один эксперт или задан fallback_expert, недостающий ключ маршрута может быть заполнен автоматически (broadcast).
Вспомогательные функции:
from celmoe import routing_constant, validate_routing_length, merge_routing
routes = routing_constant("core", batch_size=8)
validate_routing_length("universal", routes, 8)
combined = merge_routing(existing_routing, {"new_level": ["a"] * 8})
Multi-loss / multi-task API
CELMoELossAPI регистрирует:
add_global— лосс от всегоCELMoEOutput;add_level— лосс отLevelOutputвыбранного уровня;add_bridge— лосс от пары родитель/дочерний уровень;compute— собираетLossBundle(взвешенная сумма, плюсas_dict()для логов).
Уже на этапе compute в бандл попадают лоссы из output.losses (эксперты) с scope "expert". У каждого LossTerm есть строка scope для фильтрации или отображения в логгерах.
Это позволяет комбинировать, например: регуляризацию родителя, специализацию ребёнка, согласование между уровнями — без жёсткой привязки к одной задаче внутри библиотеки.
Пример
from typing import Mapping
import torch
import torch.nn as nn
from celmoe import (
CELMoEConfig,
CELMoELossAPI,
ExpertBatch,
ExpertConfig,
ExpertModule,
ExpertResult,
HierarchicalCELMoE,
HierarchyLevelConfig,
)
class LinearExpert(ExpertModule):
def __init__(self, hidden_size: int) -> None:
super().__init__()
self.proj = nn.Linear(hidden_size, hidden_size)
def forward(self, batch: ExpertBatch) -> ExpertResult:
hidden = self.proj(batch.hidden)
return ExpertResult(hidden=hidden)
def build_expert(level_name: str, expert_name: str, metadata: Mapping[str, object]) -> ExpertModule:
del level_name, expert_name, metadata
return LinearExpert(hidden_size=256)
config = CELMoEConfig(
hidden_size=256,
levels=[
HierarchyLevelConfig(
name="parent",
experts={"core": ExpertConfig(name="core")},
fallback_expert="core",
),
HierarchyLevelConfig(
name="child",
experts={
"a": ExpertConfig(name="a", stop_gradient_from_parent=True),
"b": ExpertConfig(name="b", stop_gradient_from_parent=True),
},
),
],
)
model = HierarchicalCELMoE(config, expert_factory=build_expert)
hidden = torch.randn(4, 32, 256)
output = model(
hidden,
routing={
"parent": ["core"] * 4,
"child": ["a", "b", "a", "b"],
},
)
loss_api = CELMoELossAPI()
loss_api.add_global("l2", lambda out, targets, context: out.fused_hidden.pow(2).mean())
bundle = loss_api.compute(output)
print(bundle.total)
Основные типы данных
LevelOutput— результат одного уровня: скрытое состояние, маршрут, лоссы,aux.CELMoEOutput— все уровни,fused_hidden, агрегированные лоссы экспертов.LossTerm/LossBundle— пошаговая разложимость лосса и скаляры для метрик.
Изоляция градиента
stop_gradient_from_parent=True у ExpertConfig отключает градиент от входа уровня к выбранному эксперту (через detach входа). Полезно для поэтапного обучения и снижения интерференции между уровнями.
Что пакет намеренно не включает
- эмбеддинги и токенизацию;
- внутренности Transformer-блоков;
- загрузку данных, оптимизаторы, чекпоинты.
Это остаётся на стороне приложения; celmoe-vp — слой оркестрации MoE + иерархии + составного лосса.
Типизация
Пакет строго типизирован и поставляет py.typed для использования как независимого зависимого пакета.
Версия 2.0
В 2.0 изменена внутренняя раскладка модулей (config / core / loss / utils); публичный импорт from celmoe import ... сохранён и расширен (типы, LearnedFusion, утилиты маршрутизации). Подробности — в ARCHITECTURE.md.
Metadata
Release files for celmoe-vp 3.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| celmoe_vp-3.0.0.tar.gz | 15.9 kB | Without provenance | Details for celmoe_vp-3.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| celmoe_vp-3.0.0-py3-none-any.whl | Python 3 | none | any | Details for celmoe_vp-3.0.0-py3-none-any.whl |
Total release size: 31.0 kB
Release files / celmoe_vp-3.0.0.tar.gz
| Download URL | celmoe_vp-3.0.0.tar.gz |
|---|---|
| Size | 15.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b17fc548e9262c51db8ce774348b4ae1a50aeef86c5f6216a1f502384fd56777
|
|
BLAKE2b-256 checksum How to use checksums |
40d7fac00a63de02513e065f965488effe83882c5bdeb8fd75463c18c74b69a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / celmoe_vp-3.0.0-py3-none-any.whl
| Download URL | celmoe_vp-3.0.0-py3-none-any.whl |
|---|---|
| Size | 15.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
25b2c188854c22680ac356c3105fff3b2c68b6b659b71cb3e22aaeb4b79cc0b0
|
|
BLAKE2b-256 checksum How to use checksums |
ffba1599a90e4cf5e7204ea3eeda9e70cc7404a9838c4bd398b7b49b9fd45f67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Security for celmoe-vp 3.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.