Bfloat16 kayan nokta biçimi - bfloat16 floating-point format - Wikipedia

bfloat16 (Beyin Kayan nokta)[1][2] kayan nokta biçimi bir bilgisayar numarası biçimi işgal 16 bit içinde bilgisayar hafızası; geniş bir dinamik aralık kullanarak sayısal değerlerin kayan taban noktası. Bu biçim, 32 bitlik bir kısaltılmış (16 bit) sürümüdür. IEEE 754 tek duyarlıklı kayan nokta biçimi (binary32) niyeti ile hızlanan makine öğrenme ve sensöre yakın hesaplama.[3] 8'i koruyarak 32 bitlik kayan noktalı sayıların yaklaşık dinamik aralığını korur. üslü bitler, ancak 24 bit yerine yalnızca 8 bitlik hassasiyeti destekler anlam binary32 biçiminin. Tek duyarlıklı 32 bitlik kayan noktalı sayılardan daha çok, bfloat16 sayıları tamsayı hesaplamaları için uygun değildir, ancak amaçlanan kullanımları bu değildir. Bfloat16, depolama gereksinimlerini azaltmak ve makine öğrenimi algoritmalarının hesaplama hızını artırmak için kullanılır.[4]

Bfloat16 formatı Intel’de kullanılmaktadır AI işlemciler, gibi Nervana NNP-L1000, Xeon işlemciler (AVX-512 BF16 uzantıları) ve Intel FPGA'lar,[5][6][7] Google Cloud TPU'lar,[8][9][10] ve TensorFlow.[10][11] ARMv8.6-A ayrıca bfloat16 biçimini de destekler.[12] Ekim 2019 itibarıyla, AMD format için destek ekledi. ROCm kütüphaneler.[13]

bfloat16 kayan nokta biçimi

bfloat16 aşağıdaki biçime sahiptir:

Bfloat16 biçimi, kısaltılmış IEEE 754 tek duyarlıklı 32-bit float, hızlı dönüştürmek bir IEEE 754 tek duyarlıklı 32 bit kayan noktaya ve buradan; bfloat16 formatına dönüştürüldüğünde, üslü bitler korunurken, anlamlılık alanı kesme ile azaltılabilir (dolayısıyla 0'a yuvarla ), görmezden gelerek NaN özel durum. Üslü bitleri korumak, 32 bitlik kayan noktaların ≈ 10 aralığını korur−38 ≈ 3 × 10'a kadar38.[14]

Bitler şu şekilde düzenlenmiştir:

IEEE yarı hassas 16 bit kayan nokta
işaretüs (5 bit)kesir (10 bit)
  ┃┌────────────┐┌─────────────────────────┐
 0  0  1  1  0  0  0  1  0  0  0  0  0  0  0  0 
15141090
IEEE 754 tek duyarlıklı 32 bit kayan nokta
işaretüs (8 bit)kesir (23 bit)
  ┃┌────────────────────┐┌─────────────────────────────────────────────────────────────────┐
 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 
313023220
bfloat16
işaretüs (8 bit)kesir (7 bit)
  ┃┌─────────────────────┐┌────────────────┐
 0  0  1  1  1  1  1  0  0  0  1  0  0  0  0  0 
1514760
NVidia'nın TensorFloat'ı
işaretüs (8 bit)kesir (10 bit)
  ┃┌────────────────────┐┌────────────────────────┐
 0  0  1  1  1  1  1  0  0  0  1  0  0  0  0  0  0  0  0 
18171090
AMD'nin fp24 formatı
işaretüs (7 bit)kesir (16 bit)
  ┃┌───────────────────┐┌─────────────────────────────────────┐
 0  0  1  1  1  1  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
232216150

Bfloat16 ile kontrast ve tek hassasiyet

SEEEEEEEEFFFFFFFffffffffffffffff

Efsane

  •   S: işaret
  •   E: üs
  •   F: kesir (sondaki anlam ) her iki biçimde de
  •   f: kesir (sondaki anlamlı) Tek hassasiyet sadece

Üslü kodlama

Bfloat16 ikili kayan noktalı üs, bir ofset ikili sıfır ofseti 127 ile temsil; IEEE 754 standardında üstel sapma olarak da bilinir.

Bu nedenle, ofset-ikili gösterimi tarafından tanımlanan gerçek üssü elde etmek için, 127 ofsetinin üs alanının değerinden çıkarılması gerekir.

Üs alanının minimum ve maksimum değerleri (00H ve FFH), IEEE 754 standart formatlarında olduğu gibi özel olarak yorumlanır.

ÜsAnlamlı ve sıfırAnlamlı ve sıfır olmayanDenklem
00Hsıfır, −0normal altı sayılar(−1)tabela×2−126× 0.significandbits
01H, ..., FEHnormalleştirilmiş değer(−1)tabela×2üs bitleri − 127× 1. önemliandbits
FFH±sonsuzlukNaN (sessiz, sinyal)

Minimum pozitif normal değer 2'dir−126 ≈ 1.18 × 10−38 ve minimum pozitif (normal altı) değer 2'dir−126−7 = 2−133 ≈ 9.2 × 10−41.

Özel değerlerin kodlanması

Pozitif ve negatif sonsuzluk

Tıpkı olduğu gibi IEEE 754, pozitif ve negatif sonsuzluk karşılıklarıyla temsil edilir işaret bitleri 8 üslü bit setinin tümü (FFaltıgen) ve tüm anlamlı bitler sıfır. Açıkça,

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

Sayı değil

Tıpkı olduğu gibi IEEE 754, NaN değerler her iki işaret bitiyle, 8 üslü bit setiyle (FFaltıgen) ve tüm anlamlı bitler sıfır değildir. Açıkça,

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

en az biri nerede k, l, m, n, o, p, veya q 1. IEEE 754'te olduğu gibi, NaN değerleri sessiz veya sinyal verici olabilir, ancak Eylül 2018 itibarıyla bfloat16 NaN'lerinin sinyalizasyonunun bilinen kullanımları olmamasına rağmen.

Menzil ve hassasiyet

Bfloat16, 32 bitlik sayı aralığını korumak için tasarlanmıştır. IEEE 754 tek duyarlıklı kayan nokta biçimi (ikili32), hassasiyeti 24 bitten 8 bite düşürürken. Bu, kesinliğin iki ila üç ondalık basamak arasında olduğu ve bfloat16'nın yaklaşık 3.4 × 10'a kadar sonlu değerleri temsil edebileceği anlamına gelir38.

Örnekler

Bu örnekler bit olarak verilmiştir temsil, içinde onaltılık ve ikili, kayan nokta değerinin. Buna işaret, (önyargılı) üs ve anlamlılık dahildir.

3f80 = 0 01111111 0000000 = 1c000 = 1 10000000 0000000 = −2
7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3.38953139 × 1038 (bfloat16 hassasiyetinde maksimum sonlu pozitif değer) 0080 = 0 00000001 0000000 = 2−126 ≈ 1.175494351 × 10−38 (bfloat16 duyarlılığında ve tek duyarlıklı kayan noktada minimum normalleştirilmiş pozitif değer)

Normal bir bfloat16 sayısının maksimum pozitif sonlu değeri 3.38953139 × 10'dur38, biraz aşağıda (224 − 1) × 2−23 × 2127 = 3.402823466 × 1038, tek duyarlıkta gösterilebilen maksimum sonlu pozitif değer.

Sıfırlar ve sonsuzluklar

0000 = 0 00000000 0000000 = 08000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = infinityff80 = 1 11111111 0000000 = −sonsuz

Özel değerler

4049 = 0 10000000 1001001 = 3,140625 ≈ π (pi) 3eab = 0 01111101 0101011 = 0,33984375 ≈ 1/3

NaN'ler

ffc1 = x 11111111 1000001 => qNaNff81 = x 11111111 0000001 => sNaN

Ayrıca bakınız

Referanslar

  1. ^ Teich, Paul (2018-05-10). "Google'ın TPU 3.0 AI Yardımcı İşlemcisini Parçalamak". Sonraki Platform. Alındı 2020-08-11. Google, "beyin kayan nokta" için (Google Brain'den sonra) "bfloat" adlı kendi dahili kayan nokta biçimini icat etti.
  2. ^ Wang, Shibo; Kanwar, Pankaj (2019-08-23). "BFloat16: Cloud TPU'larda yüksek performansın sırrı". Google Cloud. Alındı 2020-08-11. Bu özel kayan nokta biçimine "Beyin Kayan Nokta Biçimi" veya kısaca "bfloat16" denir. İsim, bu format fikrinin ortaya çıktığı Google'da bir yapay zeka araştırma grubu olan “Google Brain” den geliyor.
  3. ^ Tagliavini, Giuseppe; Mach, Stefan; Rossi, Davide; Marongiu, Andrea; Benin Luca (2018). "Ultra düşük güçte bilgi işlem için hassas kayan nokta platformu". 2018 Avrupa Konferansı ve Sergisinde Tasarım, Otomasyon ve Test (TARİH). s. 1051–1056. arXiv:1711.10374. doi:10.23919 / TARİH.2018.8342167. ISBN  978-3-9819263-0-9.
  4. ^ Ian Cutress (2020-03-17). "Intel": Cooper Lake Planları: BF16 Neden Önemli? ". Alındı 2020-05-12. Bfloat16 standardı, tam 32 bitlik bir sayı aralığını veren, ancak 16 bitlik bir sayının veri boyutunda olan, doğruluğu sıfıra yakın tutan ancak doğruluk yakınındayken biraz daha gevşek olan sayıları temsil etmenin hedeflenen bir yoludur. standardın sınırları. Bfloat16 standardı, herhangi bir veri kümesindeki veriyi iki katına çıkarırken (veya bu hesaplama bölümlerindeki hızı iki katına çıkararak) algoritma içindeki değerlerin daha iyi doğruluğunu sunarak makine öğrenimi algoritmalarında birçok kullanıma sahiptir.
  5. ^ Khari Johnson (2018-05-23). "Intel, hızlandırılmış AI eğitimi için Nervana Neural Net L-1000'i tanıttı". VentureBeat. Alındı 2018-05-23. ... Intel, Intel Xeon işlemciler ve Intel FPGA'lar da dahil olmak üzere, bfloat16 desteğini AI ürün serilerimizde genişletecek.
  6. ^ Michael Feldman (2018-05-23). "Intel, Yapay Zeka Portföyü için Yeni Yol Haritası Oluşturuyor". TOP500 Süper Bilgisayar Siteleri. Alındı 2018-05-23. Intel, Xeon ve FPGA hatları dahil olmak üzere tüm AI ürünlerinde bu formatı desteklemeyi planlıyor
  7. ^ Lucian Armasu (2018/05/23). "Intel, İlk Sinir Ağı İşlemcisi olan Spring Crest'i 2019'da Piyasaya Sürecek". Tom'un Donanımı. Alındı 2018-05-23. Intel, NNP-L1000'in sinir ağları için tüm makine öğrenimi endüstrisi oyuncuları tarafından benimsenen sayısal bir format olan bfloat16'yı da destekleyeceğini söyledi. Şirket ayrıca FPGA'larında, Xeons'da ve diğer ML ürünlerinde bfloat16'yı destekleyecek. Nervana NNP-L1000'in 2019'da piyasaya sürülmesi planlanıyor.
  8. ^ "Kullanılabilir TensorFlow İşlemleri | Cloud TPU | Google Cloud". Google Cloud. Alındı 2018-05-23. Bu sayfada, Cloud TPU'da bulunan TensorFlow Python API'leri ve grafik operatörleri listelenmektedir.
  9. ^ Elmar Haußmann (2018/04/26). "Google'ın TPUv2'si ile ResNet-50'deki Nvidia'nın V100'ü karşılaştırılıyor". RiseML Blogu. Arşivlenen orijinal 2018-04-26 tarihinde. Alındı 2018-05-23. Cloud TPU için Google, TensorFlow 1.7.0 ile resmi TPU deposundaki bfloat16 uygulamasını kullanmamızı önerdi. Hem TPU hem de GPU uygulamaları, ilgili mimaride karma hassasiyetli hesaplamayı kullanır ve çoğu tensörü yarı hassasiyetle depolar.
  10. ^ a b Tensorflow Yazarlar (2018-07-23). "TPU'da BFloat16 kullanarak ResNet-50". Google. Alındı 2018-11-06.
  11. ^ Joshua V. Dillon, Ian Langmore, Dustin Tran, Eugene Brevdo, Srinivas Vasudevan, Dave Moore, Brian Patton, Alex Alemi, Matt Hoffman, Rif A.Saurous (2017-11-28). TensorFlow Dağılımları (Rapor). arXiv:1711.10604. Bibcode:2017arXiv171110604D. Erişim tarihi 2018-05-23. TensorFlow Dağıtımlarındaki tüm işlemler yarı, tek ve çift kayan nokta hassasiyetlerinde sayısal olarak kararlıdır (TensorFlow dtipleri olarak: tf.bfloat16 (kesik kayan nokta), tf.float16, tf.float32, tf.float64). Sınıf oluşturucularının sayısal önermeler için bir validate_args bayrağı vardırCS1 bakimi: birden çok ad: yazarlar listesi (bağlantı)
  12. ^ "Armv8-A için BFloat16 uzantıları". community.arm.com. Alındı 2019-08-30.
  13. ^ "ROCm sürüm geçmişi". github.com. Alındı 2019-10-23.
  14. ^ "Canlı Yayın 1. Gün: 8. Aşama (Google I / O '18) - YouTube". Google. 2018-05-08. Alındı 2018-05-23. Birçok modelde bu, float-32'nin yerine geçmeli