|
著者: シェン・ウェンティン、ファン・イートン、アイ・バオレ、ワン・アン、リー・ヨン 1. はじめにPAI-TorchAcc (Torch Accelerator) は、Alibaba Cloud AI Platform によって開発された、PyTorch 用の大規模モデル トレーニング アクセラレーション フレームワークです。 PAI-TorchAcc は、PyTorch をベースにしたシンプルで使いやすいインターフェースを提供し、モデル変換なしで HuggingFace 上のモデルにシームレスに接続し、さまざまな分散戦略を使用してトレーニングを加速できます。 PAI-TorchAccは、コミュニティのPyTorch/XLAを活用し、LazyTensorテクノロジーを用いてPyTorchコードを静的実行グラフに変換します。この計算グラフに基づき、Alibaba Cloud上の計算リソースを考慮しながら、GPUハードウェア上でのモデル学習に向けた、広範囲にわたるターゲット分散最適化と計算最適化を実行します。 PAI-TorchAccは、シンプルなモデルアクセス方式と計算グラフベースの最適化により、様々な規模の大規模モデルを柔軟にサポートし、様々なハードウェアとの互換性を備えています。PAI-TorchAccは、1Bから175Bまでの一般的な大規模モデルのトレーニングをサポートし、PyTorchネイティブやMegatron-LMと比較してトレーニングスループットが向上しています。例えば、LLaMAシリーズモデルの場合、PyTorchネイティブと比較して140%、Megatron-LMと比較して5%の向上を実現しています。A100では、MFUは70%に達し、8枚から128枚への線形速度向上は15.6倍に達します。 2. 背景と要件2.1 背景
近年、大規模言語モデルと動画生成モデルが急速に発展しています。膨大なテキスト、画像、動画のデータセットを用いて学習されたこれらのモデルは、様々な自然言語処理、画像生成、動画生成タスクを実行し、強力な理解・生成能力を備えています。コンピューティングリソースと技術の継続的な進歩により、LLaMA、GPT-3、Tongyi Qianwen、Soraといった大規模モデルのパラメータ数は数億、さらには数兆にまで増加しています。これらのモデルは、多くのベンチマークテストで前例のない性能を発揮しています。 しかし、大規模モデルの学習には非常に高いコストがかかる。例えば、Megatron-LMを用いてOPT-175Bモデルを事前学習する場合、2ヶ月間の学習に数千台のA100が必要であり、ハードウェア利用率は約47%(MFU)であった。この期間中、ハードウェア障害により、モデルは数十回のチェックポイントロードと再学習を経た。PyTorch FSDPを用いたLLaMA-2-70Bの微調整にも、16台のA100と約13.5時間の運用が必要である[2]。NVIDIA A100やH100などのハードウェアリソースは高価で入手が困難であり、よりコストパフォーマンスの高い他のハードウェアリソースが徐々に市場に登場している。 さまざまな大規模モデルの事前トレーニング、再トレーニング、および微調整を高速化し、さまざまなハードウェア リソースを最大限に活用してリソース使用率を向上させることは、大規模モデルのトレーニング コストを削減する効果的な方法です。
NVIDIA Megatron-LMは、大規模なTransformerベースモデルの学習を目的としたPyTorchベースの分散学習フレームワークです。Megatron-LMは、データ並列性、モデル並列性、パイプライン並列性を統合し、GPT-3などの特定のモデルを学習します。しかし、異なる大規模モデルや学習データセットをMegatron-LMに統合することは柔軟性に欠け、チェックポイントやデータ形式の変換が必要になります。さらに、Megatron-LMは一部のモデル演算子に対して手動最適化を実行しますが、異なるモデルの異なる計算モードを扱う際に、これらの最適化を自動的に適用することは困難です。
DeepSpeedは、Microsoftが開発したPyTorch上の大規模モデル向けのオープンソース分散学習フレームワークです。ZeROとパイプライン並列処理をサポートし、Megatron-LMと組み合わせて3D並列処理を実行できます。DeepSpeedは、HuggingFaceトランスフォーマーライブラリの学習コンポーネントとなっています。しかし、DeepSpeedのパフォーマンスは比較的低く、Megatron-LMと同様に、さまざまな計算モードへの柔軟な最適化には限界があります。
PyTorch/XLAはPyTorchとOpenXLAを組み合わせ、LazyTenorテクノロジーを用いてPyTorchコードを静的実行グラフに変換します。そして、この静的グラフに対して計算グラフの最適化とバックエンドコンパイルの最適化が実行されます。PyTorch/XLAは主にTPUシナリオ向けに最適化されていますが、Transformersモデルで一般的に使用されるFlashAttentionアクセラレーション演算子のサポート不足、torchrunの起動サポート不足、計算通信の重複の少なさ、メモリオーバーヘッドの高さなど、GPU上では依然としていくつかの問題と最適化の余地が残っています。 2.2 要件このような背景から、多様なPyTorchモデル、特にTransformer型モデルを容易に統合でき、様々なハードウェアと互換性のある大規模分散トレーニングエンジンが必要です。異なる計算モード、さまざまなハードウェアアーキテクチャ、計算/メモリアクセス能力において、自動的に計算を最適化し、Alibaba Cloudハードウェア上で特に高いパフォーマンスを発揮する必要があります。同時に、モデルのサイズが大きいため、シングルカードメモリやGPUメモリでは完全に収容できません。異なるモデルには、マルチカードトレーニングを完了し、線形速度を向上させるために、異なる分散戦略と適切な通信が必要です。 3. PAI-TorchAccコアテクノロジーの特徴柔軟なモデル統合
数千億のモデルパラメータ
包括的なトレーニングモード
複合分散戦略
自動計算最適化とビデオメモリ最適化
複数のハードウェアと互換性あり
既存のフレームワークと比較して
4. PAI-TorchAccアーキテクチャ4.1 全体的なアーキテクチャPAI-TorchAcc のアーキテクチャは、上から下に向かって次のレイヤーに分かれています。
4.2 インターフェースPAI-TorchAcc は簡潔なインターフェース セットを抽出し、元のモデル コードを変更することなく、あらゆる PyTorch モデルの柔軟な統合と高速化を可能にします。 PAI-TorchAcc を使用してモデル トレーニングを高速化するには、通常、次の 3 つのステップが必要です。
モデル = ... データローダー = ... + # たった1行のコードでモデルを高速化します。Configを渡すことで、分散戦略やコンパイル最適化オプションなど、より豊富な高速化機能を設定することもできます。+ model = torchacc.accelerate(model) + # データ読み込みの非同期高速化 + dataloader = torchacc.AsyncLoader(dataloader, model.device) モデル.トレーニング() ソースの場合、データローダー内のラベル: ... 4.3 コンパイル最適化PAI-TorchAcc は、LazyTensor や Symbolic Trace などのテクノロジーを使用してフロントエンドの PyTorch コードを静的実行グラフに変換し、静的グラフ上で自動最適化を実行して、分散ハードウェア デバイス上での効率的な操作を可能にします。 4.4 計算グラフの最適化最適化は、High-Level IR (StableHLO) に基づいて、Tensor Graph 上で実行されます。
4.5 バックエンドコンパイルの最適化最適化は、LHLO、LLVM IR、さまざまな MLIR 方言を含む低レベル IR に基づいて、バッファー グラフで実行されます。
5.実践的な事例とパフォーマンスPAI-TorchAccはA100で70%のMFUを達成し、複数のGPU(8GPUから128GPUまで15.6倍の高速化)にほぼ線形にスケーリングします。様々なモデルを柔軟にサポートしながら、その性能はMegatron-LMを凌駕します。私たちは、同じハードウェアリソースを使用して、一般的なオープンソースの大規模モデルで性能テストを実施しました。PAI-TorchAccのトレーニングスループットは、ネイティブPyTorchおよびMegatronと比較して向上しています。例えば、LLaMAシリーズのモデルは、ネイティブPyTorchと比較して140%、Megatronと比較して5%の向上を示しています。 以降の記事では、PAI-TorchAcc を OLMo モデルトレーニングに統合する例とその加速効果、および加速の原因の分析など、具体的な実践的なケーススタディを紹介します。 6.まとめと今後の展望PAI-TorchAccはPyTorchモデルと柔軟に統合し、並列化戦略、メモリ最適化、計算最適化、スケジューリング最適化を通じて、大規模モデル、視覚モデル、音声モデルの学習を高速化できます。PAI-TorchAccは、LLaMA、LLaMA-2、BaiChuan、ChatGLM、QWen、OLMo、Bloomといった一般的な大規模モデルで既に良好な結果を達成しています。今後も、より多くのシナリオをサポートし、より優れた高速化結果を達成するために、以下の方向で最適化を継続していきます。
|