Представьте, что вы дважды решаете один и тот же пример на калькуляторе – и получаете разные ответы. Звучит как поломка. Но именно это происходит с современными языковыми моделями, когда одни и те же вычисления выполняются чуть по-разному внутри разных систем. Не из-за ошибки в весах и не из-за различий в данных – просто потому, что числа складываются в другом порядке.
Команда Fireworks AI опубликовала подробный разбор того, где именно возникают такие расхождения – и почему они важны. Речь идёт о так называемых MoE-моделях (Mixture of Experts, «смесь экспертов»), к которым относятся, например, Kimi K2.5, Qwen3.5-MoE и DeepSeek V3.
Что такое MoE и почему с ними сложнее
Проще говоря, обычная языковая модель обрабатывает каждый токен (условно – каждое слово) через одни и те же блоки вычислений. MoE-модели устроены иначе: у них есть несколько «экспертов» – отдельных подсетей, – и для каждого токена динамически выбирается, какие из них задействовать. Это позволяет масштабировать модель без пропорционального роста вычислительной нагрузки.
Но такая архитектура делает поведение модели более чувствительным к числовым погрешностям. Если из-за незначительного отклонения в вычислениях изменится выбор «экспертов», дальнейшая цепочка вычислений пойдёт по другому пути. Маленькая ошибка в начале усиливается на каждом из десятков слоёв.
Откуда берётся расхождение
Корень проблемы – в свойстве числовых вычислений, которое обычно остаётся за кадром: сложение чисел с плавающей точкой не является коммутативным в строгом математическом смысле. То есть (a + b) + c и a + (b + c) могут дать разные результаты – не из-за ошибки, а из-за того, как числа округляются на каждом промежуточном шаге.
В обычной жизни это несущественно. Но в модели, которая прогоняет вычисления через 61 слой, такие погрешности накапливаются. И если в процессе обучения модель «видела» числа, сложенные в одном порядке, а при запуске в эксплуатацию (production) они складываются в другом – результаты начинают расходиться.
Три места, где порядок меняется
Инженеры Fireworks выделили три основных источника таких расхождений.
Первый – это то, как разные системы синхронизируют вычисления между несколькими GPU. Когда модель работает на нескольких видеокартах одновременно, результаты с разных карт нужно суммировать. Стандартный инструмент для этого (NCCL) делает это в одном порядке, а оптимизированные ядра для ускорения инференса (inference) – в другом. Математически оба варианта верны. Числово – нет.
Второй источник – объединение нескольких операций в одну (так называемые «фьюжн-ядра»). Ради экономии памяти и ускорения вычислений разработчики движков инференса часто объединяют несколько последовательных операций в одну. При этом внутренний порядок суммирования меняется, и нормализация, которая следует за сложением, получает на вход чуть другое число.
Третий – специфика MoE-слоёв, где в одно ядро объединяются сразу несколько операций: взвешенное суммирование выходов экспертов, синхронизация между GPU и нормализация для следующего блока. Этот тип слоёв присутствует в 58 из 61 слоя модели, и ошибки здесь накапливаются особенно интенсивно.
Почему это незаметно – и почему это всё равно проблема ⚠️
Самое неприятное в этих расхождениях – они не ломают модель очевидным образом. Текст генерируется нормально, ответы выглядят разумно. Расхождение обнаруживается только при точном сравнении вероятностей, которые модель приписывает каждому следующему токену.
Для обычного пользователя это, скорее всего, вообще незаметно. Но для систем, которые дообучают модели на основе обратной связи (так называемый RLHF), это принципиально важно. В таких системах используется «опорная» версия модели, с которой сравниваются новые варианты поведения. Если версия для инференса даёт немного другие вероятности, чем тренировочная версия, система дообучения получает искажённый сигнал и может начать оптимизировать «не то».
Если коротко: модель не сломана, но её точная копия для целей обучения – уже не совсем копия.
Случай с Qwen3.5-MoE: где расхождение стало видимым
Особенно наглядным оказался случай с моделью Qwen3.5-MoE при работе с изображениями. Для текстовых токенов расхождение оставалось небольшим. Но для токенов, представляющих изображения, метрика расхождения (авторы используют вариант KL-дивергенции – меры различия между двумя распределениями вероятностей) вырастала примерно в 60 раз.
Причина оказалась в том, где именно происходит округление при суммировании выходов экспертов. В референсной реализации каждый вклад эксперта округлялся до менее точного формата до сложения. В оптимизированной версии Fireworks всё складывалось сначала в более точном формате, и округление происходило только в конце. Математически оба подхода корректны. Но поскольку эталонным был именно первый вариант, второй вариант давал другие числа.
Когда в оптимизированной версии MoE-блоки заменили на референсные, расхождение упало до нуля. Это позволило точно локализовать источник проблемы.
Что из этого следует
Для разработчиков и исследователей, которые работают с дообучением или развёртыванием MoE-моделей, выводы из этого разбора довольно практичные.
«Одна и та же математика» не означает «одни и те же числа» – и это нужно проверять явно, а не принимать на веру. Простой проверки «генерирует ли модель разумный текст» недостаточно, если вы используете движок инференса как часть пайплайна обучения.
Авторы также подчёркивают, что единая кнопка «выключить все оптимизации» – не лучшее решение, потому что разным задачам нужны разные компромиссы. Для RLHF важна точность. Для инференса в продакшене – скорость. Идеальный вариант – гранулярные настройки, позволяющие выбирать нужный баланс.
Наконец, это ещё одно напоминание о том, что MoE-модели – несмотря на свою эффективность – вносят дополнительный слой хрупкости, связанный с дискретным выбором экспертов. Небольшое числовое отклонение на входе может изменить то, какие эксперты активируются, – и этот выбор затем распространяется через все последующие слои.
Проблема не уникальна и не катастрофична. Но она хорошо иллюстрирует, как инженерные компромиссы, сделанные ради производительности, могут аукнуться там, где их меньше всего ждут.