Вы привыкли к простому правилу: больше параметров — больше памяти и медленнее ответ. Правило работает годами и позволяет отсеивать модели, не читая описания. Потом вам попадается модель, в названии которой стоит число вроде ста миллиардов, и оказывается, что отвечает она быстрее четырнадцатимиллиардной, которая у вас крутится. При этом в видеопамять она не влезает даже близко.
Оба наблюдения верны одновременно, и оба следуют из одной архитектурной особенности. Модель построена как смесь экспертов (mixture of experts, MoE), и в ней число параметров, которое стоит в названии, и число параметров, которое реально считается на каждый токен, — это два разных числа.
#Короткий ответ
В MoE-модели каждый слой содержит несколько параллельных блоков-«экспертов», но на обработку одного токена выбираются не все, а один-два. Веса всех экспертов обязаны лежать в памяти, потому что заранее неизвестно, какой понадобится следующему токену, — а считается только выбранная часть. Отсюда прямое следствие: память определяется общим числом параметров, скорость — числом активных. Плотная модель, где все параметры участвуют в каждом токене, — это частный случай, у которого оба числа совпадают.
#Как токен проходит через маршрутизацию
Схема прохождения одного токена через один MoE-слой, по шагам.
- Токен приходит в слой в виде вектора, уже прошедшего механизм внимания. Механизм внимания в большинстве архитектур общий и в разделение на экспертов не входит.
- Небольшая обучаемая сеть — маршрутизатор (router) — получает этот вектор и выдаёт оценку для каждого эксперта слоя.
- Из оценок выбирается верхушка: чаще всего один или два эксперта с наибольшим весом. Число выбираемых экспертов — параметр архитектуры, обозначается как top-k.
- Вектор считается только через выбранных экспертов. Веса остальных в этом такте не читаются и не умножаются.
- Выходы выбранных экспертов складываются с коэффициентами, которые дал маршрутизатор.
- Результат идёт в следующий слой, где всё повторяется — со своим маршрутизатором и, возможно, с другим набором экспертов.
Та же схема в виде рисунка:
токен
│
┌─────▼─────┐
│ внимание │ ← общее для всех, не делится на экспертов
└─────┬─────┘
│
┌─────▼──────┐
│маршрутизатор│ ← выдаёт вес каждому эксперту
└─┬──┬──┬──┬─┘
│ │ │ │
[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 даёт лучшее соотношение качества и скорости из доступного, и смотреть стоит именно в эту сторону.