Jump to content

формат чисел с плавающей запятой bfloat16

(Перенаправлено с BF16 )

bfloat16 мозг с ( плавающей запятой ) [1] [2] с плавающей запятой формат — это формат компьютерных чисел, занимающий 16 бит в памяти компьютера ; он представляет широкий динамический диапазон числовых значений с использованием плавающей точки счисления. Этот формат представляет собой укороченную (16-битную) версию 32-битного формата чисел с плавающей запятой одинарной точности IEEE 754 (binary32) с целью ускорения машинного обучения и околосенсорных вычислений . [3] Он сохраняет приблизительный динамический диапазон 32-битных чисел с плавающей запятой, сохраняя 8 битов экспоненты , но поддерживает только 8-битную точность, а не 24-битную мантсу форматаbinary32. В большей степени, чем 32-битные числа с плавающей запятой одинарной точности, числа bfloat16 непригодны для целочисленных вычислений, но это не их предполагаемое использование. Bfloat16 используется для снижения требований к памяти и увеличения скорости вычислений алгоритмов машинного обучения. [4]

Формат bfloat16 был разработан Google Brain , исследовательской группой в области искусственного интеллекта Google. Он используется во многих процессорах, графических процессорах и процессорах искусственного интеллекта , таких как процессоры Intel Xeon ( расширения AVX-512 BF16), графические процессоры Intel Data Center, Intel Nervana NNP-L1000, FPGA Intel и [5] [6] [7] AMD Zen , AMD Instinct Google Cloud , графические процессоры NVIDIA, TPU , [8] [9] [10] AWS Inferentia, AWS Trainium, ARMv8.6-A , [11] и Apple M2 [12] и поэтому А15 чипы и новее. Многие библиотеки поддерживают bfloat16, например CUDA , [13] Библиотека математических ядер Intel oneAPI , AMD ROCm , [14] Оптимизация библиотек ЦП AMD, PyTorch и TensorFlow . [10] [15] На этих платформах bfloat16 также может использоваться в арифметике смешанной точности , где числа bfloat16 могут обрабатываться и расширяться до более широких типов данных.

формат чисел с плавающей запятой bfloat16

[ редактировать ]

bfloat16 имеет следующий формат:

Формат bfloat16, представляющий собой сокращенное 32-битное число с плавающей запятой одинарной точности IEEE 754 , обеспечивает быстрое преобразование в 32-битное число с плавающей запятой одинарной точности IEEE 754 и обратно; при преобразовании в формат bfloat16 биты экспоненты сохраняются, в то время как поле мантиссы может быть уменьшено путем усечения (что соответствует округлению в сторону 0 ) или других механизмов округления , игнорируя особый случай NaN . Сохранение битов экспоненты поддерживает диапазон 32-битного числа с плавающей запятой ≈ 10. −38 до ≈ 3 × 10 38 . [16]

Биты расположены следующим образом:

IEEE половинной точности, 16-битное число с плавающей запятой
знак экспонента (5 бит) дробь (10 бит)
  ┃ ┌────────┐ ┌───────────────────────────┐
 0   0   1   1   0   0   0   1   0   0   0   0   0   0   0   0 
15 14 10 9 0
 
bfloat16
знак экспонента (8 бит) дробь (7 бит)
  ┃ ┌────────────────┐ ┌───────────────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0 
15 14 7 6 0
 
TensorFloat от NVidia (19 бит)
знак экспонента (8 бит) дробь (10 бит)
  ┃ ┌───────────────┐ ┌────────────────────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0   0   0   0 
18 17 10 9 0
 
Формат AMD fp24
знак экспонента (7 бит) дробь (16 бит)
  ┃ ┌─────────────┐ ┌─────────────────────────────────────┐
 0   0   1   1   1   1   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0 
23 22 16 15 0
 
Формат Pixar PXR24
знак экспонента (8 бит) дробь (15 бит)
  ┃ ┌────────────────┐ ┌──────────────────────────────────┐
 0   0   1   1   1   1   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0 
23 22 15 14 0
 
одинарной точности IEEE 754, 32-битное число с плавающей запятой
знак экспонента (8 бит) дробь (23 бита)
  ┃ ┌────────────────┐ ┌────────────────────────────────────────────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 
31 30 23 22 0

Экспоненциальное кодирование

[ редактировать ]

Двоичная экспонента с плавающей запятой bfloat16 кодируется с использованием двоичного представления смещения , при этом нулевое смещение равно 127; также известное как смещение экспоненты в стандарте IEEE 754.

Таким образом, чтобы получить истинный показатель степени, определенный в двоичном представлении смещения, смещение 127 необходимо вычесть из значения поля показателя степени.

Минимальное и максимальное значения поля показателя степени (00 H и FF H ) интерпретируются особым образом, как и в стандартных форматах IEEE 754.

Экспонента Значимый ноль Значимое и ненулевое Уравнение
0000Ч ноль , −0 субнормальные числа (−1) знаковый бит ×2 −126 × 0.значащие биты
01 Ч , ..., ФЭ Ч нормализованное значение (−1) знаковый бит ×2 биты экспоненты - 127 × 1.значимые биты
ФФ Ч ± infinity NaN (тихо, сигнализация)

Минимальное положительное нормальное значение равно 2. −126 ≈ 1.18 × 10 −38 а минимальное положительное (субнормальное) значение равно 2 −126−7 = 2 −133 ≈ 9.2 × 10 −41 .

Округление и преобразование

[ редактировать ]

Наиболее распространенным вариантом использования является преобразование между IEEE 754binary32 и bfloat16. В следующем разделе описывается процесс преобразования и схема его округления при преобразовании. Обратите внимание, что существуют и другие возможные сценарии преобразования формата в bfloat16 или из него. Например, int16 и bfloat16.

  • С бинарного32 на bfloat16. Когда bfloat16 был впервые представлен как формат хранения, [15] преобразование из IEEE 754binary32 (32-битная плавающая запятая) в bfloat16 представляет собой усечение ( округление в сторону 0 ). Позже, когда оно становится входом блоков матричного умножения, преобразование может иметь различные механизмы округления в зависимости от аппаратных платформ. Например, для Google TPU схема округления при преобразовании — округление до ближайшего четного; [17] ARM использует режим округления до нечетного, отличный от IEEE; [18] для NVIDIA он поддерживает преобразование чисел с плавающей запятой в точность bfloat16 в режиме округления до ближайшего четного. [19]
  • С bfloat16 на бинарный32. Поскольку бинарный32 может представлять все точные значения в bfloat16, преобразование просто дополняет 16 нулей в битах мантиссы. [17]

Кодирование специальных значений

[ редактировать ]

Положительная и отрицательная бесконечность

[ редактировать ]

Как и в IEEE 754 , положительная и отрицательная бесконечность представлены соответствующими битами знака , всеми 8 установленными битами экспоненты (FF hex ) и всеми битами мантиссы, равными нулю. Явно,

val    s_exponent_signcnd
+inf = 0_11111111_0000000
-inf = 1_11111111_0000000

Не число

[ редактировать ]

Как и в IEEE 754 , значения NaN представлены либо знаковым битом, либо всеми 8 установленными битами экспоненты (FF hex ), а не всеми значащими битами, равными нулю. Явно,

val    s_exponent_signcnd
+NaN = 0_11111111_klmnopq
-NaN = 1_11111111_klmnopq

где хотя бы один из k, l, m, n, o, p или q равен 1. Как и в IEEE 754, значения NaN могут быть тихими или сигнальными, хотя по состоянию на сентябрь 2018 г. неизвестных способов использования сигнализации bfloat16 NaN.

Дальность и точность

[ редактировать ]

Bfloat16 предназначен для поддержки диапазона чисел от 32-битного формата с плавающей запятой одинарной точности IEEE 754 (binary32), при этом уменьшая точность с 24 бит до 8 бит. Это означает, что точность составляет от двух до трех десятичных цифр, а bfloat16 может представлять конечные значения примерно до 3,4 × 10. 38 .

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

3f80 = 0 01111111 0000000 = 1
c000 = 1 10000000 0000000 = −2
7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3.38953139 × 1038 (max finite positive value in bfloat16 precision)
0080 = 0 00000001 0000000 = 2−126 ≈ 1.175494351 × 10−38 (min normalized positive value in bfloat16 precision and single-precision floating point)

Максимальное положительное конечное значение нормального числа bfloat16 составляет 3,38953139 × 10. 38 , чуть ниже (2 24 − 1) × 2 −23 × 2 127 = 3.402823466 × 10 38 , максимальное конечное положительное значение, представимое с одинарной точностью.

Нули и бесконечности

[ редактировать ]
0000 = 0 00000000 0000000 = 0
8000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = infinity
ff80 = 1 11111111 0000000 = −infinity

Особые значения

[ редактировать ]
4049 = 0 10000000 1001001 = 3.140625 ≈ π ( pi )
3eab = 0 01111101 0101011 = 0.333984375 ≈ 1/3
ffc1 = x 11111111 1000001 => qNaN
ff81 = x 11111111 0000001 => sNaN

См. также

[ редактировать ]
  1. ^ Тейх, Пол (10 мая 2018 г.). «Разрывая AI-сопроцессор TPU 3.0 от Google» . Следующая платформа . Проверено 11 августа 2020 г. Google изобрел свой собственный внутренний формат с плавающей запятой, названный «bfloat», что означает «мозг с плавающей запятой» (в честь Google Brain).
  2. ^ Ван, Шибо; Канвар, Панкадж (23 августа 2019 г.). «BFloat16: секрет высокой производительности облачных TPU» . Гугл облако . Проверено 11 августа 2020 г. Этот пользовательский формат с плавающей запятой называется «Формат с плавающей запятой Brain» или для краткости «bfloat16». Название происходит от «Google Brain», исследовательской группы искусственного интеллекта в Google, где была задумана идея этого формата.
  3. ^ Тальявини, Джузеппе; Мах, Стефан; Росси, Давиде; Маронгиу, Андреа; Бенин, Лука (2018). «Трансточная платформа с плавающей запятой для вычислений со сверхнизким энергопотреблением». Конференция и выставка «Дизайн, автоматизация и испытания в Европе» 2018 (ДАТА) . стр. 1051–1056. arXiv : 1711.10374 . дои : 10.23919/ДАТА.2018.8342167 . ISBN  978-3-9819263-0-9 . S2CID   5067903 .
  4. ^ Доктор Ян Катресс (17 марта 2020 г.). «Разведка: Планы Купер-Лейк: Почему важен BF16?» . Проверено 12 мая 2020 г. Стандарт bfloat16 — это целевой способ представления чисел, который дает диапазон полного 32-битного числа, но с размером данных 16-битного числа, сохраняя точность, близкую к нулю, но немного более свободный с точностью, близкой к пределы стандарта. Стандарт bfloat16 широко используется в алгоритмах машинного обучения, предлагая более высокую точность значений внутри алгоритма, одновременно обеспечивая удвоение объема данных в любом заданном наборе данных (или удвоение скорости в этих разделах вычислений).
  5. ^ Хари Джонсон (23 мая 2018 г.). «Intel представляет Nervana Neural Net L-1000 для ускоренного обучения ИИ» . ВенчурБит . Проверено 23 мая 2018 г. ...Intel будет расширять поддержку bfloat16 для всех наших линеек продуктов искусственного интеллекта, включая процессоры Intel Xeon и FPGA Intel.
  6. ^ Майкл Фельдман (23 мая 2018 г.). «Intel представляет новую дорожную карту для портфеля ИИ» . ТОП500 суперкомпьютерных сайтов . Проверено 23 мая 2018 г. Intel планирует поддерживать этот формат во всех своих продуктах искусственного интеллекта, включая линейки Xeon и FPGA.
  7. ^ Люсиан Армасу (23 мая 2018 г.). «Intel выпустит Spring Crest, свой первый процессор нейронной сети, в 2019 году» . Аппаратное обеспечение Тома . Проверено 23 мая 2018 г. Intel заявила, что NNP-L1000 также будет поддерживать bfloat16, числовой формат, который принимается всеми игроками отрасли машинного обучения для нейронных сетей. Компания также будет поддерживать bfloat16 в своих FPGA, Xeon и других продуктах машинного обучения. Выпуск Nervana NNP-L1000 запланирован на 2019 год.
  8. ^ «Доступные операции TensorFlow | Cloud TPU | Google Cloud» . Гугл облако . Проверено 23 мая 2018 г. На этой странице перечислены API-интерфейсы TensorFlow Python и операторы графов, доступные в Cloud TPU.
  9. ^ Эльмар Хаусманн (26 апреля 2018 г.). «Сравнение TPUv2 от Google с V100 от Nvidia на ResNet-50» . Блог RiseML . Архивировано из оригинала 26 апреля 2018 г. Проверено 23 мая 2018 г. Для Cloud TPU Google рекомендовал использовать реализацию bfloat16 из официального репозитория TPU с TensorFlow 1.7.0. Реализации как TPU, так и GPU используют вычисления смешанной точности в соответствующей архитектуре и хранят большинство тензоров с половинной точностью.
  10. ^ Перейти обратно: а б Авторы Tensorflow (23 июля 2018 г.). «ResNet-50 с использованием BFloat16 на ТПУ» . Google . Проверено 6 ноября 2018 г.
  11. ^ «Расширения BFloat16 для Armv8-A» . сообщество.arm.com . 29 августа 2019 года . Проверено 30 августа 2019 г.
  12. ^ «AArch64: добавить поддержку новых процессоров Apple · llvm/llvm-project@677da09» . Гитхаб . Проверено 8 мая 2023 г.
  13. ^ «Библиотека CUDA bloat16 Intrinsics» .
  14. ^ «История версий ROCm» . github.com . Проверено 23 октября 2019 г.
  15. ^ Перейти обратно: а б Джошуа В. Диллон, Ян Лэнгмор, Дастин Тран, Юджин Бревдо, Шринивас Васудеван, Дэйв Мур, Брайан Паттон, Алекс Алеми, Мэтт Хоффман, Риф А. Саурус (28 ноября 2017 г.). Распределения TensorFlow (отчет). arXiv : 1711.10604 . Бибкод : 2017arXiv171110604D . По состоянию на 23 мая 2018 г. Все операции в распределениях TensorFlow численно стабильны при половинной, одинарной и двойной точности с плавающей запятой (как типы TensorFlow: tf.bfloat16 (усеченная плавающая запятая), tf.float16, tf.float32, tf.float64). Конструкторы классов имеют флаг validate_args для числовых утверждений. {{cite report}}: CS1 maint: несколько имен: список авторов ( ссылка )
  16. ^ «Прямая трансляция, день 1: этап 8 (Google I/O '18) — YouTube» . Google . 08 мая 2018 г. Проверено 23 мая 2018 г. Во многих моделях это замена поплавку-32.
  17. ^ Перейти обратно: а б «Числовой формат bfloat16» . Гугл облако . Проверено 11 июля 2023 г. В TPU схема округления при преобразовании округляется до ближайшего четного и переполняется до inf.
  18. ^ «Архитектура набора команд Arm A64» . Developer.arm.com . Проверено 26 июля 2023 г. Использует режим округления от округления до нечетности, отличный от IEEE.
  19. ^ «1.3.5. Точное преобразование и перемещение данных Bfloat16» (PDF) . docs.nvidia.com . п. 199 . Проверено 26 июля 2023 г. Преобразует число с плавающей точкой в ​​точность nv_bfloat16 в режиме округления до ближайшего четного и возвращает nv_bfloat16 с преобразованным значением.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c9c37045dc12ef66141269ce6aff1919__1719840120
URL1:https://arc.ask3.ru/arc/aa/c9/19/c9c37045dc12ef66141269ce6aff1919.html
Заголовок, (Title) документа по адресу, URL1:
bfloat16 floating-point format - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)