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

Стандарт IEEE 754

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

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


После утверждения стандарта 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

Квантизация — это процесс преобразования чисел из более точных форматов (например, 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, которые обещают улучшить точность и производительность.

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

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

Заключение

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

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

Комментарии (15)


  1. SF_author
    28.09.2024 14:45
    +1

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

    Описанный в статье MI300X и его спеки на сайте AMD
    Описанный в статье MI300X и его спеки на сайте AMD


    1. kenskiy Автор
      28.09.2024 14:45
      +1

      В планах раскрыть тему и более «точных» чисел до которых не доходят аппаратные решения)


  1. OrkBiotechnologist
    28.09.2024 14:45
    +3

    Интересно, до какого предела можно квантизировать нейронки? И наоборот, до какого предела большие числа будут сказываться на их точности? Можно ли скукожить часть слоёв вообще до bool, где всего 1 бит, на 0, либо 1.

    Ну и ещё интересно, будет ли IEEE754 на аппаратном уровне замещён на что-то, что не будет по своей природе неизбежно привносить энтропию в вычисления из-за природы алгоритма по которому формат преобразует числа с плавающей запятой?


    1. NeoCode
      28.09.2024 14:45
      +6

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


      1. iShrimp
        28.09.2024 14:45
        +3

        Есть разнообразные бинарные нейронные сети на FPGA, и теоретически возможно их обучение на самом устройстве (при наличии поддержки dynamic partial reconfiguration), но для этого нужно либо для каждой 1-битной связи хранить градиент, либо обучать стохастически, что даёт намного более медленную сходимость.


    1. Krypt
      28.09.2024 14:45
      +3

      По моим (делитанстским) наблюдениям, бОльшее значение чем количество параметров имеет сколько памяти под эти параметры используются.

      То есть, при одинаковом объёме используемой памяти модель с малым числом параметров в f16 (float 16 bit) даст такое же качество как Q4 (int 4 bit) с бОльшем количеством.

      Многие отзываются, что Llama3 сильно страдает от квантования, например. Лично я замечаю разницу между f16 и Q6К - Q6K намного быстрее теряет когерентность и перестаёт следовать коммандам в длинных чатах.


    1. Sap_ru
      28.09.2024 14:45
      +2

      То ли Intel, то ли IBM уже больше пяти лет назад научились делать бинарные нейронки с очень неплохими характеристиками. Не любую нейросеть можно квантовать до двух значений, но то, что можно, можно запихать супер-быстрые аппаратные реализации.


  1. avereshagina
    28.09.2024 14:45
    +3

    Жаль только разработка нейросетей не спасла интел от поглощения куалкомом…


    1. Krypt
      28.09.2024 14:45
      +2

      Intel феерично зафакапили 13 и 14 поколения процессоров (постепенно в течении 6-24 месяцев выходят из строя из-за проблемного управления питанием, которое запрашивает завышенное напряжение). Им по сути гризит возврат по горантии каждого второго процессора выпущенного за последние 2 года. Я честно говоря не знаю, что и тут может спасти, кроме может быть прямого вмешательства США ("too big to fail").


      1. 0Bannon
        28.09.2024 14:45
        +1

        в течениЕ


        1. Krypt
          28.09.2024 14:45

          Если вы хотите придраться к опечаткам, то в этом сообщении есть ещё как минимум три. Удачи в поисках.


    1. unreal_undead2
      28.09.2024 14:45

      А что, уже?


      1. Krypt
        28.09.2024 14:45

        На удивление да, 3 дня назад причём


        1. unreal_undead2
          28.09.2024 14:45

          Так быстро с антимонопольщиками договорились?


  1. RolexStrider
    28.09.2024 14:45
    +1

    После утверждения стандарта IEEE 754 производители процессоров начали активно внедрять аппаратную поддержку операций с числами с плавающей запятой

    Ради исторической справедливости. Было немного не так: пока комитет IEEE пытался выработать стандарт (а это были споры, дебаты, бюрократия), Intel без всяких комитетов "выкатила" 8087, индустрия активно подхватила его, и IEEE приняли решение назначить уже готовую реализацию Intel стандартом.