Bfloat16 формат с плавающей запятой - Википедия - bfloat16 floating-point format
Плавающая точка форматы |
---|
IEEE 754 |
|
Другой |
В bfloat16 (Мозг Плавающая точка)[1][2] формат с плавающей точкой это формат номера компьютера занимающий 16 бит в память компьютера; он представляет собой широкий динамический диапазон числовых значений с помощью плавающая точка счисления. Этот формат является усеченной (16-битной) версией 32-битной Формат IEEE 754 с плавающей запятой одинарной точности (binary32) с целью ускорение машинное обучение и близкосенсорные вычисления.[3] Он сохраняет приблизительный динамический диапазон 32-битных чисел с плавающей запятой, сохраняя 8 биты экспоненты, но поддерживает только 8-битную точность, а не 24-битную значимое формата binary32. В большей степени, чем 32-битные числа с плавающей запятой одинарной точности, числа bfloat16 не подходят для целочисленных вычислений, но это не их предполагаемое использование. Bfloat16 используется для уменьшения требований к хранилищу и увеличения скорости вычислений алгоритмов машинного обучения.[4]
Формат bfloat16 используется в Intel Процессоры AI, Такие как Nervana ННП-Л1000, Xeon процессоры (AVX-512 BF16) и Intel ПЛИС,[5][6][7] Google Cloud ТПУ,[8][9][10] и TensorFlow.[10][11] ARMv8.6-A также поддерживает формат bfloat16.[12] По состоянию на октябрь 2019 г. AMD добавила поддержку формата в свой ROCm библиотеки.[13]
bfloat16 формат с плавающей запятой
bfloat16 имеет следующий формат:
- Знаковый бит: 1 бит
- Экспонента ширина: 8 бит
- Значительный точность: 8 бит (7 явно сохраненных), в отличие от 24 бит в классическом формате с плавающей запятой одинарной точности
Формат bfloat16, будучи усеченным IEEE 754 одинарной точности 32-битное число с плавающей запятой, позволяет быстро преобразование к и от 32-битного числа с плавающей запятой одинарной точности IEEE 754; при преобразовании в формат bfloat16 биты экспоненты сохраняются, в то время как поле значимости может быть уменьшено путем усечения (что соответствует округлить в сторону 0 ), игнорируя NaN особый случай. Сохранение разрядов экспоненты поддерживает диапазон 32-битных чисел с плавающей запятой ≈ 10−38 до ≈ 3 × 1038.[14]
Биты расположены следующим образом:
знак | экспонента (5 бит) | дробь (10 бит) | ||||||||||||||
┃ | ┌────────────┐ | ┌─────────────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 10 | 9 | 0 |
знак | экспонента (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 |
знак | экспонента (8 бит) | дробь (7 бит) | ||||||||||||||
┃ | ┌─────────────────────┐ | ┌────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 7 | 6 | 0 |
знак | экспонента (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 |
знак | экспонента (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 |
Контраст с bfloat16 и одинарной точностью
S | E | E | E | E | E | E | E | E | F | F | F | F | F | F | F | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж | ж |
Легенда
- S: знак
- F: дробь (конечная значимое ) в обоих форматах
- f: дробь (конечная значимая) в одинарная точность Только
Экспонентное кодирование
Двоичная экспонента с плавающей запятой bfloat16 кодируется с использованием смещение-двоичный представление с нулевым смещением 127; также известный как смещение экспоненты в стандарте IEEE 754.
- Eмин = 01ЧАС−7FЧАС = −126
- EМаксимум = FEЧАС−7FЧАС = 127
- Экспонентное смещение = 7FЧАС = 127
Таким образом, чтобы получить истинную экспоненту, как определено двоичным представлением смещения, смещение 127 должно быть вычтено из значения поля экспоненты.
Минимальное и максимальное значения поля экспоненты (00ЧАС и FFЧАС) интерпретируются особым образом, как в стандартных форматах IEEE 754.
Экспонента | Значащий ноль | Значащий и ненулевой | Уравнение |
---|---|---|---|
00ЧАС | нуль, −0 | субнормальные числа | (−1)знак×2−126× 0. Значащие биты |
01ЧАС, ..., ИПЧАС | нормализованное значение | (−1)знак×2экспонента бит-127× 1. Значащие биты | |
FFЧАС | ±бесконечность | NaN (тихо, сигнализирует) |
Минимальное положительное нормальное значение - 2−126 ≈ 1.18 × 10−38 а минимальное положительное (субнормальное) значение равно 2−126−7 = 2−133 ≈ 9.2 × 10−41.
Кодирование специальных значений
Положительная и отрицательная бесконечность
Как и в IEEE 754, положительная и отрицательная бесконечности представлены соответствующими знаковые биты, все 8 разрядов экспоненты установлены (FFшестнадцатеричный) и все значащие биты равны нулю. Ясно,
val s_exponent_signcnd + inf = 0_11111111_0000000-inf = 1_11111111_0000000
Не число
Как и в IEEE 754, NaN значения представлены любым битом знака, все 8 бит экспоненты установлены (FFшестнадцатеричный) и не все значащие биты равны нулю. Явно,
val s_exponent_signcnd + NaN = 0_11111111_klmnopq-NaN = 1_11111111_klmonpq
где хотя бы один из к, л, м, н, о, п, или же q равно 1. Как и в случае с IEEE 754, значения NaN могут быть тихими или сигнальными, хотя по состоянию на сентябрь 2018 года неизвестны способы использования сигнализации bfloat16 NaN.
Диапазон и точность
Bfloat16 предназначен для поддержки диапазона номеров от 32-битного Формат IEEE 754 с плавающей запятой одинарной точности (binary32), снизив точность с 24 до 8 бит. Это означает, что точность составляет от двух до трех десятичных цифр, а bfloat16 может представлять конечные значения примерно до 3,4 × 10.38.
Примеры
Эти примеры приведены в битах представление, в шестнадцатеричный и двоичный, значения с плавающей запятой. Это включает знак, (смещенную) экспоненту и значащую.
3f80 = 0 01111111 0000000 = 1c000 = 1 10000000 0000000 = −2
7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3.38953139 × 1038 (максимальное конечное положительное значение с точностью bfloat16) 0080 = 0 00000001 0000000 = 2−126 ≈ 1.175494351 × 10−38 (минимальное нормализованное положительное значение в точности bfloat16 и с плавающей запятой одинарной точности)
Максимальное положительное конечное значение нормального числа bfloat16 составляет 3,38953139 × 1038, чуть ниже (224 − 1) × 2−23 × 2127 = 3.402823466 × 1038, максимальное конечное положительное значение, представимое с одинарной точностью.
Нули и бесконечности
0000 = 0 00000000 0000000 = 08000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = бесконечностьff80 = 1 11111111 0000000 = −infinity
Особые ценности
4049 = 0 10000000 1001001 = 3,140625 ≈ π (pi) 3eab = 0 01111101 0101011 = 0,333984375 ≈ 1/3
NaNs
ffc1 = x 11111111 1000001 => qNaNff81 = x 11111111 0000001 => sNaN
Смотрите также
- Формат с плавающей запятой половинной точности: 16-битное число с плавающей запятой с 1-битным знаком, 5-битной экспонентой и 11-битным значащим, как определено IEEE 754
- ISO / IEC 10967, Независимая от языка арифметика
- Примитивный тип данных
- Minifloat
Рекомендации
- ^ Тейч, Пауль (2018-05-10). "Разрушение сопроцессора Google TPU 3.0 AI". Следующая платформа. Получено 2020-08-11.
Google изобрел свой собственный внутренний формат с плавающей запятой, названный «bfloat» от «плавающей запятой мозга» (после Google Brain).
- ^ Ван, Шибо; Канвар, Панкадж (23.08.2019). «BFloat16: секрет высокой производительности облачных TPU». Google Cloud. Получено 2020-08-11.
Этот настраиваемый формат с плавающей запятой называется «Brain Floating Point Format» или сокращенно bfloat16. Название происходит от Google Brain, исследовательской группы по искусственному интеллекту в Google, где и была задумана идея этого формата.
- ^ Тальявини, Джузеппе; Мах, Стефан; Росси, Давиде; Маронджу, Андреа; Бенин, Лука (2018). «Прецизионная платформа с плавающей запятой для вычислений со сверхнизким энергопотреблением». Конференция и выставка «Дизайн, автоматизация и испытания в Европе» (ДАТА) 2018. С. 1051–1056. arXiv:1711.10374. Дои:10.23919 / ДАТА 2018. 8342167. ISBN 978-3-9819263-0-9.
- ^ Д-р Ян Катресс (17 марта 2020 г.). «Интел»: планы озера Купер: почему важен BF16? ». Получено 2020-05-12.
Стандарт bfloat16 - это целевой способ представления чисел, которые дают диапазон полного 32-битного числа, но с размером данных 16-битного числа, сохраняя точность близкой к нулю, но немного более свободную с точностью около пределы стандарта. Стандарт bfloat16 имеет множество применений в алгоритмах машинного обучения, предлагая лучшую точность значений внутри алгоритма, предоставляя вдвое больше данных в любом заданном наборе данных (или удваивая скорость в этих разделах вычислений).
- ^ Хари Джонсон (23.05.2018). «Intel представляет Nervana Neural Net L-1000 для ускоренного обучения ИИ». VentureBeat. Получено 2018-05-23.
... Intel будет расширять поддержку bfloat16 на наши линейки продуктов AI, включая процессоры Intel Xeon и Intel FPGA.
- ^ Майкл Фельдман (23.05.2018). «Intel излагает новую дорожную карту для портфеля ИИ». ТОП500 суперкомпьютерных сайтов. Получено 2018-05-23.
Intel планирует поддерживать этот формат во всех своих продуктах AI, включая линейки Xeon и FPGA.
- ^ Лучиан Армасу (23.05.2018). «Intel выпустит Spring Crest, свой первый процессор нейронной сети, в 2019 году». Оборудование Тома. Получено 2018-05-23.
Intel заявила, что NNP-L1000 также будет поддерживать bfloat16, числовой формат, который используется всеми игроками индустрии машинного обучения для нейронных сетей. Компания также будет поддерживать bfloat16 в своих FPGA, Xeon и других продуктах машинного обучения. Выпуск Nervana NNP-L1000 запланирован на 2019 год.
- ^ "Доступные операции TensorFlow | Cloud TPU | Google Cloud". Google Cloud. Получено 2018-05-23.
На этой странице перечислены API-интерфейсы TensorFlow Python и операторы графиков, доступные в Cloud TPU.
- ^ Эльмар Хаусманн (26.04.2018). "Сравнение Google TPUv2 с Nvidia V100 в ResNet-50". Блог RiseML. Архивировано из оригинал на 2018-04-26. Получено 2018-05-23.
Для Cloud TPU Google рекомендовал использовать реализацию bfloat16 из официального репозитория TPU с TensorFlow 1.7.0. Реализации как TPU, так и GPU используют вычисления со смешанной точностью в соответствующей архитектуре и хранят большинство тензоров с половинной точностью.
- ^ а б Авторы Tensorflow (23.07.2018). «ResNet-50 с использованием BFloat16 на ТПУ». Google. Получено 2018-11-06.
- ^ Джошуа В. Диллон, Ян Лэнгмор, Дастин Тран, Юджин Бревдо, Шринивас Васудеван, Дэйв Мур, Брайан Паттон, Алекс Алеми, Мэтт Хоффман, Риф А. Саурус (28 ноября 2017 г.). Распределения TensorFlow (отчет). arXiv:1711.10604. Bibcode:2017arXiv171110604D. Проверено 23 мая 2018 г.
Все операции в дистрибутивах TensorFlow численно стабильны для половинной, одинарной и двойной точности с плавающей запятой (как типы TensorFlow: tf.bfloat16 (усеченная с плавающей запятой), tf.float16, tf.float32, tf.float64). Конструкторы классов имеют флаг validate_args для числовых утверждений
CS1 maint: несколько имен: список авторов (связь) - ^ «Расширения BFloat16 для Armv8-A». community.arm.com. Получено 2019-08-30.
- ^ "История версий ROCm". github.com. Получено 2019-10-23.
- ^ «Прямая трансляция, день 1: этап 8 (Google I / O '18) - YouTube». Google. 2018-05-08. Получено 2018-05-23.
Во многих моделях это прямая замена float-32.