최신글

FP32·BF16·TF32, AI 모델의 숫자 표현을 이해

반응형

AI 모델에서 FP32, BF16, TF32 등의 용어가 나오는데, 이 글에서는 각 용어가 무엇인지 간단히 정리했습니다.

 

요약

FP32, FP16, BF16, FP8 등은 AI 모델이 사용하는 부동소수점 표현방법입니다. 이 표현방법은 AI 모델성능에 많은 영향을 미칩니다. 표현할 수 있는 값의 범위와 수치 정밀도가 달라지기 때문입니다.

 

배경지식

AI 모델의 가중치는 실수들의 모음

이전 글에서 살펴봤듯이 AI 모델은 가중치 같은 수많은 매개변수와 이를 사용하는 연산으로 구성되어 있습니다.

 

이때 가중치는 실수 값의 모음입니다. AI 모델의 알고리즘뿐만 아니라 가중치의 실수 표현 방식도 처리 속도, 메모리 사용량, 수치 정확도에 영향을 미칩니다. 나아가 학습 안정성과 모델 품질에도 영향을 줄 수 있습니다.

 

컴퓨터가 실수를 저장하는 방법

컴퓨터가 실수를 표현하는 대표적인 방식은 두 가지입니다. 소수점 위치를 미리 정해 두는 고정소수점(fixed-point)과, 유효숫자와 지수를 나눠 저장해 소수점 위치를 이동시키는 부동소수점(floating-point)입니다.

  • 고정소수점(fixed-point)
  • 부동소수점(floating-point)

부동소수점 값을 개념적으로 나타내면 아래와 같습니다. 고정소수점은 지수 대신 미리 정한 위치에 소수점을 둡니다.

 

고정소수점과 부동소수점은 모두 비트로 표현됩니다. 아래 그림은 부동소수점 형식인 FP32의 비트 구성입니다. 고정소수점은 정해진 위치를 기준으로 각 비트의 자릿값이 결정되며, 별도의 지수 필드가 없습니다.

 

AI 모델에서 실수 표현 방식이 성능에 영향을 미치는 이유

AI 모델에서 실수 표현 방식은 성능에 많은 영향을 미칩니다. 표현할 수 있는 값의 범위와 수치 정밀도가 달라지기 때문입니다.

 

1. 지수 비트↑ → 표현 범위가 넓어져 오버플로와 언더플로 위험 감소

지수 비트는 표현 가능한 실수의 범위를 결정합니다. 예를 들어 지수 필드가 2비트면 2²=4개, 3비트면 2³=8개의 비트 패턴을 만들 수 있습니다. 다만 IEEE 754 형식은 지수 비트가 모두 0이거나 1인 패턴을 0, 비정규 수, Infinity, NaN 등에 사용하므로 패턴 수가 그대로 지수 값의 개수가 되지는 않습니다.

 

AI 학습 과정에서 값이 표현 범위를 벗어나면 다음과 같은 문제가 생길 수 있습니다.

  • 표현 가능한 최댓값보다 큰 값 → 오버플로로 Infinity가 될 수 있음
  • 정규화 수의 최솟값보다 작은 값 → 비정규 수가 되거나, 더 작으면 언더플로로 0이 될 수 있음

 

2. 가수 비트↑ → 수치 정밀도가 높아져 반올림 오차 감소

가수 비트는 같은 지수 구간 안에서 숫자를 얼마나 촘촘하게 구분할지 결정합니다. 예를 들어 원주율 π를 저장할 때 가수 비트가 많으면 3.141592에 더 가까운 값을 표현할 수 있습니다. 가수 비트가 적으면 표현 가능한 가장 가까운 값으로 반올림되므로 오차가 커집니다.

 

가수 비트를 더 이해하기 쉽게 표현하면 아래처럼 눈금자에 눈금을 얼마나 넣어서 더 정확하게 표현할지와 비슷합니다.

 

그러면 FP32, TF32 등은 과연 뭘까?

이 글의 주제인 FP32, FP16, BF16, FP8 등은 AI 모델이 사용하는 부동소수점 형식이며, 흔히 데이터 타입이라고 부릅니다. 다만 TF32는 값을 저장하는 데이터 타입이 아니라 FP32 입력을 NVIDIA Tensor Core에서 빠르게 계산하기 위한 연산 형식입니다.

FP32, FP16, BF16, FP8 부동소수점 형식 또는 데이터 타입
INT8, INT4 정수 형식. AI에서는 양자화에 주로 사용
TF32 TensorFloat-32 연산 형식
전체를 묶어서 수치 형식

 

각 용어는 아래 표와 같은 유래와 의미를 갖고 있습니다.

FP Floating Point 부동소수점. FP16과 FP32는 IEEE 754의 binary16과 binary32 형식
BF Brain Floating Point Google Brain에서 고안한 bfloat16에서 유래
TF TensorFloat NVIDIA가 Ampere 아키텍처의 Tensor Core에 도입한 TensorFloat-32(TF32)
INT Integer 저장값 자체에 소수부가 없는 정수 형식. INT8, INT4 등
E4M3 Exponent 4, Mantissa 3 지수 4비트, 가수 3비트인 FP8 형식
E5M2 Exponent 5, Mantissa 2 지수 5비트, 가수 2비트인 FP8 형식

 

각 형식은 전체 비트 수와 지수·가수 비트 구성이 달라 서로 다른 특징이 있습니다. 단, TF32 행의 1+8+10비트는 Tensor Core 연산에 사용하는 유효 구성을 뜻합니다. TF32가 19비트 저장 데이터 타입이라는 뜻은 아니며, 입력과 출력은 FP32를 사용합니다.

FP32 1 8 23 넓은 범위, 높은 정밀도 정밀도가 중요한 계산, 누적
FP16 1 5 10 가수 정밀도는 비교적 높지만 범위가 좁음 추론, 혼합 정밀도 학습
BF16 1 8 7 FP32와 같은 지수 범위, 낮은 가수 정밀도 대규모 모델 학습·추론
TF32 1 8 10 FP32의 표현 범위, FP16 수준의 가수 정밀도 NVIDIA Tensor Core의 행렬곱·합성곱 연산
FP8 E4M3 1 4 3 E5M2보다 좁은 범위, 높은 정밀도 주로 가중치·활성값의 학습·추론
FP8 E5M2 1 5 2 E4M3보다 넓은 범위, 낮은 정밀도 주로 기울기처럼 범위가 중요한 값
반응형