bfloat16 부동 소수점 형식
bfloat16 floating-point format부동 소수점 형식 |
---|
IEEE 754 |
기타 |
bfloatt16(Brain Floating Point)[1][2] 부동소수점 형식은 컴퓨터 메모리에서 16비트를 차지하는 컴퓨터 번호 형식이며, 부동 래딕스 포인트를 사용하여 광범위한 동적 범위의 숫자 값을 나타낸다.이 형식은 기계학습 가속화와 근접센서 컴퓨팅을 목적으로 하는 32비트 IEEE 754 단일정밀 부동 소수점 형식(이진32)의 잘린(16비트) 버전이다.[3]8개의 지수 비트를 유지하여 32비트 부동 소수점 숫자의 대략적인 동적 범위를 보존하지만, 바이너리32 형식의 24비트 의미보다는 8비트 정밀도만 지원한다.단일 정밀도 32비트 부동 소수점 숫자보다 bfloat 16 번호는 정수 계산에 적합하지 않지만, 이것은 의도된 용도가 아니다.Bfloat16은 기계학습 알고리즘의 저장 요건을 줄이고 계산 속도를 높이는 데 사용된다.[4]
bfloat16 형식은 구글의 인공지능 연구 그룹인 구글 브레인(Google Brain)이 개발했다.[5]bfloat16 형식은 네르바나 NNP-L1000, Xeon 프로세서(AVX-512 BF16 확장자), 인텔 FPGA,[6][7][8] 구글 클라우드 TPU,[9][10][11] 텐서플로우 등 인텔 AI 프로세서에 활용된다.[11][12]ARMv8.6-A,[13] AMD ROCm,[14] CUDA도[15] bfloat16 형식을 지원한다.이러한 플랫폼에서 bfloat16은 혼합정밀 산술에도 사용될 수 있으며, 여기서 bfloat16 번호는 보다 넓은 데이터 유형으로 운영 및 확장될 수 있다.
bfloat16 부동 소수점 형식
bfloat16의 형식은 다음과 같다.
bfloat16 형식은 잘린 IEEE 754 단일 정밀 32비트 플로트로 빠르게 변환할 수 있으며, bfloat16 형식으로 변환하면 지수 비트가 보존되는 반면, NaN 지정 형식을 무시한 채 절단(즉 0을 향해 반올림)하여 의미와 필드를 줄일 수 있다.명세서지수 비트를 보존하면 32비트 플로트의 범위가 ≈ 10−38 ~ ≈ 3 × 10이38 유지된다.[16]
비트는 다음과 같이 배치된다.
서명하다 | 지수(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 |
서명하다 | 지수(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 |
bfloat 16 및 단일 정밀도와 대비
S | E | E | E | E | E | E | E | E | F | F | F | F | F | F | F | f | f | f | f | f | f | f | f | f | f | f | f | f | f | f | f |
레전설
지수 인코딩
bfloatt16 이진 부동 소수점 지수는 오프셋 이진수 표현을 사용하여 인코딩되며, 0 오프셋은 127이다. IEEE 754 표준에서는 지수 바이어스라고도 한다.
- Emin = 01H−7FH = −126
- Emax = FEH−7FH = 127
- 지수 치우침 = 7FH = 127
따라서 간격띄우기 이항 표현에 의해 정의된 대로 참 지수를 얻으려면 127의 오프셋을 지수 필드의 값에서 빼야 한다.
지수 필드(00H 및 FFH)의 최소값과 최대값은 IEEE 754 표준 형식과 같이 특별히 해석된다.
지수 | 의의와 영 | 의미 및 비 영점 | 방정식 |
---|---|---|---|
00H | 0, -0 | 보통 이하의 수 | (-1)×signbit2−126×0.155andbits |
01H, ..., FEH | 정상화된 가치 | (-1)×signbit2exponentbits−127×1.155andbits | |
FFH | ±101 | NaN(조용, 신호) |
최소 양수 정규값은 2−126 ≈ 1.18 × 10이고−38, 최소 양수(비정상) 값은−126−7 2 = 2−133 9 9.2 × 10이다−41.
특수 값 인코딩
양과 음의 무한대
IEEE 754에서와 마찬가지로 양과 음의 무한대는 해당 부호 비트, 8개의 지수 비트 세트(FFhex), 모든 의미와 비트 0으로 표현된다.분명히,
val s_signcnd +inf = 0_111111_0000000 -inf = 1_11111111_0000000
숫자가 아님
IEEE 754에서와 마찬가지로 NaN 값은 신호 비트, 모든 8가지 지수 비트 세트hex(FF) 및 모든 의미와 비트 0으로 표시된다.분명히,
val s_expont_signcnd +NaN = 0_111111_klmnopq -NaN = 1_11111111_klmnopq
여기서 k, l, m, n, o, p 또는 q 중 적어도 하나가 1이다.IEEE 754와 마찬가지로 NaN 값은 2018년 9월 현재 bfloat16 NaNs 신호의 용도는 알려져 있지 않지만 조용하거나 신호를 보낼 수 있다.
범위 및 정밀도
Bfloat16은 32비트 IEEE 754 단일정밀 부동소수점 형식(이진32)에서 숫자 범위를 유지하면서 24비트에서 8비트로 정밀도를 낮추도록 설계됐다.즉, 정밀도는 소수점 2~3자리 사이이며, bfloat16은 약 3.4 × 10까지의38 유한값을 나타낼 수 있다.
예
이러한 예는 부동 소수점 값의 비트 표현, 16진수 및 2진수로 제시된다.여기에는 부호, (편향된) 지수, 의의 등이 포함된다.
3f80 = 011111 0000000 = 1 c000 = 1 10000000 0000000 = -2
7f7f = 0 111110 1111111 = (28 - 1) × 2 × 2−7127 × 3.38953139 × 1038 (bfloat16 정밀도의 최대 유한양수값) 0080 = 0 00000001 0000000 = 2−126 ≈ 1.134351 × 10−38 (bfloat16 정밀도 및 단량 부동소수점에서의 최소 정규화된 양수치)
정상 bfloat16 수의 최대 양수 유한 값은 3.38953139 × 10으로38, (224 - 1) × 2−23127 = 2 = 3.402823466 × 1038, 단일 정밀도로 나타낼 수 있는 최대 유한 양수 값이다.
0과 부정
0000 = 0 00000000 0000000 = 0 8000 = 1 00000000 0000000 = −0
7f80 = 0 111111 0000000 = 무한 ff80 = 1 111111 0000000 = -118
특수값
4049 = 0 10000000 1001001 = 3.140625 ≈ (파이 ) 3eab = 0 011101 0101011 = 0.333984375 ≈ 1/3
NaNs
ffc1 = x 111111 1000001 => QN ff81 = x 111111 0000001 => sNaN
참고 항목
- 반정밀 부동 소수점 형식: IEEE 754에서 정의한 대로 1비트 부호가 있는 16비트 부동 소수점, 5비트 지수 및 11비트 유의점
- ISO/IEC 10967, 언어 독립 산술
- 원시 데이터 유형
- 미니플로트
- 구글 브레인
참조
- ^ Teich, Paul (2018-05-10). "Tearing Apart Google's TPU 3.0 AI Coprocessor". The Next Platform. Retrieved 2020-08-11.
Google invented its own internal floating point format called “bfloat” for “brain floating point” (after Google Brain).
- ^ Wang, Shibo; Kanwar, Pankaj (2019-08-23). "BFloat16: The secret to high performance on Cloud TPUs". Google Cloud. Retrieved 2020-08-11.
This custom floating point format is called “Brain Floating Point Format,” or “bfloat16” for short. The name flows from “Google Brain”, which is an artificial intelligence research group at Google where the idea for this format was conceived.
- ^ Tagliavini, Giuseppe; Mach, Stefan; Rossi, Davide; Marongiu, Andrea; Benin, Luca (2018). "A transprecision floating-point platform for ultra-low power computing". 2018 Design, Automation & Test in Europe Conference & Exhibition (DATE). pp. 1051–1056. arXiv:1711.10374. doi:10.23919/DATE.2018.8342167. ISBN 978-3-9819263-0-9. S2CID 5067903.
- ^ Dr. Ian Cutress (2020-03-17). "Intel': Cooper lake Plans: Why is BF16 Important?". Retrieved 2020-05-12.
The bfloat16 standard is a targeted way of representing numbers that give the range of a full 32-bit number, but in the data size of a 16-bit number, keeping the accuracy close to zero but being a bit more loose with the accuracy near the limits of the standard. The bfloat16 standard has a lot of uses inside machine learning algorithms, by offering better accuracy of values inside the algorithm while affording double the data in any given dataset (or doubling the speed in those calculation sections).
- ^ Abadi, Martín; Barham, Paul; Chen, Jianmin; Chen, Zhifeng; Davis, Andy; Dean, Jeffrey; Devin, Matthieu; Ghemawat, Sanjay; Irving, Geoffrey; Isard, Michael; Kudlur, Manjunath; Levenberg, Josh; Monga, Rajat; Moore, Sherry; Murray, Derek G.; Steiner, Benoit; Tucker, Paul; Vasudevan, Vijay; Warden, Pete; Wicke, Martin; Yu, Yuan; Zheng, Xiaoqiang (2016). "TensorFlow: A System for Large-Scale Machine Learning" (PDF). arXiv:1605.08695.
{{cite journal}}
:Cite 저널은 필요로 한다.journal=
(도움말) - ^ Khari Johnson (2018-05-23). "Intel unveils Nervana Neural Net L-1000 for accelerated AI training". VentureBeat. Retrieved 2018-05-23.
...Intel will be extending bfloat16 support across our AI product lines, including Intel Xeon processors and Intel FPGAs.
- ^ Michael Feldman (2018-05-23). "Intel Lays Out New Roadmap for AI Portfolio". TOP500 Supercomputer Sites. Retrieved 2018-05-23.
Intel plans to support this format across all their AI products, including the Xeon and FPGA lines
- ^ Lucian Armasu (2018-05-23). "Intel To Launch Spring Crest, Its First Neural Network Processor, In 2019". Tom's Hardware. Retrieved 2018-05-23.
Intel said that the NNP-L1000 would also support bfloat16, a numerical format that’s being adopted by all the ML industry players for neural networks. The company will also support bfloat16 in its FPGAs, Xeons, and other ML products. The Nervana NNP-L1000 is scheduled for release in 2019.
- ^ "Available TensorFlow Ops Cloud TPU Google Cloud". Google Cloud. Retrieved 2018-05-23.
This page lists the TensorFlow Python APIs and graph operators available on Cloud TPU.
- ^ Elmar Haußmann (2018-04-26). "Comparing Google's TPUv2 against Nvidia's V100 on ResNet-50". RiseML Blog. Archived from the original on 2018-04-26. Retrieved 2018-05-23.
For the Cloud TPU, Google recommended we use the bfloat16 implementation from the official TPU repository with TensorFlow 1.7.0. Both the TPU and GPU implementations make use of mixed-precision computation on the respective architecture and store most tensors with half-precision.
- ^ a b Tensorflow Authors (2018-07-23). "ResNet-50 using BFloat16 on TPU". Google. Retrieved 2018-11-06.
- ^ 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 Distributions (Report). arXiv:1711.10604. Bibcode:2017arXiv171110604D. Accessed 2018-05-23.
All operations in TensorFlow Distributions are numerically stable across half, single, and double floating-point precisions (as TensorFlow dtypes: tf.bfloat16 (truncated floating point), tf.float16, tf.float32, tf.float64). Class constructors have a validate_args flag for numerical asserts
{{cite report}}
: CS1 maint : 복수이름 : 작성자 목록(링크) - ^ "BFloat16 extensions for Armv8-A". community.arm.com. Retrieved 2019-08-30.
- ^ "ROCm version history". github.com. Retrieved 2019-10-23.
- ^ "CUDA Library bloat16 Intrinsics".
- ^ "Livestream Day 1: Stage 8 (Google I/O '18) - YouTube". Google. 2018-05-08. Retrieved 2018-05-23.
In many models this is a drop-in replacement for float-32