Опубликовано 25 марта 2026

Ошибка переполнения памяти GPU при обучении нейросетей на примере Jamba 3B

Когда 31% кэша просто исчезает: история одного тихого бага в глубинах GPU-кода

Инженеры AI21 несколько недель охотились за мистическими сбоями при обучении модели и нашли причину в двух символах кода на уровне GPU.

Разработка / Технический контекст 5 – 7 минут чтения
Источник события: AI21 Labs 5 – 7 минут чтения

Представьте: вы обучаете языковую модель, всё настроено, система запущена – и вдруг начинают появляться странные числа. Не ошибки, не вылеты, а просто тихое расхождение в вероятностях, которое нельзя объяснить ничем очевидным. Именно с этого начался один из самых поучительных эпизодов в практике команды AI21 – компании, разрабатывающей собственные языковые модели.

Проблема расхождения вероятностей при обучении с подкреплением GRPO

«Одно и то же, но другое»

При обучении языковых моделей с использованием метода GRPO – одного из подходов к обучению с подкреплением – есть важная проверка. Система генерирует текст, записывает, с какой «уверенностью» она выбирала каждое слово, а затем та же самая модель (с теми же весами, без каких-либо обновлений) пересчитывает эти значения заново. Результаты должны совпадать практически идеально: те же веса, те же входные данные, тот же результат.

Но в случае с Jamba 3B – гибридной моделью AI21, сочетающей стандартные механизмы внимания с архитектурой Mamba – совпадения не было. Числа расходились. Причём расходились не хаотично, а с определённой периодичностью: сбой появлялся примерно каждые 12 шагов обучения, потом «пропадал», а затем возвращался снова.

Самое неприятное – внешне это выглядело как обычная нестабильность обучения. Подобные вещи случаются, и списать всё на «шум» было бы очень легко.

Влияние количества генерируемых текстов на воспроизводимость ошибки

Поиск рычага

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

Команда выбрала другой путь: найти параметр, изменение которого меняет характер сбоя, а не просто его интенсивность. Проще говоря – найти рычаг.

Им оказалось количество генерируемых текстов на каждый запрос. Когда исследователи начали увеличивать это число – 8, 16, 32, 64, 128 – они заметили важное: периодичность сбоев менялась вместе с этим параметром. При 128 текстах на запрос сбой появлялся уже на самом первом шаге.

Это наблюдение изменило всю картину. Если сбой синхронизирован с процессом генерации, значит, проблема, скорее всего, именно там – а не в системе обновления весов, не в синхронизации между машинами и не в самом алгоритме обучения.

Изоляция бага и проверка кэша в гибридной архитектуре Mamba

От «странности при обучении» к «воспроизводимому дефекту»

Следующая цель – воспроизвести баг в как можно более простых условиях. В идеале – на нулевом шаге, до того как обучение вообще началось. Это важно: когда ошибка появляется с первой же итерации, из уравнения выпадают все накопленные эффекты – история градиентов, дрейф весов и долгосрочная динамика обучения. Остаётся просто выполнение кода.

Со 128 текстами на запрос это удалось. Баг воспроизводился на первом же шаге, надёжно и стабильно.

Дальнейшее сужение круга подозреваемых дал ещё один параметр – объём GPU-памяти, выделяемой под кэш. При значении 50% баг исчезал. При большем значении – появлялся снова. Это означало, что дело в том, как движок инференса (то есть генерации текста) выделяет и использует кэш внутри видеокарты.

А поскольку Jamba – гибридная архитектура, кэш у неё бывает двух типов: один для механизма внимания, другой для блоков Mamba. Проверили модель только с механизмом внимания – баг не воспроизвёлся. Значит, дело в Mamba-части.

Причина сбоя в переполнении 32-битных целых чисел в GPU-коде

Два символа и несколько недель

Источник проблемы нашли в низкоуровневом коде, который выполняется непосредственно на GPU. Там есть операция: вычислить, куда именно в памяти записать состояние для каждого элемента кэша. Для этого нужно перемножить два числа: номер элемента и размер одного «шага» в памяти.

Оба числа были объявлены как 32-битные беззнаковые целые. Это тип, который умеет хранить значения примерно до 4,29 миллиарда. Звучит внушительно, но произведение этих двух чисел могло запросто выйти за этот предел.

Проще говоря: представьте одометр, который показывает только до 999 999 км, а потом сбрасывается в ноль. Машина проехала миллион километров – одометр показывает 000 000. Никакой ошибки, никакого предупреждения. Просто неправильное число.

Именно это и происходило. При размере шага 89 600 элементов переполнение наступало, когда номер элемента превышал примерно 47 935. В реальной конфигурации кэш содержал 69 776 слотов – то есть около 31% из них записывались по неверным адресам в памяти GPU. Данные уходили «не туда», а в «правильных» местах оставались нули.

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

Исправление заняло две секунды: тип данных заменили с 32-битного на 64-битный. Теперь числа не переполняются. Всё.

Несколько недель расследования. Два изменённых символа в коде.

Особенности отладки скрытых ошибок в распределенных системах машинного обучения

Почему это сложно поймать

Подобные баги особенно коварны в системах машинного обучения по нескольким причинам.

Во-первых, они не ломают систему явно. Нет исключения, нет неверного формата данных, нет очевидного сигнала. Есть просто чуть другие числа, которые вполне могли бы быть следствием сотни других причин.

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

В-третьих, в распределённых системах обучения симптом и причина могут находиться очень далеко друг от друга. Ошибка в GPU-ядре на этапе генерации текста выглядела как нестабильность на этапе обучения – в совершенно другом компоненте системы.

Методы локализации и исправления дефектов в сложных ИИ-моделях

Урок не про баг, а про подход

Самое ценное в этой истории – не сам дефект, а метод его обнаружения.

Когда система ведёт себя странно, первый инстинкт – проверить всё сразу. Это редко помогает. Гораздо эффективнее искать параметр, который меняет структуру сбоя. Не «при каком значении ошибка становится больше», а «при каком значении она начинает вести себя по-другому». Именно это даёт подсказку о природе проблемы.

Второй принцип – сужать до минимума. Если баг можно воспроизвести на первом шаге вместо пятисотого, нужно добиться именно этого. Чем меньше контекст, тем чище сигнал.

Третий – изолировать подсистемы. Большой распределённый конвейер – плохое место для отладки. Хорошее место – минимальный скрипт, который воспроизводит проблему в изоляции.

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

Ссылка на публикацию: https://www.ai21.com/blog/vllm-cuda-integer-overflow/
Оригинальное название: Stride and prejudice: How a 32-bit overflow corrupted a CUDA kernel (and stayed hidden for weeks)
Дата публикации: 25 мар 2026
AI21 Labs www.ai21.com Израильская компания, создающая большие языковые модели и инструменты для работы с текстом.
Предыдущая статья OpenAI открывает разработчикам инструменты защиты подростков в ИИ-приложениях Следующая статья Higress вошёл в CNCF: что это значит для разработчиков AI-приложений

Связанные публикации

Вам может быть интересно

Перейти к другим событиям

События – лишь часть картины. Эти материалы помогают увидеть шире: контекст, последствия и идеи, стоящие за новостями.

ИИ: События

Как один токен сломал целую модель: история ошибки в vLLM

Технический контекст Инфраструктура

Инженеры AI21 Labs обнаружили странную ошибку в vLLM, которая превращала нормальные ответы модели Jamba в бессмыслицу – и всё из-за одного некорректного токена.

AI21 Labswww.ai21.com 29 янв 2026

ИИ: События

Как масштабировать vLLM и не допустить ошибок нехватки памяти

Технический контекст Инфраструктура

Команда AI21 Labs поделилась опытом оптимизации vLLM – популярного инструмента для развертывания языковых моделей, который при масштабировании часто сталкивается с критическими ошибками из-за дефицита оперативной памяти.

AI21 Labswww.ai21.com 6 фев 2026

От источника к разбору

Как создавался этот текст

Этот материал не является прямым пересказом исходной публикации. Сначала была отобрана сама новость – как событие, важное для понимания развития ИИ. Затем мы задали рамку обработки: что в тексте важно прояснить, какой контекст добавить и на чём сделать акцент. Это позволило превратить отдельный анонс или обновление в связный и осмысленный разбор.

Нейросети, участвовавшие в работе

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

1.
Claude Sonnet 4.6 Anthropic Анализ исходной публикации и написание текста Нейросеть изучает оригинальный материал и формирует связный текст

1. Анализ исходной публикации и написание текста

Нейросеть изучает оригинальный материал и формирует связный текст

Claude Sonnet 4.6 Anthropic
2.
Gemini 2.5 Flash Google DeepMind Проверка и правка текста Исправление ошибок, неточностей и спорных формулировок

2. Проверка и правка текста

Исправление ошибок, неточностей и спорных формулировок

Gemini 2.5 Flash Google DeepMind
3.
DeepSeek-V3.2 DeepSeek Подготовка описания для иллюстрации Генерация текстового промпта для визуальной модели

3. Подготовка описания для иллюстрации

Генерация текстового промпта для визуальной модели

DeepSeek-V3.2 DeepSeek
4.
FLUX.2 Pro Black Forest Labs Создание иллюстрации Генерация изображения по подготовленному промпту

4. Создание иллюстрации

Генерация изображения по подготовленному промпту

FLUX.2 Pro Black Forest Labs

Не пропустите ни одного эксперимента!

Подпишитесь на Telegram-канал –
там мы регулярно публикуем анонсы новых книг, статей и интервью.

Подписаться