Активные веса вместо полной матрицы: INT8-декодирование спайковой модели на CPU

27 сентября 202624 просмотров

В статье описана C++-реализация для языковой модели с бинарным спайковым гейтингом: разрежённые проекции обрабатываются в INT8, а вычисления учитывают только активные веса. В однопоточном тесте ранняя INT8-версия обеспечила 23,31 токена/с против 9,82 у FP32 и сократила память под веса с 3355,2 до 1087,4 МиБ; переход плотных проекций на INT4 уменьшил пропускную способность декодирования.

Активные веса вместо полной матрицы: INT8-декодирование спайковой модели на CPU

Как спайки меняют обработку весов

В статье «Spike-Aware INT8 Execution for Spiking Language Models on Commodity CPUs» Ting Liu описывает декодирование спайковой языковой модели на CPU.

  • Двоичные спайковые активации позволяют читать только активные столбцы весов.
  • Умножения заменяются суммами весов.

Практический смысл подхода — не обрабатывать столбцы, которые не активировались. Выигрыш зависит от разреженности активаций, а не только от формата весов.

Как устроен INT8-путь

Реализацию на C++ проверили на спайк-гейтированной языковой модели с 874M параметрами. Она использует разные режимы для разреженных и плотных проекций.

  • В разреженных проекциях хранятся веса INT8 в формате column-major.
  • Накопление выполняется в целых числах, масштаб применяется один раз для каждого выходного канала.
  • В плотных проекциях сохраняются доступ row-major и активации FP32.

Это смешанная схема, а не перевод всех операций модели в INT8. Критерий выбора — готовность сохранять FP32 в плотных проекциях ради разреженного INT8-пути.

Какие показатели скорости и хранения приведены

Ранний чекпойнт сравнили на одном потоке. В этой проверке INT8 показал более высокую пропускную способность декодирования и меньший объём хранения весов.

Ранний чекпойнт, один потокСкорость декодированияХранение весов
FP329.82 tokens/s3355.2 MiB
INT823.31 tokens/s1087.4 MiB

Для финального чекпойнта указаны отдельные результаты на AMD Ryzen 7 5800X. Условия отличаются от сравнения раннего чекпойнта.

Режим финального чекпойнта INT8Показатель
Декодирование, один поток22.63 tokens/s
Декодирование, четыре потока47.90 tokens/s
Prefill последовательности в 512 токенов, восемь потоков94.68 tokens/s

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

Что меняет вариант с INT4

Вариант с INT4 для плотных проекций сокращает объём хранения ещё на 17.4%. Пропускная способность декодирования при этом снижается на 46.6%.

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

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

Что известно об энергопотреблении

В отдельном исследовании выходной головы на ARM для двух конфигураций проверки кандидатов зафиксировали более высокие показатели энергии на усечённом окне декодирования.

Исправленная версия статьи также добавляет численную валидацию и исследование энергопотребления по wall-power на ARM. Данных из CPU-тестов по скорости недостаточно, чтобы делать вывод об экономии энергии.

Часто задаваемые вопросы

Похожие материалы

Все материалы
Активные веса: INT8-декодирование спайковой модели на CPU