GigaChat-3.1: Большое обновление больших моделей

GigaChat-3.1: Большое обновление больших моделей

В ноябре мы выпустили preview-версии GigaChat-3-Ultra (702B MoE) и GigaChat-3-Lightning (10B MoE). С тех пор провели масштабную работу по улучшению моделей и теперь представляем обновлённые версии — GigaChat-3.1-Ultra и GigaChat-3.1-Lightning. По нашим замерам, Ultra превосходит non-reasoning Qwen3-235B-A22B и DeepSeek-V3-0324 в математике и общем рассуждении, а Lightning на аренах с судьёй GPT-4.1 демонстрирует результат на уровне GPT-4o — при всего 1,8 млрд активных параметров. Модели, как и ранее, доступны на HuggingFace и GitVerse под лицензией MIT.

Как боролись с циклами

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

…Тропики. Обжигающее солнце. Пальмы. Пальмы. Пальмы. И жара, жара, жара. И океан, океан, океан. И песок, песок, песок…

Такие генерации было невозможно выпускать, поэтому релиз пришлось отложить, чтобы найти и устранить причину.

Новая метрика для циклов

Чтобы решить проблему, её нужно измерить. Изначально использовалась метрика CYCLES, основанная на z-функции, но она была медленной и недостаточно репрезентативной. Мы разработали новую метрику, основанную на BPE-сжатии хвоста генерации.

Идея проста: если модель зациклилась, хвост генерации состоит из повторяющихся фрагментов и хорошо сжимается. Если генерация нормальная — сжатие минимально.

Алгоритм:

  • Берём хвост генерации (фиксированной длины или доли от всей последовательности).
  • Применяем BPE-подобную процедуру: ищем частые пары токенов и объединяем их.
  • Считаем compression_ratio — отношение длины после сжатия к исходной.

Чем ниже значение, тем сильнее цикличность. Метрика ловит не только буквальные повторы, но и синтаксические шаблоны, списки, код и дрейфующие блоки.

Мы также учитывали длину генераций: короткий повтор в конце и длинный развал — это разные по тяжести артефакты.

Поиски причины циклов

Мы разбили пайплайн и проверили каждый этап.

Данные. Проверили SFT и DPO — проблем не нашли. Более того, в DPO есть «антициклин»-семплы, которые помогают избежать циклов.

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

Балансировка экспертов в MoE. Проверили гипотезу, что SFT нарушает баланс. Учли особенности: паддинги, sequence_parallelism, маскировку префиксов. Провели эксперименты с отключением балансировочных loss-функций. Оказалось, модель сама стабилизирует баланс, а дополнительные методы ухудшают качество. Проблема не в этом.

Этап возникновения циклов. Замерили циклы после каждого этапа: pretrain → stage 1.5 → SFT → DPO. Ключевое наблюдение: корень проблемы — расширение контекста на претрейне. SFT на 4096 токенах почти не циклит, а на 32 тыс. — циклит сильно. Чем больше контекст, тем выше вероятность циклов. Последующие этапы уменьшают проблему, особенно при хорошем «холодном старте».

Баг в SGLang. При увеличении DP (data parallelism) количество циклов росло, а инференс замедлялся. Мы обнаружили критичный баг в SGLang (версии 0.5.3–0.5.9): при dp > 1 и batched-запросах модель начинает повторять фрагменты, а вычисления дублируются на всех рангах. Это искажает метрики, особенно в коде: на HumanEval результаты Qwen3-8B падали с 0,63 до 0,43. Мы подготовили pull-request. До слияния рекомендуем использовать версии до 0,5,3.

Гиперпараметры. Переход на MoE потребовал пересмотра гиперпараметров. На SFT и stage 1.5 мы перебирали LR и шедулеры. Оказалось, модели чувствительны к числу эпох — один эксперимент достиг цели только на 20-й эпохе. Оптимально: увеличить LR и использовать менее затухающий constant scheduler. Это улучшило холодный старт для DPO и снизило циклы.

DPO оказался ключевым этапом — там больше всего антициклиновых семплов. Гиперпараметры здесь особенно критичны:

  • Чем больше global batch size (512–1024), тем лучше результаты по всем метрикам, включая циклы.
  • Чем сильнее вклад DPO (через LR, dpo_loss_coef или beta_chosen), тем меньше циклов — но выше риск сломать модель.
  • Оптимальные параметры зависят от архитектуры. Проблем с циклами до перехода на MoE не было.

Мы проверили множество гипотез, которые не сработали: переобучение претрейнов, смена alignment-пайплайнов, исправление багов в метриках, изменение параметров семплирования. Помог только тонкий подбор гиперпараметров на каждом этапе. В итоге достигли 97,6 по CYCLES и улучшили BPE_CYCLES с 0,75 до 0,9 — это почти полное отсутствие циклов.

Ускорение обучения

Обучение больших моделей дорогое, поэтому мы оптимизировали пайплайны SFT. Ускорили обучение в три раза за счёт:

  • Sequence packing — упаковка коротких и средних диалогов в пакеты до 32 тыс. токенов, что снижает padding и повышает утилизацию GPU.
  • Dynamic sequence parallel — адаптивное шардирование под реальную длину батча, что снижает коммуникации на коротких примерах и позволяет эффективно учить длинные контексты.

На контексте 256 тыс. токенов ускорение может достигать десятикратного.

Дополнительный прирост дал отказ от длинных (1000 токенов) devsystem-ов в пользу коротких (300 токенов). Иногда простая работа с данными эффективнее сложных инженерных решений.

Мы также вернули DPO с улучшениями:

  • MTP: обучаем MTP-головы и на DPO для согласованности с основными предсказаниями.
  • Weighted gamma: экспоненциальное затухание веса токенов, начиная с первых различающихся токенов у chosen и rejected. Это помогло избежать переобучения на длинных примерах и снизило циклы.

Обучение в FP8

Раньше мы использовали post-training quantization (PTQ) в FP8 — это уменьшало размер модели вдвое и ускоряло инференс. Но на аренах судьи чаще выбирали BF16-модели. Причина: в resnet-архитектуре трансформеров ошибка квантования накапливается по слоям, что влияет на длинные генерации.

Чтобы это исправить, мы стали обучать DPO-этап в нативном FP8, даже на 10-миллиардной модели. Использовали стек, аналогичный DeepSeek: DeepGEMM, Triton- и CUDA-ядра для квантования, fused-операции и оптимизированный SwiGLU.

Ключевое открытие: если размер слоя не делится на блок квантования, можно западдить слой в BF16 до нужного размера. Разницы в бенчмарках нет, но появляется гибкость в архитектуре.

В итоге качество не только восстановилось, но в некоторых случаях превысило результаты BF16.

Локальные арены

Для отслеживания качества DPO используем автоматические арены: сравниваем генерации кандидата и бейзлайна с помощью LLM-as-a-Judge, затем бутстрапируем результат. Чтобы избежать position bias, проводим два сравнения: кандидат vs бейзлайн и наоборот.

Использование проприетарных судей (GPT-4.1) через API стоит ~180 долларов за замер четырёх арен. Мы искали локальные альтернативы.

Qwen-3-30b завышал метрики и искажал ранжирование. Kimi-K2 и DeepSeek-V3.2 слишком медленные — требуют до четырёх нод и 30–60 минут на запуск.

Фаворитом стала GPT-OSS-120b: быстрая, умещается в одну карту благодаря MXFP4 QAT, и хорошо коррелирует с GPT-4.1.

Мы написали оркестратор для автоматизации подъёма судьи и замеров, интегрировали это в фреймворк — теперь можем отслеживать метрики арен в реальном времени во время обучения.

Улучшение данных

В данных для GigaChat-3.1-Ultra мы:

  • Расширили покрытие сложных доменов: математика, финансы, физика, инженерия, биология, химия, медицина — для сильного холодного старта.
  • Ужесточили требования к качеству с помощью системы проверок «Ревизор»: контроль Markdown, LaTeX, форматов ответов.
  • Использовали LLM-судей для валидации данных на SFT и DPO, подбирая судей под специфику диалога.
  • Генерировали DPO-пары в on-policy режиме — на основе поведения preview-моделей. Это лучше отражает реальные ошибки и усиливает эффект обучения.

Также улучшили:

  • B2C-сценарии: расширили возможности кодового интерпретатора, улучшили работу с поиском и цитированием.
  • Персонализацию: модель запоминает пользователя и использует память для более релевантных ответов. (Раньше она добавляла «собачек» в промпты для генерации изображений — это исправлено.)
  • Агентские способности: создали пайплайн для генерации длинных диалогов с вызовом внешних функций в реальных средах, где решения верифицируются алгоритмически.
  • Грамотность и оформление: с профессиональными редакторами разработали свод правил, переработали процесс сбора данных. Ответы стали эстетичными и приятными для восприятия.

Итоговые метрики

По сравнению с ноябрьским релизом — значительный рост. Особенно в математике, General Reasoning и вызове функций: обошли non-reasoning Qwen3-235B-A22B и DeepSeek-V3-0324.

Благодаря DPO в FP8 модель стала не только быстрой, но и «вайбовой»: на аренах обходит DeepSeek-V3-0324 и почти сравнялась с Qwen3-235B-A22B-Non-Thinking.

GigaChat-3.1-Lightning:

  • Одна из лучших в своём классе, играет на уровне Qwen-3-4B-Instruct-2507, но значительно быстрее.
  • Лучше GigaChat-2-Lite, но гораздо быстрее.
  • По alignment — одна из лучших среди моделей аналогичного размера, уступает только Qwen3-4b-Instruct-2507, отвечает на уровне GPT-4o.
  • Обучение в FP8 позволило сократить размер вдвое без потери качества — можно обслуживать вдвое больше пользователей на той же памяти.
  • FP8 даёт такой же прирост скорости, как MTP. В комбинации — +40% к скорости инференса относительно BF16 без потерь.

Замеры на vllm 0.17.1rc1.dev158+g600a039f5, concurrency=32, 1xH100 80gb SXM5.

Заключение

За четыре месяца мы полностью переработали пайплайн постобучения: устранили циклы, улучшили результаты на аренах и бенчмарках, усилили вызов функций, перевели DPO в нативный FP8 (качество выше BF16, память вдвое меньше), автоматизировали замеры арен и нашли критичный баг в SGLang. Модели доступны на HuggingFace и GitVerse под MIT и на всех поверхностях Гигачата.

Работа продолжается. Впереди — новые open source релизы. А если вы хотите учить действительно большие модели — присоединяйтесь, у нас всегда есть, что починить.

Читать оригинал