Малые числа, большие возможности: как плавающая запятая ускоряет ИИ и технологии

Привет, Хабр! С вами снова ServerFlow, и сегодня мы решили погрузиться в увлекательный мир чисел с плавающей запятой. Вы когда-нибудь задумывались, почему существуют разные виды этих чисел и как они влияют на производительность наших процессоров и видеокарт? Как малые числа с плавающей запятой помогают развивать нейросети и искусственный интеллект? Давайте вместе разберемся в этих вопросах, раскроем тайны стандарта IEEE 754 и узнаем, какое значение имеют большие и маленькие числа с плавающей запятой в современных вычислениях.

Стандарт IEEE 754

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

7eb493e7d7fc0e25552bd7ccea238ceb.png

Появление аппаратной поддержки


После утверждения стандарта IEEE 754 производители процессоров начали активно внедрять аппаратную поддержку операций с числами с плавающей запятой. Появились математические сопроцессоры, такие как Intel 8087, которые работали в паре с основным CPU и ускоряли вычисления в десятки раз.
Вскоре функции сопроцессоров были интегрированы непосредственно в центральные процессоры. Например, начиная с Intel 486DX, FPU (Floating Point Unit) стал неотъемлемой частью CPU. Это позволило выполнять сложные математические операции быстрее и эффективнее, открыв путь к развитию графики, научных вычислений и многих других областей.
Современные процессоры оснащены мощными FPU, поддерживающими различные форматы чисел с плавающей запятой и способными выполнять миллиарды операций в секунду. Дополнительно были разработаны векторные инструкции, такие как SSE, AVX и AVX-512, которые позволяют выполнять операции над несколькими числами одновременно, существенно повышая производительность.

Внешний вид математического сопроцессора Intel 8087

Внешний вид математического сопроцессора Intel 8087

Плавающая запятая в GPU


Графические процессоры (GPU) изначально были созданы для ускорения рендеринга графики, где операции с числами с плавающей запятой играют ключевую роль. Их архитектура ориентирована на массовый параллелизм, что позволяет выполнять тысячи и даже миллионы операций одновременно.
С развитием технологий GPU стали использоваться не только для графики, но и для общих вычислений (General-Purpose computing on Graphics Processing Units, GPGPU). Языки программирования CUDA от NVIDIA и OpenCL от Khronos Group открыли доступ к мощностям GPU для решения разнообразных задач, включая научные расчеты, моделирование и, конечно же, обучение нейросетей.
Одним из ключевых факторов эффективности GPU является поддержка различных форматов чисел с плавающей запятой, включая малые форматы, такие как FP16 (16-битная полуточная точность) и даже INT8 (8-битные целые числа). Это позволяет оптимизировать вычисления, снижая потребление энергии и увеличивая скорость обработки данных.

Сравнение режимов работы FP16, INT8 и INT4 на базе тензорных ядер Nvidia Turing

Сравнение режимов работы FP16, INT8 и INT4 на базе тензорных ядер Nvidia Turing

Точность вычислений и роль квантования в работе с ИИ


В современном мире искусственный интеллект и нейронные сети стали ключевыми элементами многих технологий. Обработка огромных объемов данных и сложных моделей требует значительных вычислительных ресурсов. Для оптимизации работы таких систем применяются различные методы, включая использование чисел с пониженной точностью и аппаратно ускоренные вычисления, что позволяет эффективно обрабатывать информацию и ускорять различные процессы.

Точность чисел

Разница между FP32, FP16 и INT8 в рамках работы архитектуры Nvidia Pascal

Разница между FP32, FP16 и INT8 в рамках работы архитектуры Nvidia Pascal

Числа могут быть представлены с разной точностью. Например, FP32 (32-битное представление с плавающей запятой) позволяет очень точно хранить вещественные числа, что критически важно для обучения моделей, где требуется высокая точность для корректной настройки весов.
Однако на последующих этапах, а также во время использования, такая точность может быть излишней, так как она увеличивает объем используемой памяти и негативно влияет на время вычислений. Чтобы оптимизировать процесс обучения ИИ, можно использовать FP16 (16-битное представление с плавающей запятой), которое является промежуточным вариантом, но сохраяет достаточную точность для большинства задач.
В большинстве «бытовых» задач, когда модель уже обучена, разумно использовать менее точные представления чисел, такие как INT8 (8-битные целые числа). Использование таких чисел помогает обрабатывать большинство запросов без потери качества модели, особенно в задачах обработки речи и текста.

Квантизация нейросетей

Квантизация нейросети из FP32 в INT8

Квантизация — это процесс преобразования чисел из более точных форматов (например, FP32) в менее точные (например, INT8). Основная идея заключается в том, что с помощью квантования можно значительно сократить объем вычислений и потребление памяти, минимально влияя на качество результатов.

Кратко рассмотрим сам процесс:

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

  2. Масштаб и сдвиг: масштаб (scale) определяет, насколько сильно исходные числа будут «растянуты» или «сжаты» для соответствия новому диапазону, а сдвиг (zero-point) позволяет корректно отображать отрицательные и положительные числа, сдвигая диапазон значений.

Визуально для нас — это выглядит как картинка, которую мы видим в 32-битном формате, но уменьшили настройки количества цветов до 128 оттенков. Мы упростили изображение, но картинка осталась узнаваемой.

Влияние количества цветов на визуальную составляющую картинки

Влияние количества цветов на визуальную составляющую картинки

Архитектуры, оптимизированные для ИИ


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

Nvidia и их графические ускорители


Корпорация Nvidia уделяет огромное внимание разработке GPU, оптимизированных для обучения и инференса ИИ. Успех их ускорителей во многом обеспечивается специализированными тензорными ядрами, которые значительно ускоряют работу с числами с плавающей запятой, а также тщательной проработкой программной поддержки своих продуктов. Для лучшего понимания отметим несколько особенностей ускорителей Nvidia:

  • Продвинутые тензорные ядра, аппаратно ускоряющие различные режимы вычислений: BF16, TF16, FP32 и другие;

  • Наличие специализированных архитектур, нацеленных на работу с ИИ: Blackwell, Hooper, Volta;

  • Высокая энергоэффективность, позволяющая снизить затраты на электроэнергию и уменьшить тепловыделение.

Поддержка различных форматов вычислений на базе ускорителей Nvidia Tesla

Поддержка различных форматов вычислений на базе ускорителей Nvidia Tesla

Другие компании и решения

  • AMD: развивает решения для ИИ и HPC. Ускорители Radeon Instinct с матричными ядрами ускоряют задачи машинного обучения. Серия AMD Instinct MI300X на архитектуре CDNA™ 3 поддерживает форматы от INT8 до FP64, обеспечивая высокую производительность и энергоэффективность.

  • Google: разработали специализированные процессоры TPU (Tensor Processing Unit), оптимизированные для работы с форматами Bfloat16 и INT8.

  • Ampere Computing: выпускает уникальные ARM процессоры с встроенными 128-битными векторными блоками, которые эффективно выполняют операции линейной алгебры, являющиеся основой большинства алгоритмов машинного обучения.

  • Intel: интегрирует технологии для ускорения операций с малой точностью в свои процессоры, такие как Intel DL Boost. Кроме того, Intel предлагает специализированные ускорители Gaudi для ускорения обучения и инференса ИИ, а также графические процессоры Intel GPU Max, которые могут служить отличным решением для высокопроизводительных вычислений.

Процесс квантизации модели из FP32 в INT8 с помощью Intel DL Boost

Процесс квантизации модели из FP32 в INT8 с помощью Intel DL Boost

Практическое применение малых чисел

Использование малых чисел с плавающей запятой имеет широкое практическое применение в различных областях.

Мобильные устройства и встраиваемые системы

Ограниченные ресурсы мобильных устройств требуют эффективного использования памяти и энергии. Квантизация моделей позволяет запускать сложные нейросети на смартфонах, планшетах и IoT-устройствах, обеспечивая функции распознавания речи, обработки изображений и другие ИИ-сервисы.

Облачные сервисы и дата-центры

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

Автомобильная промышленность

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

Будущее малых чисел с плавающей запятой

Изображение из статьи IEEE Spectrum про Posit

Изображение из статьи IEEE Spectrum про Posit

Развитие технологий продолжается, и мы можем ожидать появления новых форматов и методов обработки данных.

  • Новые форматы данных: возможно появление еще более эффективных форматов чисел, таких как Posit, которые обещают улучшить точность и производительность.

  • Аппаратные инновации: развитие квантовых вычислений и нейроморфных чипов может изменить подход к обработке информации.

  • Алгоритмические улучшения: новые методы обучения и оптимизации могут позволить использовать еще более низкие уровни точности без потери качества моделей.

Заключение

Числа с плавающей запятой — это не просто математическая абстракция, а ключевой инструмент современной вычислительной техники. Различные форматы этих чисел позволяют адаптироваться к специфическим требованиям задач, находя баланс между точностью, скоростью и эффективностью.
А приходилось ли вам в ваших задачах использовать оптимизацию затрагивающую плавающие числа, или быть может вовсе самостоятельно проектировать новую структуру для хранения каких-то специфических данных особого объёма или точности? Будет интересно почитать в комментариях и спасибо за прочтение!

© Habrahabr.ru