blogs/deepspeed-ucp/japanese/README.md
DeepSpeed Universal Checkpointを引用する際は、こちらのarxiv reportを参照してください。
@article{lian2024-ucp,
title={Universal Checkpointing: Efficient and Flexible Checkpointing for
Large Scale Distributed Training},
author={Xinyu Lian and Sam Ade Jacobs and Masahiro Tanaka and Lev
Kurilenko and Stas Bekman and Olatunji Ruwase and Minjia Zhang},
journal={arxiv preprint arxiv:406.18820},
year={2024},
}
モデルの状態を保存するをチェックポイントは、システム障害が発生した場合に途中から学習を再開するために、LLMのトレーニングコストを削減するための重要な技術です。さらに、学習のさまざまな段階でモデルのパフォーマンスを評価することができるため、ハイパーパラメータの調整や異なる下流タスクのためのファインチューニングが容易になります。
しかし、特に分散学習やファインチューニングのシナリオにおいて、チェックポイントの設計、実装、および使用には多くの課題があります。DeepSpeedが備えるZeROを用いたデータ並列化(ZeRO-DP)、パイプライン並列化(PP)、テンソル並列化(TP)、およびシーケンス並列化(SP)などのいくつかの方法は、LLM学習を加速するための優れた技術ですが、一般的なチェックポイント保存と読み込みのメカニズムと互換性がありません。さらに、これらの異なる並列化を用いたエラスティックで柔軟な組み合わせは、現在サポートされていません。主な理由の一つは、こうした並列化技術がモデルおよび/またはオプティマイザの状態を分割するため、異なるGPUまたはアクセラレータの数に基づいて作成されたチェックポイントから学習を再開することが困難であるためです。
このリリースでは、分散チェックポイントの問題に対する包括的なソリューションであるDeepSpeed Universal Checkpointing (UCP) を紹介します。UCPは、任意の並列化戦略とハードウェア構成で再開する柔軟性を提供しながら、効率的なチェックポイント作成を可能にします。また、UCPは、ハードウェア障害の際にも、残りの正常なハードウェアでのトレーニングの継続を可能にするため、キャパシティがエラスティックに変化するハードウェアを活用でき、トレーニング時間を短縮するなど、大規模学習を最大限に効率化できます。
現在のリリースには、UCPの次の機能が含まれます。
DeepSpeed UCPにおける中心的な考え方は、チェックポイントライフサイクルの各段階で最適な表現を選択することです。保存のための分散表現と、読み込みのための統合表現です。これは、2つの重要なメカニズムを使用して実現されます。一つ目は、各モデルパラメータの統合表現と、パラメータのフラグメントを任意のモデル並列化構成におけるランク(プロセスのインデックス)にマッピングするためのメタデータからなるユニバーサルチェックポイントフォーマットです。二つ目は、分散チェックポイントをユニバーサルチェックポイント形式に変換するためのシンプルで強力かつ堅牢な仕様言語であるユニバーサルチェックポイント言語です。
図1:UCPの概要:上段と下段はそれぞれソースとターゲットの並列化構成です。中央の段は、ソースからターゲットへの翻訳の仲介ブロックとしてのUCPを示しています。
図1は、UCPの変換プロセスとフォーマットの抽象レベルの概略図を示しています。変換は、DP、TP、PP、SPなどの任意の並列戦略形式のチェックポイントから始まります。訓練結果のモデルやオプティマイザ状態をネイティブ形式で保存することで、同期されたグローバルチェックポイントの保存に伴うオーバーヘッドを回避します。保存されたチェックポイント(以下、ソースと呼びます)を任意の並列戦略に簡単に変換してロードできるようにするために、中間ブロックとして原子チェックポイント (atomic checkpoint) 形式のアイデアを導入します。
原子チェックポイントの概念は、UCPの中心となるものです。これらは、各モデルパラメータの統合表現とオプティマイザ状態を含む細粒度のファイルです。原子チェックポイント形式は、次の3つの理由で有用です。まず、チェックポイントの原子表現は、分散チェックポイントと特定の並列技術およびハードウェア構成の依存関係を切り離します。そのため、ソースからターゲットへの個別のコンバータを実装する必要はありません。代わりに、UCPは異なる分散トレーニング技術間の共通交換形式として機能し、他の分散トレーニング戦略に簡単に変換できます(図2参照)。各モデルパラメータの統合表現を保持することで、UCPはモデル状態またはフラグメント状態をパラメータごとに異なるGPUに柔軟にマッピングし、大規模モデルチェックポイントを読み込むために必要な作業メモリを効果的に削減します。第二に、UCPの変換は遅延してオンデマンドで行われます。たとえば、トレーニングプロセスが並列技術とハードウェア構成の変更を検出したときです。つまり、既存の分散チェックポイント保存ロジックには変更が必要ありません。第三に、UCPの構造により、混合精度トレーニングなどの高度な技術を分散トレーニングで簡単に処理できます。実際には、研究者や実務者はfp16とbfloat16の混合精度トレーニングを切り替えることがあります。fp32の重み/オプティマイザの値を保持することで、トレーニングはfp16またはbfloat16のいずれかで再開できます。
図2:UCP言語は、分散チェックポイントをUCP形式に変換し、新しいハードウェア構成とターゲットの並列技術に基づいてUCPチェックポイントを読み込みます。
UCPは異なる並列戦略に対する共通インターフェースを提供しますが、任意の分散チェックポイントからUCPへの変換の開発には依然として高いエンジニアリングおよび実装コストがかかる場合があります。これは、分散トレーニングの各GPUが保存のためのメソッド(例:PyTorchのtorch.save())を呼び出して、所有するGPUモデル状態のチェックポイントファイルをディスクに保存し、各チェックポイントの正確な内容が異なる技術によって異なるためです。
この課題に取り組むために、UCPはUCP言語を提供します。これは、前述の共通形式にいくつかの種類の分散チェックポイントを変換するためのシンプルで強力な仕様言語です。UCPはこれを2つの方法で行います。まず、モデル状態の並列戦略の広範な範囲をカバーする事前定義されたパラメータパターンを持つ宣言型システムを提供します。パラメータパターンには、パラメータがGPU間でどのように分割されているかについてのランタイム情報が含まれています。たとえば、nopatternは、パラメータがGPUランクに一意に関連付けられていることを意味し、これはZeRO-1/2やPPなどの技術で最も一般的に見られるパターンです(現在サポートされているパラメータパターンの完全なリストについては、技術レポートを参照してください)。第二に、UCP言語は、分散チェックポイントを統合された原子チェックポイントに変換するための一般的な演算子のセットを提供します。抽象的なレベルで見ると、図2に示すように、ターゲットへの移行後に新しい並列技術が必要な場合やハードウェア構成が変更された場合に、UCP言語が使用されます。最初に、分散チェックポイントをUCP形式に変換し、次にターゲットの並列技術と新しいハードウェア構成に基づいてUCPチェックポイントを読み込みます。
我々は、LLMの訓練に関する一連の実験を通じてUCPを評価します。デコーダーのみのトランスフォーマーに焦点を当てました。これは最先端のパフォーマンスを持つアーキテクチャです。いくつかの最大のモデルもデコーダーベースであるため、柔軟で効率的なチェックポイントは特に重要です。このブログでは、さまざまなモデルと並列戦略にわたる正確性の検証結果を紹介します。並列効率分析、詳細なシステムおよびモデルアーキテクチャ、および訓練のハイパーパラメータに関する詳細な結果については、上記の技術レポートを参照してください。
UCPは、異なるハードウェア構成を持つ異なるターゲットの並列戦略に対するソース並列戦略からの柔軟なチェックポイントを提供します。この能力を検証するために、2つの実験グループでUCPの正確さを確認しました。
図3:さまざまなGPU数と並列戦略でターゲットにUCPチェックポイントをロードする訓練lossの曲線(イテレーション100で保存・ロード)
UCPが異なる並列戦略とハードウェア構成での訓練再開を可能にするかどうかをテストするために、まずTP=2、PP=2、DP=2(ZeRO-1)、SP=1の構成でGPT-3モデルを訓練します。時間とリソースの制約のため、この実験は最初の200イテレーションに限定しました。100イテレーション目で保存されたチェックポイントをUCPチェックポイントに変換し、異なるGPU数と並列戦略を使用してこれらのUCPチェックポイントで訓練を再開します。各イテレーションのLM損失(データ並列グループ全体の平均損失)を記録しました。図3は、異なるターゲット並列戦略を使用してUCPチェックポイントで訓練をシームレスに再開し、ソース戦略を継続して訓練する場合と一致する収束を達成することを示しています。
図4:100イテレーション目で異なるソース並列戦略をUCPに変換し、異なるターゲットでUCPをロードする訓練lossの曲線
図4は、複数のソース構成から単一のターゲットへのlossの曲線を示しています。固定されたランダムシードを使用して、まずGPT-3モデルを異なるソース構成で訓練します。次に、100イテレーション目で保存された分散チェックポイントをUCPチェックポイントに変換し、TP=2、PP=2、DP=1、SP=1の構成でトレーニングを再開します。結果は、異なるソース構成にもかかわらず、そのチェックポイントはすべてUCPに変換され、異なる構成で訓練を再開できることを示しています。最も重要なのは、再開されたlossの曲線が、イテレーション101~200でのソースの曲線と一致することです。これらの結果は、訓練再開時に任意の構成を異なる構成に変換するUCPの効果を検証しています。
UCPはモデルアーキテクチャに依存しません。したがって、GPTモデルとの互換性だけでなく、さまざまなモデルアーキテクチャとサイズをサポートする柔軟性も備えています。図5、6、7は、新しい並列戦略でUCPから訓練を再開したときのLLaMA 7B、BLOOM 176B、およびMixtral-7x8B MoEを元にしたモデルのトレーニング収束を示しています。これらの図は、トレーニングがUCPでシームレスに再開され、これらの多様なモデル全体で訓練の初期フェーズと一致する収束を達成することを示しています。これらの結果は、さまざまなモデルアーキテクチャとサイズに対するUCPの柔軟性を示しています。
図5:LLaMAモデルアーキテクチャの訓練lossの曲線。ソースはTP=PP=DP=2。訓練はイテレーション101で新しいターゲットTP=DP=2、PP=1およびTP=PP=2、DP=1で再開しました。
図6:BLOOMモデルアーキテクチャの訓練lossの曲線。ソースはTP=2、PP=24、DP=8。訓練はイテレーション94767で新しいターゲットTP=2、DP=4、PP=24で再開しました。
図7:Mixtral-MoEモデルアーキテクチャに基づくモデルの訓練lossの曲線。ソースはTP=1、PP=2、DP=4。訓練はイテレーション501で新しいターゲットTP=PP=DP=2で再開しました。
DeepSpeed Universal Checkpointは、リベースされたMegatron-DeepSpeedバージョンに完全に統合されており、DeepSpeedおよびMegatron-DeepSpeedのGitHubリポジトリを通じてアクセスできます。使用に関する詳細なチュートリアルは、DeepSpeedチュートリアルページにあります。
DeepSpeedでは、広範なオープンソースコミュニティからの貢献とコラボレーションを受け入れています。DeepSpeed Universal Checkpointは、大規模AIトレーニングおよび推論のためのDeepSpeedエコシステムの一部です。すべてのDeepSpeed技術とイノベーションについての詳細は、ウェブサイトをご覧いただき、X(旧Twitter)での英語、日本語、および中国のZhihuをフォローしてください。
University of Illinois at Urbana-Champaign、Statosphere、およびIntel Habanaとの協力に感謝します。
コントリビュータ: Xinyu Lian $^1$, Sam Ade Jacobs $^2$, Lev Kurilenko $^2$, Masahiro Tanaka $^2$, Stas Bekman $^3$, Olatunji Ruwase $^2$, Minjia Zhang $^1$, Moshe Island $^4$
1: University of Illinois at Urbana-Champaign 2: Microsoft 3: StasoSphere 4: Intel Habana