본문 바로가기
AI HW/Transformer

Microscaling Data Formats for Deep Learning 논문 정리

by jyun13 2024. 1. 4.

mx format.pdf
0.39MB

 

https://all4chip.com/archive/news_view.php?no=16907

 

Arm, 업계 리더들과 협력 통해 미래의 AI 기반 구축

Arm은 이미 개발이 진행되고 있는 자체 기술 플랫폼 외에도 AMD, 인텔, 메타, 마이크로소프트, 엔비디아, 퀄컴 테크놀로지 등 선도적인 기술 기업들과 협력하여 보다 반응이 빠르고 안전한 사용자

all4chip.com

 

https://www.opencompute.org/blog/amd-arm-intel-meta-microsoft-nvidia-and-qualcomm-standardize-next-generation-narrow-precision-data-formats-for-ai

 

Open Compute Project

 

www.opencompute.org

 

초록


현재의 딥러닝 응용 프로그램의 계산 및 저장 비용을 줄이는 데 중요한 역할을 하는 것은 좁은 비트 폭 데이터 형식(Narrow bit-width data formats)입니다. 본 논문에서는 Microscaling (MX) 데이터 형식을 평가하는데, 이는 각 요소에 좁은 부동 소수점 및 정수 유형과 함께 블록당 스케일링 계수를 결합한 것입니다. MX 형식은 하드웨어 효율성, 모델 정확도 및 사용자 편의성이라는 경쟁적인 요구 사항을 균형 있게 조화시킵니다. 두 다 dozen 이상의 벤치마크에서의 실험 결과는 MX 데이터 형식이 인공지능 추론 및 훈련에서 FP32의 대체로서 실용적인 가능성을 보여주며 사용자 부담이 낮습니다. 또한 최초로 생성 언어 모델을 FP32에 비해 하위 8비트의 가중치, 활성화 및 기울기로 훈련하는 사례를 소개하며 정확도 손실이 최소화되고 훈련 레시피를 수정하지 않고 이를 달성했습니다.

 

https://jaeyung1001.tistory.com/entry/bf16-fp16-fp32의-차이점 [공부방 & 일상:티스토리]

* bf16, fp16, fp32

- bf16 : bfloat16의 준말, 16비트 부동 소수점 형식. 이 형식은 인공지능 분야에서 널리 사용되며, 인텔의 최신 프로세서와 같은 하드웨어에서 지원된다. 32비트 부동 소수점 형식보다는 정확도가 떨어지지만, 메모리 요구 사항이 적어 모델 학습에 유용함.
- fp16 : half-precision의 준말, 16비트 부동 소수점 형식을 나타냄. 이 형식은 메모리를 적게 사용하므로 딥러닝 분야에서 매우 인기가 있음. 그러나 16비트의 정밀도가 낮아서 모델의 정확도가 떨어질 수 있음. 따라서 모델 훈련을 할 때는 일반적으로 fp32(32비트 부동 소수점 형식)을 사용하고, 추론 단계에서는 fp16을 사용하여 연산 속도를 높이는 경우가 많음.

** bf16, fp32, fp16은 각각 메모리 사용량과 연산 속도, 정밀도 등의 측면에서 서로 다른 특성을 가지고 있습니다.

따라서 사용하는 모델의 특성에 맞게 선택하는 것이 중요합니다.

- bf16: 인공지능 분야에서 주로 사용되는 부동 소수점 형식으로, fp32보다 메모리 사용량이 작지만 정밀도가 더 낮습니다. 모델 학습시 fp32 대비 메모리 사용량을 약 50% 줄일 수 있으며, 정확도 손실이 크지 않은 경우에 사용됩니다.
- fp32: 일반적으로 모델 학습에 사용되는 부동 소수점 형식입니다. fp16과 비교하여 정밀도가 높으며, 모델의 정확도를 높일 수 있습니다. 그러나 연산 속도가 느리고 메모리 사용량이 크기 때문에 대규모 모델 학습에는 제한적입니다.
- fp16: 딥 러닝 추론(inference) 분야에서 많이 사용되며, fp32 대비 연산 속도가 빠르고 메모리 사용량이 적습니다. 그러나 정밀도가 낮아서 모델의 정확도가 떨어질 수 있으며, 따라서 학습에는 적합하지 않습니다.

따라서, 모델 학습시에는 fp32를 사용하고, 추론시에는 fp16을 사용하는 것이 일반적입니다.
그러나 모델 특성에 따라 bf16이나 다른 형식을 선택할 수도 있습니다.
또한, 하드웨어나 프레임워크의 지원 여부에 따라 선택할 수 있는 형식이 제한될 수 있으므로, 이를 고려하여 선택해야 합니다.

 

 

모델을 훈련하고 배포하는 데 필요한 컴퓨팅 파워 및 저장 용량을 상당히 증가

딥러닝 모델의 계산 및 저장 비용을 줄이는 한 가지 방법은 전통적인 FP32 대신 Narrow bit-width data formats을 사용하는 것 => FP16, Bfloat16 및 가장 최근에는 FP8을 사용한 훈련 및 INT8과 같은 좁은 정수 형식에서 추론 수행을 가능케 하는 등 큰 발전이 이루어졌습니다.

 

!! 그러나 FP8 및 INT8과 같이 가장 좁은 형식은 각 텐서의 동적 범위에 맞게 조정하기 위해 텐서당 스케일링 계수가 필요

하위 8비트 형식의 동적 범위가 제한적이기 때문에 텐서 수준의 스케일링은 충분하지 않다

마이크로 스케일링 데이터 형식이 텐서의 미세한 하위 블록에 스케일링 계수를 할당함으로써 8비트 미만 영역에서 효과적임이 입증

 

MX 표준은 하드웨어 효율성, 모델 정확도 및 사용자 부담이라는 세 가지 핵심 요소 사이에서 균형을 찾아 효과적인 데이터 형식을 만들고자 함

MX는 하드웨어의 효율성을 최대화하고 비트 폭을 감소시켜 계산 및 저장 효율을 극대화하며, 모델 정확도를 FP32와 비교하여 결과 품질의 차이를 최소화하고, 기존의 훈련 및 추론 프레임워크에 완벽하게 통합되어 다양한 작업 부하에 대한 일반성을 확보하려는 목표

 

* 결과 *

=> 하드웨어 효율성, 모델 정확도 및 사용자 부담의 경쟁적 요구 사항을 균형 있게 유지하는 데 MX 형식이 효과적

=> 8비트 MX 형식은 최소의 정확도 손실로 FP32 사전 훈련 모델에서 직접 추론을 수행할 수 있으며, 보정이나 미세 조정이 필요하지 않음

=> 6비트 MX 형식을 사용한 추론도 양자화에 대한 미리 보기 또는 훈련 후 양자화 방법을 사용한 경우 FP32와 매우 근접

=> 6비트 MX 형식을 사용하여 대형 트랜스포머 모델을 8비트 미만 가중치, 활성화 및 기울기로 훈련하는 첫 번째 사례를 보여주며 훈련 레시피를 수정하지 않고 FP32와 일치하는 정확도를 달성

=> 대형 트랜스포머의 훈련이 4비트 MX 형식 가중치를 사용하여 소량의 정확도 감소만 발생시키면서 수행될 수 있음

 

 

2. Microscaling

Microscaling 데이터 형식의 단일 블록. 이 블록은 k 개의 숫자를 인코딩하며, 각 숫자는 값 XP_i를 가집니다.

 

1. MX 형식에서 데이터의 기본 단위는 k 개의 숫자를 나타내는 벡터

2. 단일한 공유 스케일 X와 k 개의 스칼라 요소 {Pi}^k_i=1 (도식 1 참조)로 구성

3. 이 데이터의 기본 단위는 MX 블록이라고 불리며, 블록 크기 k, 스케일 데이터 형식 및 요소 데이터 형식의 조합에 의해 정의

4. 두 데이터 형식은 서로 독립적이며, 모든 k 개의 요소는 동일한 요소 데이터 형식을 공유

5. MX 블록의 레이아웃은 명시적으로 정의되어 있지 않음

6. 구현에서는 X를 요소들과 연속적으로 저장하거나 별도로 저장할 수 있음.

 

위의 그림이 MX 블록에서 표현된 k개의 실수라고 가정합니다. 각 숫자의 값은 다음과 같이 유추할 수 있습니다:

  • 만약 X = NaN이면, 모든 i에 대해 vi = NaN
  • |XPi| > V_max_Float32이면, vi는 구현에 따라 정의되어 있음
  • 그렇지 않으면, vi = XPi, 여기서 V_max_Float32는 IEEE Float32에서 표현 가능한 가장 큰 크기를 나타냅니다.

 

2.1 Special Value Encodings

MX 형식에서의 NaN 및 Inf 표현:

 

<MX 형식에서는 NaN을 최대 두 가지 방식으로 인코딩>

- 첫 번째: X가 NaN이면 MX 블록 내의 모든 k 값이 NaN이 됩니다. 이는 Pi의 인코딩에 관계 없이 모두 해당

- 두 번째: X가 NaN이 아닌 경우 각 요소 Pi는 개별적으로 NaN을 인코딩할 수 있음

 

요소 형식에 따라 MX 형식은 Inf를 표현하기 위해 X를 숫자로 (즉, NaN이 아닌 값) 사용하고

각 Pi를 개별적으로 Inf로 인코딩함으로써 가능합니다. 공유 스케일 X는 Inf를 표현하지 않습니다.

 

2.2 Concrete MX Formats

Table 1: Concrete MX-compliant data formats and their parameters. (구체적인 MX 호환 데이터 형식 및 해당 매개변수들)

 

표 1은 구체적인 MX 형식을 정의하는 매개변수를 나타냄 => element data format의 이름 앞에 "MX"를 추가하여 명명

모든 구체적인 MX 형식은 shared scale 형식으로 E8M0 (8비트 지수)를 사용

이러한 형식의 표현 가능한 지수는 FP32의 표현 가능한 지수의 superset

"Superset"은 한 집합이 다른 집합의 모든 요소를 포함하는 관계

다시 말해, A가 B의 superset이면, B의 모든 원소는 A에도 포함되지만 A에는 B에 없는 다른 원소가 포함될 수 있음.
예를 들어, 집합 A = {1, 2, 3, 4}가 있고, 집합 B = {1, 2}가 있다고 가정 -> 이 경우, A는 B의 superset

 

* FP8 element data formats의 자세한 내용은 OCP FP8 specification에 있음. 

* 다른 요소 데이터 형식 및 E8M0 스케일 형식에 대한 자세한 내용은 OCP Microscaling Specification에서 확인

 

 

3. Scalar Float to MX Format Conversion (스칼라 부동 소수점에서 MX 형식으로의 변환)

 

스칼라 부동 소수점 형식(예: FP32)에서 MX 형식으로 변환하는 데에 Algorithm 1을 사용

(다만 MX 형식으로의 변환은 꼭 Algorithm 1을 따를 필요는 없음)

 

- 1행 :

-> shared_exp는 최대 입력 지수를 요소 데이터 형식의 최대 binade로 매핑하기 위한 emax_elem의 오프셋을 포함

이렇게 하면 요소 데이터 형식의 지수 범위를 완전히 활용할 수 있게 됩니다.

바이나드(Binade):

1. 부동 소수점 수 표현의 구간: 바이나드는 부동 소수점 수를 표현할 때 크기가 큰 구간을 일종의 단위로 나누어 나타내는 방법입니다.
2. 구간의 크기: 한 바이나드는 특정 크기의 구간을 나타냅니다. 구간은 수의 크기에 따라 다르며, 일반적으로 부동 소수점 표현에서는 큰 수일수록 큰 구간을 나타냅니다.
3. 수의 표현: 부동 소수점 표현에서는 부호, 가수(유효숫자), 지수 등으로 수를 나타냅니다. 바이나드는 가수와 지수의 조합으로 구간을 나누어 큰 범위의 수를 더 효과적으로 표현할 수 있도록 도와줍니다.
4. 수의 이동: 한 바이나드에서 다음 바이나드로 이동하면 수의 크기가 크게 변하게 됩니다. 이렇게 함으로써 수를 더 효율적으로 나타낼 수 있습니다.

간단히 말하면, 바이나드는 수의 크기를 나타내는 단위로, 크기가 큰 수를 더 효과적으로 다루기 위한 방법

 

 

- 4행에서 Vi/X를 양자화할 때, 요소 형식을 초과하는 정상적인 숫자는 최대 표현 가능한 값으로 clamp 된다. (부호는 보존됨). 그러나 Infs 및 NaNs는 clamp 되지 않습니다. 이는 OCP MX 명세서에 따른 것입니다.

"Clamp"는 특정 값이 주어진 범위 안에 포함되도록 하는 작업을 의미합니다.
값이 최소값보다 작으면 최소값으로, 최대값보다 크면 최대값으로 제한합니다.
알고리즘에서 말하는 "Infs 및 NaNs는 클램프되지 않는다"는, 무한대(Infinity)나 숫자가 아닌 값(Not-a-Number, NaN)은 클램프 대상이 아니라는 것을 의미합니다.

즉, 무한대나 NaN이라면 해당 값을 그대로 사용하고, 일반적인 숫자 값은 최대 표현 가능 값으로 제한된다는 것을 나타냅니다.
이것은 값을 제한하여 특정 범위 내에 유지하려는 경우에 사용되며, 종종 데이터의 안정성이나 연산의 안전성을 유지하기 위한 목적으로 쓰입니다.

 

- 4행에서 입력 Vi가 subnormal Float32 숫자인 경우, 해당하는 Pi는 0으로 설정

 

/ 다차원 tensor를 변환할 때 shared scale에 대한 주축을 선택하는 방법/
1. 다차원 텐서 변환: 여러 차원을 가진 텐서를 변환할 때, 공유 스케일을 위해 주축(기준 축)을 선택해야 합니다.

=> 일반적으로는 행렬 곱셈에서 축을 줄이는 차원이 주축으로 선택

 

2. 2D 행렬의 경우: 2차원 행렬에서는 스케일이 행이나 열의 각 k 요소와 공유될 수 있습니다.

예를 들어, 각 행이나 각 열의 모든 k 요소가 같은 스케일을 공유할 수 있습니다.

3. 행렬 전치의 영향: 그러나 주의할 점은, 2D 행렬을 MX 형식으로 변환하면서 주축을 선택하고, 이 행렬을 전치하면 주축이 변경된다는 것입니다. 즉, 변환과 전치는 서로 교환 가능한 작업이 아닙니다.

=> 다차원 텐서를 변환할 때는 주축을 선택하여 공유 스케일을 정하고, 2D 행렬의 경우 행이나 열의 각 k 요소가 스케일을 공유합니다. 그러나 행렬을 전치하면 공유 스케일의 축이 변경되므로 주의가 필요합니다.

 

4. Experimental Results

4.1 Compute Flow

 

Figure 2 : MX 형식을 사용하여 훈련하는 계산 흐름의 예시 (MX*로 표시됨)

1. 점곱 연산 (matmul, convolution):
   - 전방향 및 역방향 패스에서 점곱을 포함하는 연산은 두 입력이 MX 형식으로 변환됨.
   - OCP Microscaling 명세서 섹션 6.2의 방법을 사용하여 효율적인 점곱 연산 수행.
   - 출력은 스칼라 부동 소수점 형식으로 생성됨.

2. 벡터 연산 (layernorm, Softmax, GELU, residual add 등):
   - 벡터 연산은 Bfloat16 또는 FP32와 같은 스칼라 부동 소수점 형식에서 수행됨.

3. 가중치 관리:
   - 가중치의 마스터 복사본은 FP32 형식으로 유지되며 각 훈련 단계에서 업데이트됨.

4. 전치와 양자화:
   - 전치 및 MX 형식으로의 양자화는 교환 법칙이 적용되지 않는 특성으로 인해 가중치와 그 전치는 두 개의 별도 텐서로 저장됨.
   - 두 텐서는 매우 미세한 전진 및 역진 통과의 교대 사용이 아닌 한 동시에 작업 메모리에 저장될 필요는 없음.

논문의 훈련 예시:
   - 논문의 모든 훈련 예시에서는 Figure 2에 나와 있는 계산 흐름을 사용.

간략하게 정리하면, MX 형식을 사용하여 행렬 곱셈을 최적화하고, 벡터 연산을 스칼라 부동 소수점 형식에서 수행하며, 가중치의 마스터 복사본을 FP32로 유지하면서 효율적인 훈련을 수행하는 계산 흐름이 논문에서 제시되고 있습니다.

 

 

이 계산 흐름에서는 전방향 및 역방향 패스에서 점곱(dot product)을 포함하는 연산 (예: matmul 및 convolution)에 대해 두 입력이 MX 형식으로 변환되고, 효율적인 점곱 연산이 OCP Microscaling 명세서의 섹션 6.2에서 제시된 방법을 사용하여 수행됩니다.

1. Dot Products (점곱): 전방향 및 역방향 패스에서 점곱을 포함하는 연산은 두 입력이 MX 형식으로 변환됩니다. 이는 MX 형식에서의 효율적인 점곱 연산을 의미합니다.
2. Vector Operations (벡터 연산): 벡터 연산 (예: layernorm, Softmax, GELU, 및 residual add)은 Bfloat16 또는 FP32와 같은 스칼라 부동 소수점 형식에서 수행됩니다.
3. Dot Product Operations Outputs: 점곱 연산의 출력은 스칼라 부동 소수점 형식으로 생성됩니다.
4. Master Copy of Weights: 가중치의 마스터 복사본은 FP32 형식으로 유지되며, 각 훈련 단계에서 업데이트됩니다.

 

이 논문의 모든 훈련 예시에서는 Figure 2에 나와 있는 계산 흐름을 사용합니다.
간단하게 말하면, Figure 2에서는 MX 형식을 사용하여 점곱 연산을 최적화하고, 벡터 연산은 스칼라 부동 소수점 형식을 사용하여 수행하며, 가중치의 마스터 복사본은 FP32로 유지하면서 효율적인 훈련을 수행하는 계산 흐름이 제시되고 있습니다.


1. **MatMul (행렬 곱셈):** MatMul은 matmul, linear, convolution과 같은 어떠한 점곱 연산을 포함합니다. 이러한 연산들은 MX 형식으로 수행됩니다.

2. **Vector Ops (벡터 연산):** Vector Ops에는 활성화 함수, 정규화, Softmax, 그리고 residual add와 같은 점곱이 아닌 다양한 연산들이 포함됩니다. 이러한 연산들은 스칼라 부동 소수점 형식에서 수행됩니다.

3. **전치 및 MX 형식으로의 양자화:** 전치 및 MX 형식으로의 양자화는 교환 법칙이 적용되지 않는 특성 때문에 가중치 Wi 및 이들의 전치인 WT_i는 두 개의 별도 텐서로 저장되어야 합니다. 두 텐서는 매우 미세한 전진 및 역진 통과의 교대 사용이 아닌 한 동시에 작업 메모리에 저장될 필요는 없습니다.

간단하게 말하면, Figure 2에서는 MX 형식을 사용한 계산 흐름을 나타내고 있습니다. 행렬 곱셈 및 벡터 연산은 각각 MX 형식과 스칼라 부동 소수점 형식에서 수행되며, 특히 전치와 MX 형식으로의 양자화는 특별한 주의가 필요한 작업으로 설명되고 있습니다.

 

4.2 Methodology