Технологии

Модели MoE: почему активных параметров меньше чем заявлено

В названии модели сто миллиардов параметров, а отвечает она быстрее четырнадцатимиллиардной. Разбираем архитектуру смеси экспертов и её следствия для памяти.

Вы привыкли к простому правилу: больше параметров — больше памяти и медленнее ответ. Правило работает годами и позволяет отсеивать модели, не читая описания. Потом вам попадается модель, в названии которой стоит число вроде ста миллиардов, и оказывается, что отвечает она быстрее четырнадцатимиллиардной, которая у вас крутится. При этом в видеопамять она не влезает даже близко.

Оба наблюдения верны одновременно, и оба следуют из одной архитектурной особенности. Модель построена как смесь экспертов (mixture of experts, MoE), и в ней число параметров, которое стоит в названии, и число параметров, которое реально считается на каждый токен, — это два разных числа.

#Короткий ответ

В MoE-модели каждый слой содержит несколько параллельных блоков-«экспертов», но на обработку одного токена выбираются не все, а один-два. Веса всех экспертов обязаны лежать в памяти, потому что заранее неизвестно, какой понадобится следующему токену, — а считается только выбранная часть. Отсюда прямое следствие: память определяется общим числом параметров, скорость — числом активных. Плотная модель, где все параметры участвуют в каждом токене, — это частный случай, у которого оба числа совпадают.

#Как токен проходит через маршрутизацию

Схема прохождения одного токена через один MoE-слой, по шагам.

  1. Токен приходит в слой в виде вектора, уже прошедшего механизм внимания. Механизм внимания в большинстве архитектур общий и в разделение на экспертов не входит.
  2. Небольшая обучаемая сеть — маршрутизатор (router) — получает этот вектор и выдаёт оценку для каждого эксперта слоя.
  3. Из оценок выбирается верхушка: чаще всего один или два эксперта с наибольшим весом. Число выбираемых экспертов — параметр архитектуры, обозначается как top-k.
  4. Вектор считается только через выбранных экспертов. Веса остальных в этом такте не читаются и не умножаются.
  5. Выходы выбранных экспертов складываются с коэффициентами, которые дал маршрутизатор.
  6. Результат идёт в следующий слой, где всё повторяется — со своим маршрутизатором и, возможно, с другим набором экспертов.

Та же схема в виде рисунка:

        токен
          │
    ┌─────▼─────┐
    │  внимание │   ← общее для всех, не делится на экспертов
    └─────┬─────┘
          │
    ┌─────▼──────┐
    │маршрутизатор│  ← выдаёт вес каждому эксперту
    └─┬──┬──┬──┬─┘
      │  │  │  │
     [E1][E2][E3][E4]   ← в памяти лежат ВСЕ
      ▓  ░  ▓  ░        ← ▓ считается, ░ пропущен
      │     │
      └──┬──┘
         │  взвешенная сумма выбранных
    ┌────▼────┐
    │след. слой│
    └─────────┘

Важные детали, которые схема упрощает. Выбор происходит на каждом слое отдельно и на каждый токен отдельно: соседние токены одного предложения могут пойти через разных экспертов. «Эксперт» — не специалист по теме: это не «эксперт по химии» и «эксперт по коду», а результат обучения, распределение по которому обычно не поддаётся человеческому толкованию. И наконец, в части архитектур один-два эксперта объявляются общими и включаются всегда, а маршрутизатор выбирает только остальные.

#Сколько это стоит в памяти

В таблице — условные примеры архитектур, а не выпущенные модели: конкретные конфигурации меняются от версии к версии, и называть их числами в статье значит гарантированно соврать через полгода. Память посчитана арифметикой: общее число параметров умножено на 0,55 байта на параметр — это ориентир для четырёхбитной квантизации.

Условный пример Всего параметров Активных на токен Память под веса в Q4
Плотная модель 14 млрд 14 млрд ~7,7 ГБ
MoE, 8 экспертов, top-2 ~47 млрд ~13 млрд ~26 ГБ
MoE, много мелких экспертов ~30 млрд ~3 млрд ~16,5 ГБ
MoE большой ~100 млрд ~12 млрд ~55 ГБ
MoE очень большой ~230 млрд ~20 млрд ~127 ГБ

Читать таблицу нужно по двум столбцам сразу. Второй столбец говорит, влезет ли модель в вашу машину. Третий — насколько быстро она будет отвечать, если влезла. Обратите внимание на строку с восемью экспертами: общее число параметров меньше суммы «восемь на размер эксперта», потому что слои внимания и эмбеддинги общие и в экспертов не входят.

И на строку с мелкими экспертами: тридцать миллиардов общих параметров требуют памяти как большая плотная модель, а считаются как трёхмиллиардная. Что вообще стоит за числом параметров и почему оно не равно «уму», разобрано отдельно в материале про то, что такое параметры модели. Подсчёт бюджета видеопамяти с учётом KV-кэша — в статье о том, сколько нужно VRAM для локальной модели.

#Что из этого следует на практике

Отбор по названию перестаёт работать. Число в имени модели больше не говорит вам ни о скорости, ни о требованиях. Нужно смотреть два числа — общее и активное, — и оба обычно указаны в карточке модели.

MoE не помогает влезть в маленькую видеопамять. Это главное практическое разочарование. Смесь экспертов экономит вычисления, а не память. Если у вас карта на 12 ГБ, стомиллиардная MoE вам недоступна ровно так же, как недоступна стомиллиардная плотная модель.

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

Там, где памяти много, MoE выгодна. Машина с большим объёмом объединённой памяти или сервер с несколькими картами получает качество, соответствующее общему числу параметров, при скорости, соответствующей активному. Это и есть смысл архитектуры.

Качество не равно ни одному из двух чисел. MoE на сто миллиардов общих и двенадцать активных обычно сильнее плотной двенадцатимиллиардной, но не равна плотной стомиллиардной. Куда именно она попадает между ними — проверяется на ваших задачах; процедура отбора описана в разборе того, как выбрать модель под задачу и железо.

Архитектура смеси экспертов встречается и у европейских семейств, и у китайских — обзоры конкретных линеек собраны отдельно: линейка Mistral и её особенности, а также семейства GLM и Kimi.

#Где интуиция подводит

«Эксперт отвечает за свою тему». Самое живучее заблуждение, порождённое названием. Распределение, к которому приходит маршрутизатор при обучении, к человеческим предметным областям отношения обычно не имеет. Выбрать «эксперта по юриспруденции» вручную нельзя, и такого эксперта в модели нет.

«Активные параметры — это как маленькая модель». Не совсем. Активные параметры на разных токенах разные, и за длинный ответ модель успевает задействовать значительную часть всех экспертов. По вычислениям на токен она ведёт себя как маленькая, по накопленным знаниям — как большая.

«MoE всегда быстрее плотной модели того же общего размера». Быстрее по вычислениям на токен — да. Но если веса не помещаются в быструю память целиком, выигрыш съедается обращениями к медленной памяти, и на практике MoE может оказаться медленнее плотной модели, которая влезла.

«Можно выгрузить неиспользуемых экспертов и сэкономить». Заранее неизвестно, какие эксперты понадобятся: решение принимает маршрутизатор на каждом токене. Существуют схемы подгрузки экспертов по требованию, но они добавляют задержку на каждом обращении и требуют проверки в вашей конфигурации.

«Число экспертов важнее их размера». Само по себе число экспертов ни о чём не говорит. Значение имеют три параметра вместе: общее число параметров, число активных и сколько экспертов выбирается на токен.

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

#Что такое MoE-модель простыми словами?

Это модель, в которой вместо одного большого вычислительного блока в слое стоит несколько параллельных блоков-экспертов, и на каждый токен работают только один-два из них. Выбирает их небольшая сеть-маршрутизатор. В памяти держатся все эксперты, считается только выбранная часть.

#Почему MoE-модель требует много памяти, если работает мало параметров?

Потому что маршрутизатор выбирает экспертов на лету, для каждого токена и на каждом слое отдельно. Заранее неизвестно, какой эксперт понадобится через мгновение, поэтому веса всех экспертов должны быть доступны немедленно. Экономятся вычисления, а не объём хранения.

#Что такое активные параметры?

Это число параметров, которые реально участвуют в обработке одного токена. У плотной модели оно совпадает с общим числом, у MoE — заметно меньше. Активные параметры определяют скорость генерации и требования к вычислениям, общее число — требования к памяти.

#MoE лучше обычной плотной модели?

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

#Можно ли запустить MoE-модель на обычной видеокарте?

Небольшую — да, если общее число параметров укладывается в вашу память по обычной арифметике квантизации. Крупные MoE на потребительской карте либо не запускаются, либо запускаются с выгрузкой части экспертов в оперативную память, и тогда время ответа становится непредсказуемым.

#Как понять, что модель построена как MoE?

В карточке модели указывают два числа: общее количество параметров и количество активных, иногда в форме «столько-то из стольких-то». Также в описании встречается число экспертов и параметр top-k. Если указано одно число — модель плотная.

#Вывод

Смесь экспертов ломает привычное правило «число в названии = требования к машине», разводя его на два независимых числа: память считается по общему количеству параметров, скорость — по активному.

Если у вас одна потребительская видеокарта, практический вывод для вас скорее отрицательный: MoE не даст запустить большую модель на маленькой памяти, а частичная выгрузка экспертов ведёт себя хуже, чем выгрузка слоёв плотной модели. Если же у вас много памяти — большая объединённая память или несколько карт, — MoE даёт лучшее соотношение качества и скорости из доступного, и смотреть стоит именно в эту сторону.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт