Title: Ошибка заключалась в одной оси
Скрытая ошибка в реализации chunked-scan в PyTorch позволяет определенным гибридным моделям подглядывать в будущие токены в тех случаях, когда отсутствуют быстрые объединенные ядра (fused kernels), что ставит под удар такие чекпоинты, как Zamba2-1.2B и Nemotron-H-8B. Дефект вызван одной операцией редукции, выполненной по неверной оси, и он проявляется на том пути выполнения, на который полагаются большинство CI-конвейеров и запусков на CPU.
Почему эта ошибка важна
Гибридные модели и модели пространства состояний (SSM) больше не зависят исключительно от механизма внимания (attention); они также используют линейные рекуррентности, сканирования (scans) и свертки (convolutions). Операция маскирования, которая блокирует будущие токены в матрице внимания, не гарантирует автоматически соблюдение причинно-следственной связи (causality) для этих дополнительных операций. Когда быстрые объединенные ядра, которые в обычном режиме корректно обрабатывают сканирование, отсутствуют, PyTorch переключается на путь chunked-scan на чистом Python. Этот резервный путь содержит ошибку перепутанной оси (axis-mixup), что позволяет информации из более поздних позиций проникать назад во время инференса.
Утечка происходит незаметно. Она не приводит к сбою модели и не вызывает явных ошибок. Вместо этого она делает показатели loss и перплексии искусственно низкими, потому что модель фактически жульничает — видит те самые токены, которые она должна предсказывать. Любая последующая оценка, полагающаяся на эти метрики, строится на ложном фундаменте.
Как была обнаружена проблема
Исследователи сравнили два прямых прохода (forward passes) через одну и ту же модель:
- Случайная последовательность токенов.
- Идентичная последовательность с одним измененным токеном.
Они измерили разницу в скрытых состояниях (hidden states) послойно. Проверка масок ничего не выявила, но послойный аудит с внесением ошибок (fault injection) обнаружил 192 из 192 внесенных ошибок, что подтвердило утечку.
Быстрый анализ библиотеки transformers показал следующее:
- Zamba2-1.2B допускает утечку, когда размер чанка (chunk size) установлен на 256.
- Nemotron-H-8B допускает утечку при размере чанка 128.
- Большинство других чекпоинтов не показали утечек при тех же условиях.
Дефект содержится в коде chunked-scan, который запускается всякий раз, когда отсутствуют необязательные объединенные ядра. Это включает в себя:
- Все вычисления на CPU.
- Среды GPU без специфических пакетов с объединенными ядрами (fused-kernel packages).
- Стандартные установки PyTorch, в которых отсутствуют дополнительные зависимости.
Поскольку ошибка проявляется только при отсутствии этих ядер, она может возникать в средах CI и на процессорах.
Кто находится в зоне риска и какова цена ошибки
Любая команда, которая обучает, дообучает или оценивает гибридные модели без использования объединенных ядер, рискует опубликовать завышенные показатели производительности. Кажущееся улучшение loss или перплексии иллюзорно; модель фактически «заглянула вперед». Для исследовательских групп это может привести к вводящим в заблуждение заявлениям о достижении передовых (state-of-the-art) результатов. Для коммерческого использования это может вызвать ошибки в задачах генерации, которые модель на самом деле так и не научилась выполнять.
Контраргумент
Некоторые разработчики утверждают, что правильно примененной причинно-следственной маски (causal mask) достаточно для предотвращения любой утечки будущих токенов. Эта ошибка опровергает данное представление: сканирования, свертки и определенные слои нормализации могут полностью обходить маску. Путаница с осями в chunked-scan показывает, что причинно-следственная связь должна соблюдаться везде, где проходят данные, а не только в матрице внимания.
На что обратить внимание в дальнейшем
- Гигиена зависимостей: устанавливайте пакеты с быстрыми объединенными ядрами на всех узлах обучения и инференса, особенно в CI-конвейерах.
- Скрипты аудита: следуйте двухэтапному аудиту, рекомендованному первооткрывателями:
- Внесите известную ошибку в тестируемый чекпоинт в качестве положительного контроля.
- Запускайте последовательности, длина которых превышает размер чанка или окна модели; короткие последовательности никогда не выявят утечку.
Проведение аудита любого гибридного или SSM-чекпоинта с длиной последовательности, превышающей размер чанка, покажет, остается ли модель уязвимой.
Итог: Даже модель, проходящая все стандартные тесты, может незаметно жульничать, если путь выполнения переключается на ошибочную реализацию. Проверка наличия быстрых объединенных ядер и явное тестирование на утечки за пределами масок внимания теперь являются обязательными шагами, прежде чем доверять метрикам любой гибридной модели.
