Нейронні мережі, на основі яких будуються сучасні системи глибинного машинного самонавчання і штучного інтелекту, в більшості випадків використовують стандартний 32-розрядний формат чисел з плаваючою комою IEEE FP32.
Це забезпечує високу точність обчислень і кінцевого результату, але вимагає використання великих обсягів пам’яті і високопродуктивних процесорів, які споживають значну кількість енергії.
У системах ж з високими вимогами до швидкодії і з обмеженими обчислювальними ресурсами використовуються 8-розрядні цілі числа зі знаком INT8.
Це дозволяє отримати високу продуктивність систем штучного інтелекту, принісши в жертву точність обчислень і кінцевого результату.
У чому ж різниця між форматами FP32 і BF16? Число з плаваючою комою в стандартному форматі FP32 складається з 1 знакового біта, що визначає знак числа (+ або -), після нього слід 8-бітна експонента (ступінь числа), після якої йде 23-бітна мантиса (саме число).
І в сумі набираються повні 32 розряду.
Такий вибір був зроблений далеко не випадково, проведені експерименти показали, що якість роботи нейронних мереж набагато чутливіше до розміру експоненти, ніж мантиси.
І варіант BF16 є самим прийнятним компромісом..
Таким чином, число в BF16 складається з одного знакового біта, 8-бітної експоненти і 7-бітної мантиси, що в сумі становить повні 16 біт.
Для проведення тензорних операцій з числами в форматі BF16 потрібні набагато менші обчислювальні потужності, обсяги пам’яті та енергетичні витрати.
Можна поставити запитання, а чому б не використовувати в системах штучного інтелекту стандартний усічений формат чисел з плаваючою комою IEEE FP16? Адже цей формат досить успішно використовується в багатьох додатках, пов’язаних з комп’ютерною графікою і комп’ютерними іграми.
Число у форматі FP16 виглядає наступним чином – один знаковий біт, 5-бітна експонента і 10-бітна мантиса, що в сумі становить повні 16 біт.
Відразу можна відзначити, що усічена експонента визначає набагато менший динамічний діапазон чисел, ніж діапазон формату BF16, який майже дорівнює діапазону FP32.
По-друге, для перетворення числа FP32 в формат FP16 потрібно досить складна процедура, ніж найпростіша операція по усіканню розрядності мантиси, необхідна для перетворення FP32 в BF16.
І, по-третє, усічена мантиса формату BF16 дозволяє зробити шину блоків апаратних умножителей менше, ніж необхідно для формату FP16.
В результаті цього самі блоки умножителей для формату BF16 у вісім разів менше за займаною на кристалі чіпа площі, ніж умножители для FP32, і в два рази менше, ніж умножители для FP16.
І на закінчення слід зауважити, що формат BF16 є не єдиним форматом, розробленим для систем штучного інтелекту.
У 2017 році компанія Nervana запропонувала формат під назвою Flexpoint, який повинен був об’єднати всі переваги цілих чисел з числами з плаваючою комою.
По суті, цей формат є модифікацією чисел з фіксованою комою, які складаються з двох цілих чисел.
Перше число являє собою цілу частину числа до коми, друге – дробову частину числа (після коми).
Фахівці компанії Nervana доповнили формат числа з фіксованою комою ще і експонентою, однак, для прискорення операцій експонента була одна для всіх чисел, з яких складається тензор.
При такому підході множення тензорів могло бути вироблено за допомогою математики на основі дуже швидких цілочисельних операцій.
Але тут же виникла і проблема, пов’язана з вузьким динамічним діапазоном чисел, що мають одну і ту ж саму експоненту.
Ця проблема унеможливила “зліт” формату Flexpoint і навіть в перших прискорювачах компанії Nervana вже використовувався формат BF16.