FP8을 활용한 훈련 및 추론을 통해 DeepL 차세대 대규모 언어 모델(LLM)을 구축한 방법

DeepL이 현재의 NVIDIA DGX SuperPOD (544개의 NVIDIA H100 텐서 코어 GPU 탑재)를 배포했을 때, 우리는 단순히 컴퓨팅 성능이 크게 향상된 것 이상의 효과를 얻었습니다. H100은 또한 차세대 텐서 코어를 통해 8비트 부동 소수점(FP8) 데이터 유형에 대한 네이티브 지원을 도입하여, GPU가 FP8 정밀도로 행렬 곱셈 및 기타 텐서 연산을 수행할 수 있도록 합니다. FP8 형식으로 행렬 곱셈을 계산함으로써, 현대적 대규모 언어 모델(LLM) 훈련 및 배포 시 처리량을 향상시킬 수 있습니다. 이는 현대 LLM에서 발생하는 대부분의 연산이 행렬 곱셈 형태를 취하기 때문입니다.
16비트 정밀도에서 8비트 정밀도로의 연산 전환은 DeepL 차세대 대규모 언어 모델(LLM) 개발에 중대한 영향을 미쳤다. 이를 통해 훨씬 더 큰 규모의 언어 AI 모델을 구축할 수 있게 되었으며, 훨씬 더 많은 매개변수를 통해 언어 전문가들이 평가할 때 품질이 크게 개선되었지만, 생산 추론에 필요한 동일한 지연 시간 범위 내에서 가능합니다. 이는 유럽 언어의 경우 기존 모델 대비 1.4배, 영어와 일본어 같은 더 복잡한 언어 쌍의 경우 1.7배 우수한 번역 성능을 제공하면서도 결과물을 효과적으로 동일한 속도로 전달함을 의미합니다. 이는 또한 우리 모델이 사용자 경험을 저하시키지 않으면서 더 많은 기능과 특징에 걸쳐 더 많은 요청을 처리할 수 있음을 의미합니다.
다시 말해, FP8 훈련 및 추론은 DeepL의 언어 AI 확장 과정에서 핵심적인 역할을 수행해 왔습니다.
이 글에서는 FP8을 훈련 및 추론에 적용하기 위해 우리가 걸어온 여정을 설명하고, 이러한 성공을 뒷받침하는 도구와 기법 일부를 공유하며, 그 과정에서 훈련 및 추론 성능 용어에 따라 생성한 결과에 대한 개요를 제시하고자 합니다.
BF16과 FP8 형식의 차이점은 무엇인가요?
BFloat16(BF16)과 FP8의 차이점을 일반 설명하자면, 후자는 값을 표현하는 데 절반의 비트만 사용한다는 점입니다. 실질적으로 BF16은 각각 8비트인 두 바이트에 사용 가능한 16개 위치를 활용합니다. FP8은 단 1바이트만 사용합니다.
사용 가능한 비트 수는 과학적 표기법에서 부동 소수점 수의 지수부와 지수 부위를 배포할 수 있는 정밀도를 결정합니다. BF16은 부호 비트 1개, 지수 8비트, 맨티사 7비트로 구성됩니다. FP8은 1개의 부호 비트와 지수와 맨티사 사이에 분배된 7개의 비트로, 사용할 수 있는 비트가 절반입니다. 이로 인해 BF16보다 범위가 좁고 정밀도가 낮습니다. 그것은 더 좁은 범위를 나타낼 수 있으며, 그 범위 내의 숫자도 더 적을 수 있습니다.
예를 들어, 지구의 나이를 수십억 년(약 45억 4300만 년) 단위로 표현하고자 한다고 가정해 보자. BF16에서는 이를 정확히 0100000010010001로 표현할 수 있습니다.
그 숫자를 FP8로 표현하는 것은 어떨까요? 실제로 선택할 수 있는 FP8 형식은 두 가지입니다: E4M3 및 E5M2. 여기서 문자와 숫자는 지수(E)와 유효숫자(M) 사이에 비트가 어떻게 분배되는지를 나타냅니다. 지수부에 할당하는 비트 수가 많을수록 표현 가능한 숫자의 범위가 넓어지고, 만티사부에 할당하는 비트 수가 많을수록 그 범위 내에서 표현 가능한 숫자의 수가 증가한다.
어떤 FP8 형식을 선택하든, 4.543을 정확하게 표현하는 것은 실제로 불가능합니다. E4M3를 선택하면 상대적으로 더 높은 정밀도로 가장 근접한 값(4.5)을 얻을 수 있습니다. E5M2에서 가장 가까이 갈 수 있는 거리는 5입니다.
이러한 범위 및 정밀도 부족의 반대편에서, FP8은 BF16에 비해 더 빠른 연산을 가능하게 하며 상당히 적은 메모리를 요구합니다. 이는 추론에 매우 유용하며, 적절한 접근법을 사용하면 훈련 가속화에도 매우 유용할 수 있습니다. 결국 핵심은 대규모 언어 모델(LLM) 훈련에 실제로 얼마나 넓은 범위와 정밀도가 필요한가 하는 문제로 귀결된다. 지구의 나이를 정확하게 표현해야 합니까? 아니면 4300만 년 이내로 접근하는 것도 충분히 가까운 걸까? 우주 전체에 관심이 있다면, 아마도 그 두 번째 수준의 정확도로도 만족할 것입니다. 결국 반올림 오차는 우주의 나이의 약 0.3%에 불과하다.
DeepL의 여정은 FP8이 고품질 LLM 훈련에 필요한 요건을 충족시킬 수 있음을 입증하며, 이는 모델 훈련의 목적과 실제 배포 방식을 확장하는 새로운 가능성을 열었습니다.
DeepL 대규모 언어 모델(LLM) 사전 훈련
FP8 훈련 및 추론을 통한 여정은 대규모 언어 모델(LLM)의 사전 훈련에서 시작됩니다. 사전 훈련 후, 특정 작업에 대해 모델을 미세 조정하고, 대규모 모델을 소규모 모델로 증류하며, 강화 학습을 수행하고, 보유한 방대한 수의 GPU를 활용할 수 있도록 일련의 병렬화 전략을 배포합니다.
혼합 정밀도 훈련을 위한 FP8 형식 적용
기존 훈련 코드를 BF16에서 FP8로 전환하기 위해 NVIDIA Transformer Engine을 사용했습니다. 이는 NVIDIA에서 제공하는 훈련 라이브러리로, 트랜스포머 모델을 가속화하며 FP8 지원을 포함합니다. Transformer Engine은 혼합 정밀도 훈련을 용이하게 하는 핵심 구성 요소를 제공하며, FP8과 BF16 형식 간의 변환을 관리하는 관리자와 스케일링 계수를 처리합니다.
NVIDIA가 권장하는 대로 Transformer 엔진의 기본 설정을 사용하며, 훈련 시 전방향 패스(forward pass)에는 E4M3를, 역방향 패스(backward pass)에는 E5M2를 사용합니다. 이는 효과적으로 다음 토큰의 확률 분포를 예측할 때는 정밀도가 높은 형식을 사용하고, 모델 업데이트에 필요한 기울기를 계산할 때는 정밀도가 덜 중요할 때 범위(범위)가 더 넓지만 정밀도가 낮은 형식을 사용한다는 것을 의미합니다. 우리는 각각의 두 형식을 가장 적합한 작업에 사용합니다.
아래 차트에는 E4M3 형식으로 표현할 수 있는 모든 숫자를 표시했습니다. 보시다시피, 그 수치들은 0 주변에 집중되어 있으며 최대값은 500 미만입니다. 사실, FP8 형식의 표현 가능한 값 개수는 아주 짧은 표로 인쇄할 수 있습니다. 이 형식을 훈련에 효과적으로 활용하는 비결은 해당 값들의 분포를 인지하고 그 범위 내에서 작업하는 것이다.
이는 FP8 가중치 텐서와 함께 추가적인 스케일링 계수를 저장하여 제한된 범위를 극복하고 오버플로우 및 언더플로우를 방지하는 것을 포함합니다. 저정밀도 텐서로 계산을 수행할 때는 스케일링 계수도 반드시 고려해야 합니다. 예를 들어, 두 텐서를 곱할 때는 다음 공식을 사용합니다: (A_fp8 * A_scale) × (B_fp8 * B_scale), 여기서 A_fp8와 B_fp8는 8비트 텐서이며, 스케일은 32비트 스칼라이다. 이러한 작업에 대한 특정 하드웨어 지원이 제공됩니다.

FP8 대 BF16의 훈련 성능 비교
훈련 성능이란 주어진 컴퓨팅 성능 하에서 모델이 얼마나 빠르게 훈련될 수 있는지를 의미합니다. FP8과 BF16 간의 훈련 성능을 비교하기 위해, 모델 FLOPS 활용도(MFU)를 살펴봅니다. 이는 모델이 수행하는 초당 부동소수점 연산(FLOPS) 수를, 사용 가능한 하드웨어로 기술적으로 가능한 FLOPS 대비 백분율로 나타낸 값입니다.
비교를 위해, 기술적으로 FP8으로 전환하면 더 많은 FLOPS가 가능해지지만, 우리는 BF16 형식으로 가능한 FLOPS 수를 공통 분모로 삼아 비교했습니다. 이를 통해 BF16에서 FP8으로 전환할 때 가능한 사용 가능한 처리 능력의 증분적 이득을 측정할 수 있었습니다.
아래 차트에서 볼 수 있듯이, FP8을 사용함으로써 모델 훈련 시 가용 컴퓨팅 파워 활용 효율이 44.6% MFU에서 67% MFU로 증가하여 모델 훈련 속도를 50% 가속화했습니다.

그 자체로도 인상적인 성능 향상입니다. 이를 위해 우리는 NVIDIA와 협력하여 Transformer Engine 기능 활용을 최적화했습니다. 다른 훈련 설정을 기반으로, 15개월에 걸쳐 훈련 성능을 점진적으로 25% 향상시켜 80% MFU에 도달했습니다.

FP8 대 BF16: 대규모 언어 모델 훈련 품질 비교
따라서 FP8의 훈련 성능 용어 향상은 정말로 매우 인상적입니다. 그러나 DeepL로서 우리가 진정으로 중요하게 생각하는 출력은 훈련 품질입니다. 이것이 BF16 정밀도로 훈련한 품질과 비교하면 어떨까요?
FP8이 제공하는 품질을 확인하기 위해, 우리는 두 형식 모두에서 모델 중 하나를 훈련시키는 테스트를 수행했습니다. 이를 통해 훈련 손실과 하류 품질을 비교할 수 있었습니다.
우리는 3조 개의 토큰으로 15억 파라미터 모델을 훈련시킨 후 FP8 훈련과 BF16 훈련의 품질을 비교했습니다. 여기서 핵심 지표는 훈련 손실이었으며, 이는 모델이 다음 토큰을 예측하는 능력을 의미한다.
아래 차트에서 보시다시피, FP8 선이 BF16 선보다 약간 위에 위치하는 것으로 나타났듯이, BF16이 FP8보다 약간 우월한 성능을 보였습니다. 그러나 이러한 차이는 두 형식 모두에서 발생하는 단계 간 훈련 손실의 훨씬 더 큰 변동성에 묻혀버리며, 두 경우 모두 시간이 지남에 따라 훈련 손실을 최소화하는 데 동일한 실질적인 개선이 나타남을 확인할 수 있다.

FP8 대 BF16 다운스트림 훈련 품질
그런 다음 FP8과 BF16으로 수행한 훈련이 실제 하류 애플리케이션에서 제공하는 품질을 테스트하기 위해 넘어갔습니다.
이 경우, 우리는 모델이 영어와 독일어로 작업할 때 어떻게 수행하는지 테스트했습니다. 우리는 시퀀스에서 다음 토큰을 예측할 때 모델이 경험하는 불확실성을 정량화하는 검증 퍼플렉시티를 비교했습니다. 다시 한번, 난해도는 시간이 지남에 따라 감소할 것으로 예상된다. 이 실제 시나리오에서, 우리는 FP8 훈련이 BF16에 비해 품질 저하를 전혀 발견하지 못했습니다.

BF16에서 FP8으로 전환함으로써 얻은 순수익은 모델 훈련 속도를 높이고 메모리 요구량을 줄이면서도 동일한 훈련 품질을 달성할 수 있다는 점입니다. 훈련 손실 용어 측면에서 최소한의 저하만 발생하며 검증 퍼플렉시티 역시 유사한 수준을 유지합니다. 이는 실질적으로 DeepL이 처리 능력 활용을 극대화함으로써 더 정교한 모델을 구축하고 더 복잡한 작업을 수행할 수 있음을 의미합니다. 이는 대규모 언어 모델(LLM) 훈련을 통해 우리가 할 수 있는 일의 범위를 상당히 넓혀줍니다.
FP8 훈련에서 추론까지
이 여정의 다음 단계는 대규모 언어 모델(LLM)을 생산 환경 추론에 대비하도록 준비하는 것입니다. 여기서 지원에 대한 중추적인 역할을 수행하는 것은 NVIDIA TensorRT-LLM으로, 이는 NVIDIA의 확장성 대규모 언어 모델(LLM) 추론을 위한 솔루션이며 FP8을 지원합니다. 모델의 가중치를 훈련 과정에서 추출하여 커널 융합, 최적화된 C++/CUDA 코드, KV 캐싱 및 연속적인 인플라이트 배치 처리와 같은 최적화 기법을 활용해 모델의 연산 효율을 극대화하는 엔진을 구축합니다.
FP8의 추론에 대한 이점
LLM의 추론은 항상 처리량(시간당 처리 가능한 토큰 수)과 지연 시간의 상호작용을 수반한다. 최고의 고객 경험을 제공하기 위해서는 지연 시간을 제어하는 것이 필수적이라는 것은 말할 필요도 없다. 그러나 처리량 역시 DeepL에게 매우 중요합니다. 이는 특정 시간에 처리할 수 있는 요청 수를 정의하며, 따라서 모델이 실제로 수행할 수 있는 범위를 결정하기 때문입니다.
처리량이 증가함에 따라 지연 시간도 함께 증가하는 경향이 있는 것은 피할 수 없는 현상이다. 여러 요청을 한꺼번에 처리하면 처리량이 증가하지만, 개인 요청당 지연 시간이 늘어나는 단점이 있습니다. 이는 고객의 경험에 잠재적으로 영향을 미칠 수 있습니다. 그러나 FP8과 BF16의 추론 성능은 이 균형 잡힌 상태를 우리에게 유리하게 크게 변경합니다.
아래 차트에서 볼 수 있듯이, 대부분의 배치 크기에서 FP8은 BF16과 동일한 지연 시간으로 두 배의 처리량을 처리할 수 있습니다. 사용자에게 최적의 경험을 제공하는 특정 지연 시간 예산을 설정하면, 이를 실제 운영에서 확인할 수 있습니다. 실질적으로 FP8은 처리량 용어에 우리 대규모 언어 모델(LLM)의 유효 용량을 효과적으로 두 배로 늘렸습니다.

다시 말해, BF16에서 FP8으로의 전환은 단순히 DeepL을 위한 더 강력하고 정교한 대규모 언어 모델(LLM)을 구축할 수 있게 해준 것 이상입니다. 이를 통해 우리는 대규모 언어 모델을 효과적으로 적용하여 최적의 고객 경험을 제공하고, 실제 환경에서 언어 AI의 영향력을 확장할 수 있게 되었습니다. 더 큰 모델을 더 빠르게 훈련할 수 있으며, 동일한 지연 시간 범위 내에서 작동하면서도 두 배의 요청 수를 처리할 수 있습니다.
다음 단계 최근 NVIDIA DGX GB200 시스템을 탑재한 새로운 NVIDIA DGX SuperPOD를 배포하여 컴퓨팅 성능이 또다시 거의 기하급수적으로 향상되었습니다. 우리에게 정말 흥미로운 점은 이 기계가 행렬 곱셈과 같은 FP4 텐서 연산을 기본적으로 지원할 수 있는 차세대 텐서 코어를 도입한다는 것입니다. 그때 우리의 여정이 다시 시작된다. 단일 바이트로 훈련과 추론에 있어 우리가 무엇을 해낼 수 있는지 보는 것은 흥미진진했습니다. 반 바이트로 무엇을 할 수 있는지 지켜봐 주세요.
저자 소개
마르쿠스 슈노스, 연구원 HPC 엔지니어
마르쿠스 슈노스는 DeepL의 연구원 겸 HPC 엔지니어로, 대규모 언어 모델(LLM)의 훈련 및 추론 스케일링에 주력하고 있습니다. 그는 분산 훈련과 저정밀도 부동소수점 연산에 특별한 관심을 가지고 있다.
www.linkedin.com/in/markus-schnoes-349300185
파비안 요스비그, 연구원 HPC 엔지니어
파비안 요스비그는 DeepL(DeepL)의 연구 엔지니어로, 머신 러닝, 고성능 컴퓨팅 및 이론 입자 물리학 분야의 배경을 가지고 있습니다. 그는 세계에서 가장 정확한 번역기를 위한 AI 모델 및 인프라 확장에 주력하고 있습니다.