DeepLの次世代LLMを、訓練する時と推論時にFP8を用いて構築した方法

DeepLが現在のNVIDIA DGX SuperPOD(544基のNVIDIA H100 Tensor Core GPUを搭載)をデプロイした際、単に計算能力が大幅に向上しただけではありませんでした。H100は、新世代のTensorコアを通じて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は利用可能な16の位置を、それぞれ8ビットの2バイトで構成しております。FP8はわずか1バイトを使用します。 

利用可能なビット数は、科学記数法における浮動小数点数の仮数部と指数部をデプロイできる精度を決定します.BF16は、符号ビットが1ビット、指数部が8ビット、仮数部が7ビットで構成されています。FP8は、符号ビット1ビットと、指数部と仮数部に分けられた7ビットで構成されており、FP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8はFP8このため、BF16よりも可視範囲が狭く、精度が低くなっております。より狭い範囲を表すことができ、その範囲内の数値も少なくなります。

例えば、地球の年齢を十億年単位(およそ45億4300万年)で表したい場合を考えてみましょう。BF16では、これを正確に0100000010010001と表現できます。  

その数値をFP8で表現するのはいかがでしょうか?実際には、FP8形式には2種類お選びいただけます: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を活用できるよう、一連の並列化戦略をデプロイして、大きな数のGPUの利用が可能となります。

混合精度を訓練する際のFP8形式の適用

既存のトレーニングコードをBF16からFP8へ移行いたしました。この際、NVIDIA Transformer Engine(NVIDIAが提供するトレーニングライブラリ)を活用いたしました。同ライブラリはトランスフォーマーモデルの訓練を高速化し、FP8形式に対応するサポートを含んでおります。トランスフォーマーエンジンは、混合精度の訓練を可能にする重要なコンポーネントを提供し、FP8とBF16形式間の変換をシームレスにマネージャーし、スケーリング係数の処理を行います。

NVIDIAの推奨に従い、Transformer Engineのデフォルト設定を使用しております。具体的には、訓練する際の順方向パスではE4M3を、逆方向パスではE5M2を採用しております。これは実質的に、次のトークンの確率分布を予測する際には高精度な形式を用い、一方、モデルの更新に必要な勾配を計算する際には精度がそれほど重要でないため、精度こそ低いが範囲が広い形式を用いることを意味します。それぞれの形式は、最も適した用途に応じて使用しております。

下記の表には、E4M3形式で表現可能な数値をすべてプロットしております。ご覧の通り、それらの数値はゼロ付近に集中しており、最大値は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へ移行する際に利用可能な処理能力の使用において、段階的な向上が可能となることを測定することができました。

下記のグラフが示す通り、当社のモデル訓練における利用可能な演算能力の効率的な活用率は、44.6% MFUからFP8導入により67% MFUへと向上し、モデル訓練を実質的に50%高速化することができました。

それ自体が、非常に印象的なパフォーマンス向上です。その実現に向け、NVIDIA社と協力し、Transformer Engineの機能活用を最適化いたしました。別のトレーニング設定に基づき、15か月の期間をかけて訓練する性能を段階的に25%向上させ、MFUを80%まで引き上げることに成功いたしました。

大規模言語モデル(LLM)の訓練する品質におけるFP8とBF16の比較

FP8の訓練する性能に関する用語の向上は、非常に印象的なものと言えます。しかしながら、DeepLとして私たちが真に重視している出力は、訓練する品質です。BF16精度で訓練する品質と比べて、これはどの程度になるでしょうか?

FP8が提供する品質を確認するため、当社のモデルの一つを両方の形式で訓練するテストを実施いたしました。これにより、訓練する損失と下流の品質を比較することが可能となりました。 

1.5Bモデルの3兆トークンで訓練し、その後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コード、キーバリューキャッシュ、連続的なインフライトバッチ処理といった最適化技術を用いて、モデルの演算効率を可能な限り高めるエンジンを構築します。 

FP8が推論にもたらす利点

大規模言語モデル(LLM)における推論処理は、常にスループット(一定時間内に処理可能なトークンの数)とレイテンシーの相互作用を伴います。言うまでもなく、最高のお客様体験を提供するには、遅延を制御することが不可欠です。しかしながら、スループットもDeepLにとって非常に重要です。なぜなら、それは特定の時間に処理できるリクエストの数を定義し、したがってモデルが実際に達成できる範囲を決定するからです。

スループットが増加するにつれて、遅延も増加する傾向にあるのは避けられません。複数のリクエストをバッチ処理することで、より高いスループットを実現できますが、その代償として個人のリクエストごとの遅延が増加します。これはお客様のご体験に影響を及ぼす可能性があります。しかしながら、FP8とBF16の推論性能を比較すると、このバランスが我々の有利な方向に大きく変更します。

下記のグラフが示す通り、ほとんどのバッチサイズにおいて、FP8はBF16と同等のレイテンシで2倍のスループットを処理できます。ユーザーにとって最適な体験に相当する特定のレイテンシ予算を設定すれば、実際にその効果を確認することができます。実質的に、FP8はスループットの用語で、当社の大規模言語モデル(LLM)の実効容量を実質的に倍増させました。 

言い換えれば、BF16からFP8への移行は、DeepL向けにより強力で洗練された大規模言語モデル(LLM)を構築することを可能にしただけではありません。また、これらの大規模言語モデルを効果的に活用し、最適なお客様体験を提供するとともに、実際の現場における言語AIの影響力を拡大できることも保証されています。より大規模なモデルの訓練を高速化することが可能となり、その結果、同じレイテンシ条件下で動作しながら、2倍のリクエスト数を処理できるようになります。

今後の展望このたび、NVIDIA DGX GB200システムを搭載した新たなNVIDIA DGX SuperPODをデプロイしました。これにより、計算能力が再びほぼ指数関数的に向上いたしました。当社にとって特に興味深い点は、このマシンが新たな世代のテンソルコアを導入し、行列乗算などのFP4テンソル演算をネイティブに対応できることです。その時こそ、私たちの旅が再び始まります。単一のバイトを用いて、訓練するプロセスと推論においてどのようなことが実現できるのかを目の当たりにできるのは、非常に興味深いことです。このスペースにご注目ください。半バイトで何が可能かをお見せします。


著者について

マルクス・シュノース、スタッフ研究員(HPCエンジニア)

マルクス・シュノース氏はDeepLのスタッフ研究HPCエンジニアとして、大規模言語モデル(LLM)の訓練する側と推論のスケールアップに注力しております。彼は分散して訓練する技術と低精度浮動小数点演算に特に興味を持っておられます。

www.linkedin.com/in/markus-schnoes-349300185

https://github.com/Marks101

ファビアン・ヨスヴィグ、スタッフ研究員 HPCエンジニア

ファビアン・ヨスヴィグ氏はDeepLの主任研究エンジニアであり、機械学習、高性能計算、理論素粒子物理学の分野での経歴をお持ちです。彼は、世界で最も正確なDeepL翻訳のために、AIモデルとインフラの拡張に注力しております。

https://www.linkedin.com/in/fabianjoswig/

https://github.com/fjosw

共有する