Mixture of Experts

mixture of experts (moe) — архитектура из множества «специалистов»

Раздел
Обучение
Сокращ.
MoE
Обновлено
11.08.26

Mixture of Experts (MoE) — архитектура нейросетей, где модель состоит не из одной плотной сети, а из набора «экспертов». Маршрутизатор выбирает для каждого токена только часть из них. Это позволяет увеличить общую ёмкость модели, не используя все её параметры при каждом вычислении, но усложняет обучение, распределённый запуск и работу с памятью.

Коротко

Коротко. Mixture of Experts (MoE) — архитектура, в которой часть обычных слоёв заменена набором экспертных подсетей. Для каждого токена маршрутизатор активирует лишь несколько экспертов. Поэтому общее число параметров может быть большим, а число параметров, участвующих в одном проходе, — заметно меньше. Это экономит часть вычислений, но не память и не инженерную сложность целиком.

Что это такое

Идея MoE простая: представьте больницу из 1000 врачей разных специальностей. Когда приходит пациент с переломом — приём ведёт травматолог, не вся больница. Когда сердечная проблема — кардиолог. Один специалист на одну задачу — но за счёт большого пула покрывается всё.

Так и MoE: вместо одной «универсальной» сети на 30 миллиардов параметров — 64 «эксперта» по 30 миллиардов каждый, плюс маленький «маршрутизатор», который на каждое слово выбирает 2 нужных. Модель на бумаге — 30 × 64 = ~2 триллиона параметров. На реальном запросе работает только 60 миллиардов (2 эксперта по 30B).

История:

  • 1991 — Robert Jacobs et al. вводят концепцию «adaptive mixture of local experts».
  • 2017 — Google «Outrageously Large Neural Networks» (Shazeer et al.) — первая большая sparse-MoE.
  • 2021 — Switch Transformer от Google: 1.6T параметров, рабочая.
  • 2023 — Mistral выкатывает Mixtral 8x7B (open-source, 47B total / 12.9B activated).
  • С середины 2020-х — MoE всё чаще встречается в крупных открытых и коммерческих семействах моделей.

Плотные и MoE-модели продолжают развиваться параллельно: выбор архитектуры зависит от масштаба, инфраструктуры и целей обучения.

Как это работает

Внутри transformer-слоя классический FFN-блок (Feed-Forward Network) заменяется на MoE-блок:

[input token]
       ↓
   [Router]   ← маленькая нейросеть, выбирает экспертов
       ↓
  выбрала: Expert_5 (вес 0.7) + Expert_23 (вес 0.3)
       ↓
[Expert_5] [Expert_23]   ← 2 из 64 активированы
   |              |
   ↓              ↓
   результат*0.7 + результат*0.3
       ↓
[output token]

Что важно:

  1. Sparsity. Только k экспертов из N активны (обычно k=2 из N=8-256).
  2. Routing decision. На каждый токен маршрутизатор сам решает, кто «справится». Это часть обучения — он учится распределять.
  3. Specialization. В обученной модели эксперты специализируются: один лучше отвечает на код, другой — на испанский, третий — на математику.
  4. Load balancing. Если все токены идут к одному эксперту — обучение ломается. Используется auxiliary loss на равномерное распределение.

Минусы MoE:

  • Memory. Нужно держать всех экспертов в RAM (или быстро подгружать) — для самообслуживания нужны кластеры.
  • Inference complexity. Routing разбивает batch на разные пути — инфраструктура сложнее.
  • Communication overhead. В распределённом обучении эксперты живут на разных GPU, нужна интенсивная межGPU-комм.
  • Instability. Обучение MoE капризнее, чем плотных моделей. Требует aux losses, careful initialization.

Пример на практике

Предположим, команда сравнивает плотную модель и MoE с похожим числом активных параметров. У MoE может быть больше общая ёмкость, но её веса занимают больше памяти, а маршрутизация усложняет распределённый инференс. Поэтому сравнение делают не по одной цифре параметров, а по качеству на своём наборе задач, задержке, пропускной способности и полной стоимости инфраструктуры.

Для знакомства с архитектурой можно запустить открытую MoE-модель:

# Mixtral 8x7B через HuggingFace + transformers
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "mistralai/Mixtral-8x7B-Instruct-v0.1",
    device_map="auto",
    torch_dtype=torch.float16
)
# Память и схема размещения зависят от точности весов и среды запуска

В ComfyUI MoE-модели работают через стандартные LLM-ноды (text-generation-webui интеграции). Для image-generation MoE тоже появляется (FLUX-MoE), но менее распространено.

С чем часто путают

  • MoE и Ensemble — ensemble: несколько разных моделей, голосуют. MoE: одна модель с разными «слоями» внутри. Ensemble требует prompt каждой модели, MoE — один прогон.
  • MoE и Multi-task — multi-task: одна сеть учит много задач. MoE: одна сеть с динамическим routing — может выглядеть как multi-task, но механика другая.
  • MoE и Fine-tuning по экспертам — некоторые думают, что эксперты MoE = специалисты по доменам. Это не так. Эксперты в обучении сами выбирают, в чём специализироваться, и часто это нечто странное (например, один эксперт = «начало предложения», другой = «после числа»).
  • Total params и Active params — MoE 671B (DeepSeek V3): 671 миллиардов параметров суммарно, но 37 миллиардов на токен активны. Цена/скорость = по active.
  • MoE и Grouped Query Attention — разные оптимизации. MoE — про FFN-блок. GQA — про attention-блок. Часто используются вместе.

Частые ошибки и заблуждения

  • «MoE всегда лучше плотных». Не всегда. Для маленьких моделей (≤30B) плотные часто конкурентны и проще в эксплуатации.
  • «Эксперты можно изолировать и использовать отдельно». Технически — нет. Эксперты обучены работать в системе с роутером. Без роутера они отдельно не выдают качества.
  • «MoE — это про latency». Плюс к latency может быть, но главный плюс — про training cost и quality на equal-active-params.
  • «MoE решает проблему compute». Снижает inference cost, но обучение всё равно дорогое; cluster-инфраструктура усложняется.
  • «Можно превратить любую модель в MoE». Есть техники upcycling (перекомпиляция плотной в MoE), но обычно дешевле обучить MoE с нуля.

Связанные термины

  • DeepSeek — V3 — крупнейшая open MoE.
  • Kimi — K2 — open MoE с 1T параметров.
  • LLM — общая категория, MoE — архитектурная техника внутри.
  • Quantization — комплементарная техника для запуска больших MoE.
  • Fine-tuning — MoE можно fine-tunить, но сложнее плотных.

Частые вопросы

Какие открытые MoE-модели бывают? MoE-варианты есть у нескольких семейств, включая Mixtral, DeepSeek и Qwen. Конкретные версии и лицензии меняются, поэтому список лучше уточнять в каталогах моделей и их официальных репозиториях.

Можно ли по поведению понять, что модель использует MoE? Нет. Архитектуру нельзя надёжно вывести из ответов модели. Если разработчик не раскрыл устройство системы, утверждения о числе экспертов и параметров остаются предположениями.

Как оценить оборудование для запуска MoE? Нужно учитывать общий размер весов, формат чисел, длину контекста, KV-cache и возможности offloading. Число активных параметров само по себе не показывает, поместится ли модель в память.

MoE можно дообучать? Да, если это поддерживают модель и инструменты. Такое обучение сложнее плотной модели из-за маршрутизации и балансировки экспертов; требования к памяти зависят от выбранного метода.

Все ли модели со временем станут MoE? Нет оснований считать это неизбежным. Плотные модели проще запускать и оптимизировать, а MoE полезен там, где дополнительная ёмкость оправдывает сложность инфраструктуры.

Главное

Mixture of Experts делит часть вычислений между экспертными подсетями и активирует для каждого токена лишь некоторые из них. Это увеличивает ёмкость модели без пропорционального роста вычислений на один токен. Компромисс — больший объём весов, сложная маршрутизация и повышенные требования к распределённой инфраструктуре. При сравнении с плотной моделью важны измерения на реальной задаче, а не только общее или активное число параметров.