Самые распространенные числовые форматы для LLM
Эффективная работа больших языковых моделей (БЯМ) в значительной степени зависит от правильного хранения и обработки их весов. Выбор числового формата напрямую влияет на требования модели к памяти, скорость вычислений и точность. Со временем формат FP32 постепенно уступает место FP16 и BF16 в задачах обучения, а для оптимизации вывода все чаще используются INT8 и даже квантованные форматы с еще меньшей разрядностью.

Искусственный интеллект, особенно глубокое обучение, предполагает огромные объемы вычислений. Числовые форматы, используемые в этих вычислениях (то есть, как числа хранятся и обрабатываются компьютером), напрямую влияют на:
- Скорость: Форматы с меньшей точностью (меньшим количеством битов) обеспечивают более быстрые вычисления.
- Объем памяти: Меньшее количество битов требует меньше памяти, что критически важно для загрузки и работы больших моделей.
- Энергопотребление: Обработка меньшего количества битов обычно требует меньше энергии.
- Точность: Форматы с более высокой точностью (большим количеством битов) обеспечивают более точные результаты, но часто за счет скорости, памяти и энергопотребления.
Цель состоит в том, чтобы найти оптимальный баланс между точностью и эффективностью. Для БЯМ наиболее распространенными числовыми форматами для хранения весов являются формат половинной точности с плавающей точкой (FP16) и bfloat16 (BF16). Для оптимизации вывода посредством квантования все чаще используются INT8 и даже форматы с меньшей разрядностью.
Ключевые числовые форматы в ИИ:
- FP32 (32-битное число с плавающей точкой)
- Исторически это был формат по умолчанию в глубоком обучении.
- Обеспечивает высокую точность, но требует значительных ресурсов памяти и вычислительных ресурсов.
- Редко используется непосредственно для хранения весов в современных больших БЯМ.
- FP16 (16-битное число с плавающей точкой / половинная точность)
- Представлен Nvidia с архитектурой Pascal (2016 г.).
- Поддерживается тензорными ядрами Nvidia и другими графическими процессорами, что обеспечивает более быстрые вычисления.
- Снижает использование памяти и вычислительные требования по сравнению с FP32. Снижение точности часто приемлемо для обучения и запуска моделей глубокого обучения.
- Достаточно точен для многих больших моделей, но в некоторых случаях (например, очень малые градиенты) потеря точности может вызвать проблемы, такие как потеря значимости.
- BF16 (bfloat16 / Brain Floating Point)
- Также 16 бит, как и FP16, но с другой внутренней структурой: больше битов для экспоненты и меньше для мантиссы (дробной части).
- Это дает BF16 динамический диапазон (разницу между наибольшим и наименьшим представимыми числами), более близкий к FP32, чем FP16.
- Это смягчает проблемы потери значимости и позволяет эффективно использовать BF16 во время обучения с меньшей потерей точности по сравнению с FP16 в определенных сценариях.
- Nvidia представила поддержку BF16 с архитектурой Ampere (2020 г.).
- FP8 (8-битное число с плавающей точкой)
- Впервые появился в архитектурах Nvidia Hopper (H100) и Blackwell (B100, B200, GB200).
- Представлен в двух вариантах: E4M3 (4 бита экспоненты, 3 бита мантиссы) и E5M2 (5 битов экспоненты, 2 бита мантиссы).
- E4M3 обеспечивает более высокую точность, а E5M2 предлагает более широкий динамический диапазон.
- Значительно ускоряет как обучение, так и вывод, часто с приемлемой потерей точности по сравнению с FP16.
- INT8 (8-битное целое число, для квантованных моделей)
- Высокоэффективен с точки зрения памяти и вычислений, потенциально до 4 раз быстрее, чем операции FP16.
- Вносит некоторую потерю точности, но ее можно эффективно контролировать с помощью тщательных методов квантования.
- Распространен на периферийных устройствах и мобильных платформах и поддерживается специализированными ускорителями ИИ (например, Nvidia TensorRT, Qualcomm AI Engine).
- Реже используется во время обучения, так как потеря точности может быть более проблематичной для вычисления градиентов.
- Распространенной практикой является квантование моделей, изначально обученных в FP32 или FP16, с преобразованием весов и активаций в INT8 для вывода.
- INT4 / INT2 (Квантованные, низкобитные форматы)
- Все чаще встречаются в современных моделях и оптимизациях (например, для моделей Llama, GPT-4).
- Значительно снижает использование памяти и ускоряет вывод.
- В основном используются для вывода; обычно не подходят для обучения.
Важность аппаратной поддержки числовых форматов
Аппаратная поддержка числовых форматов критически важна для графических процессоров (и других ускорителей ИИ), поскольку она фундаментально определяет вычислительную эффективность.
- Оптимизированные исполнительные блоки: Когда графический процессор поддерживает формат аппаратно (например, FP16, BF16, FP8), это означает, что на чипе есть специализированные схемы (исполнительные блоки, такие как блоки умножения-суммирования), которые специально разработаны для этого формата. Эти схемы выполняют операции непосредственно аппаратно, что на порядки быстрее, чем программная эмуляция.
- Эффективное перемещение данных: Аппаратная поддержка оптимизирует не только вычисления, но и перемещение данных. Система памяти графического процессора (регистры, кэши, глобальная память) и шины данных согласованы с поддерживаемыми форматами. Это означает, что нужно перемещать меньше битов, что снижает требования к пропускной способности памяти, задержку и энергопотребление.
- Максимизация параллелизма: Графические процессоры получают свою мощность за счет массового параллелизма. Аппаратная поддержка позволяет выполнять больше операций одновременно с данными в поддерживаемом формате. Например, если графический процессор поддерживает 16-битные операции аппаратно, он может выполнять две 16-битные операции параллельно вместо одной 32-битной операции, потенциально удваивая пропускную способность для этих операций.
- Энергоэффективность: Специализированные схемы не только быстрее, но и более энергоэффективны. Меньшему количеству транзисторов нужно переключаться для выполнения той же операции по сравнению с менее специализированным оборудованием или программной эмуляцией, что приводит к снижению энергопотребления и тепловыделения.
Заключение
Для обучения преобладают форматы FP16 или BF16. Для вывода многие модели теперь используют квантование INT8 или даже INT4 для более быстрого выполнения и меньшего объема памяти. Эволюция числовых форматов в ИИ — это непрерывный процесс оптимизации. Форматы с меньшей точностью позволяют создавать более быстрые, эффективные и потенциально более дешевые системы ИИ, но компромиссы между точностью, динамическим диапазоном и аккуратностью должны быть тщательно рассмотрены. Новые аппаратные архитектуры (такие как Ampere, Ada Lovelace, Hopper, Blackwell) поддерживают все большее количество эффективных числовых форматов, что еще больше ускоряет развитие ИИ. В будущем мы можем ожидать появления еще более специализированных числовых форматов, разработанных специально для рабочих нагрузок ИИ.