블록 부동소수점 양자화
블록 부동소수점(블록 부동소수점 양자화, Block Floating‑Point Quantization)은 여러 값들을 하나의 공통 지수(exponent)를 공유하는 방식으로 표현하는 양자화 기법이다. 즉, 블록 내부의 여러 데이터(예: 동일 텐서의 일부 원소들)가 동일한 지수를 사용하고, 각 원소는 공유 지수에 대해 상대적 소수부(mantissa)만을 갖는 방식이다.
개념 및 배경[편집 | 원본 편집]
전통적인 IEEE 부동소수점 표현에서는 각 수마다 지수와 가수(mantissa)가 모두 별도로 존재한다. 반면, 블록 부동소수점에서는 일정 개수의 값들을 하나의 블록(block)으로 묶고, 이 블록 내의 모든 값이 동일한 지수를 공유하면서, 각 값은 공유 지수에 대응하는 가수만을 유지한다. 이러한 구조는 고정소수점(fixed-point)과 부동소수점(floating-point)의 절충점 역할을 한다.
이 방식은 특히 신경망 양자화 및 딥러닝 연산에서 많이 사용되며, 다음 장점을 가진다:
- 지수 저장 비용 절감 — 블록 당 하나의 지수만 저장
- 연산 단순화 — 동일 지수를 가정하면 블록 내 산술 연산을 정수 기반으로 처리 가능
- 동적 범위 유지 — 부동소수점과 유사한 표현 범위를 유지하면서도 비트 수를 줄임
하지만 단점도 존재하는데, 블록 내 값들의 스케일 차이가 클 경우 공유 지수 하나로 표현하기가 어렵다는 점이 대표적이다.
본 개념은 컴퓨터 산술 분야에서도 전통적으로 연구된 바 있다.
동작 원리 및 수식[편집 | 원본 편집]
블록 부동소수점 표현은 다음 요소로 요약할 수 있다:
- 블록 크기 \( B \): 블록 내 원소 수
- 공유 지수 \( E_b \): 블록 \( b \) 내 모든 원소가 공유하는 지수
- 각 원소의 가수 (소수부) \( m_i \) (정수 혹은 고정소수점 표현)
- 부호 비트(sign)
즉, 블록 내 원소 \( x_i \)는 다음과 같이 표현된다:
\[ x_i = m_i \times 2^{E_b} \]
여기서 \( m_i \)는 정수 또는 고정소수점 표현이며, 동일 블록의 다른 원소들과는 독립적이다.
공유 지수 \( E_b \)를 정하는 일반 방식은 해당 블록 내 값들의 최대 절대값을 기준으로 정규화(normalization)를 수행하는 것이다. 예를 들어,
\[ E_b = \max_i \left( \left\lfloor \log_2 |x_i| \right\rfloor - (M-1) \right) \]
여기서 \( M \)은 가수 비트폭(bit-width)이 허용하는 정밀도 수준 등을 반영하는 값이다.
이렇게 하면 모든 \( x_i \)는 다음 관계를 만족하도록 가수 \( m_i \)가 조정된다:
\[ m_i = \text{round}\left( \frac{x_i}{2^{E_b}} \right) \]
이후 내적(dot product) 연산 등을 할 때는 블록별 지수 정보와 정수 가수들의 곱과 누산(accumulation) 연산만으로 처리할 수 있다.
응용 및 활용[편집 | 원본 편집]
양자화된 딥 뉴럴 네트워크에서는 블록 부동소수점 표현이 다음과 같은 역할을 할 수 있다:
추론 및 모델 압축[편집 | 원본 편집]
신경망의 가중치(weight)와 활성화(activation)를 BFP 형식으로 표현하면, 메모리 사용량과 대역폭을 줄이면서도 어느 정도의 동적 범위를 유지할 수 있다. 예를 들어 “BFP16” 양자화는 16비트 블록 부동소수점 표현을 사용하는 방식으로, 여러 수들이 공유 지수를 사용하면서도 16비트 수준의 표현력을 확보하는 방식이다. [1]
학습 훈련 시 사용[편집 | 원본 편집]
블록 부동소수점은 단순히 추론뿐 아니라 학습 과정에서도 사용 가능하다. 예컨대 “FAST: DNN Training Under Variable Precision Block Floating Point” 연구에서는 가중치, 활성화, 그래디언트(gradient) 등을 BFP로 표현하면서, 계층별·훈련 단계별로 비트 폭을 유동적으로 조정하는 접근을 제안하였다. [2]
또한, 블록 부동소수점을 하이브리드 방식(Hybrid BFP)으로 도입하여, 대부분의 연산은 BFP에서 처리하고 일부 민감한 연산만 고정고정 또는 높은 정밀도로 처리하는 방식도 연구되고 있다.
최적화 & 비트폭 결정[편집 | 원본 편집]
최근 연구에서는 블록 크기 및 비트폭(bit-width)을 최적화하여 정확도와 연산 효율의 균형을 맞추는 것이 중요한 과제로 떠오르고 있다. 예를 들어 “BitQ: Tailoring Block Floating Point Precision for Improved DNN Efficiency”는 DNN 추론에서 비트폭 및 블록 크기를 최적화하는 분석 모델을 제시하였다. [3]
또한, 대형 언어 모델(LLM) 계열에서는 블록 부동소수점이 전통적인 정수 양자화(Int8 등)에 비해 표현력과 동적 범위 측면에서 유리하다는 논의도 점차 많아지고 있다. [4]
한계 및 고려사항[편집 | 원본 편집]
블록 부동소수점 양자화는 강점이 있지만, 적용할 때 주의해야 할 한계들도 존재한다:
- 블록 내부 값 차이: 블록 내 값들이 크게 다르면 공유 지수가 적합하지 않을 수도 있고, 일부 값이 희생되어 양자화 오차가 커질 수 있다.
- 아웃라이어(outlier): 블록 내 일부 값이 극단적으로 큰 경우 그 값에 맞춘 지수가 전체 블록을 지배하게 되어 다른 값들의 표현 정밀도가 크게 떨어질 수 있다. 이는 특히 대형 언어 모델 활성화나 가중치에서 문제가 된다. [5]
- 누산 정밀도 (Accumulation Precision): BFP에서는 정수 가수들을 곱하고 누산하는 과정에서 오버플로우나 스와핑(swamping, 작은 항이 큰 누산값에 묻히는 현상) 문제가 발생할 수 있다. 따라서 누산 단계에 필요한 비트 폭을 잘 설계해야 한다. [6]
- 하드웨어 지원: 블록 부동소수점을 효과적으로 쓰려면 하드웨어(가속기, NPU 등)가 해당 포맷을 효율적으로 처리할 수 있어야 한다.
- 설계 복잡도: 블록 크기, 비트폭, 클리핑 전략, 재정규화 주기 등을 설계해야 하며, 과적합 없이 일반화 성능을 유지해야 한다.
최신 연구 및 발전 방향[편집 | 원본 편집]
아래는 최근 블록 부동소수점 양자화 관련 주요 연구 흐름들이다:
- FAST: 변수 정밀도 BFP를 사용하여 훈련 속도를 높이고 자원 효율을 개선한 시스템. [7]
- BitQ: DNN 추론에 맞춘 블록 크기 및 비트폭 최적화 방법을 제시한 연구. [8]
- 누산 정밀도 연구: “Ultra‑Low Accumulation Precision Inference with Block Floating Point”은 누산 단계의 최소 비트 폭을 설계하는 통계적 방법을 제안하였다. [9]
- 하이브리드 방식: BFP와 고정소수점, 또는 높은 정밀도 표현을 조합하여 성능과 효율성을 조율하는 방식
- 대형 언어 모델에의 적용: LLM의 가중치나 활성화 특성(아웃라이어 존재 등)을 고려한 블록 부동소수점 양자화 기법 연구 증가
- 동적 블록 크기 / 적응적 지수 방식: 학습이나 추론 중 블록 단위 구성이나 지수 조정 방식을 유연하게 바꾸는 접근
- Microscaling / MX 포맷: 블록 부동소수점의 변형 형식으로, “마이크로 스케일링 (micro‑scaling)” 방식들이 제안된 바 있다.
요약[편집 | 원본 편집]
블록 부동소수점 양자화는 여러 값을 블록 단위로 묶어 하나의 지수를 공유함으로써, 부동소수점의 동적 범위와 정수 표현의 효율을 절충하는 방식이다. 딥러닝 모델 압축, 연산 효율화, 특히 대형 모델의 메모리 절감 등에 유리하며, 누산 정밀도 설계, 아웃라이어 처리, 하드웨어 지원 등이 중요한 고려 요소이다. 최근에는 비트폭/블록 크기 최적화, 적응형 방식, 누산 정밀도 제어, LLM 적용 등 연구가 활발히 진행되고 있다.
같이 보기[편집 | 원본 편집]
참고 문헌[편집 | 원본 편집]
- Zhang, S. Q., McDanel, B., & Kung, H. T. “FAST: DNN Training Under Variable Precision Block Floating Point with Stochastic Rounding.”
- Xu, Y., Lee, Y., Yi, G., Liu, B., Chen, Y., Liu, P., Wu, J., Chen, X., Han, Y. “BitQ: Tailoring Block Floating Point Precision for Improved DNN Efficiency.”
- “Ultra‑Low Accumulation Precision Inference with Block Floating Point”
- “Accurate Block Quantization in LLMs with Outliers”
각주[편집 | 원본 편집]
- ↑ “BFP16 (Block floating point) Quantization”, AMD ONNX 튜토리얼
- ↑ “FAST: DNN Training Under Variable Precision Block Floating Point with Stochastic Rounding”
- ↑ “BitQ: Tailoring Block Floating Point Precision for Improved DNN”
- ↑ “Accurate Block Quantization in LLMs with Outliers”
- ↑ “Accurate Block Quantization in LLMs with Outliers”
- ↑ “Ultra‑Low Accumulation Precision Inference with Block Floating Point”
- ↑ “FAST: DNN Training Under Variable Precision Block Floating Point with Stochastic Rounding”
- ↑ “BitQ: Tailoring Block Floating Point Precision for Improved DNN”
- ↑ “Ultra‑Low Accumulation Precision Inference with Block Floating Point”