最近の深層学習の発展により、GPT-3、BLOOM、OPT などのモデルがますます大きくなり、そのうちのいくつかはすでに 100 億のパラメーターを超えています。 大規模なモデルはより強力になる傾向がありますが、そのようなモデルのトレーニングにはかなりの計算リソースが必要です。 FSDP や DeepSpeed などの高度な分散トレーニング ライブラリを使用しても、トレーニング ジョブで数週間または数か月間、数百のアクセラレータ デバイスが必要になるのはよくあることです。
2022 年後半、AWS は の一般提供を発表しました。 Amazon EC2 Trn1 インスタンス を搭載 AWS トレーニング—クラウドでディープ ラーニング モデルをトレーニングするための高性能で費用対効果が高く、非常にスケーラブルなプラットフォームを提供するために最適化された専用の機械学習 (ML) アクセラレータ。 Trn1 インスタンスはさまざまなサイズで利用でき (次の表を参照)、インスタンスごとに最大 16 個の Trainium アクセラレータを使用できます。
インスタンスサイズ | トレーニング アクセラレーター | アクセラレータ メモリ (GB) | vCPU | インスタンスメモリ (GiB) | Network Bandwidth (Gbps) |
trn1.2xlarge | 1 | 32 | 8 | 32 | 最大12.5 |
trn1.32xlarge | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (近日公開予定) | 16 | 512 | 128 | 512 | 1600 |
Trn1 インスタンスは、小規模なトレーニング ジョブ用のスタンドアロン インスタンスとしてデプロイすることも、数万の Trainium アクセラレータにわたる分散トレーニングをサポートする非常にスケーラブルなウルトラクラスターでデプロイすることもできます。 すべての Trn1 インスタンスはスタンドアロン構成をサポートしますが、Trn1 ウルトラクラスターには trn1.32xlarge または trn1n.32xlarge インスタンスが必要です。 ウルトラクラスターでは、複数の Trn1 インスタンスが特定の AWS アベイラビリティー ゾーンに配置され、高速で低レイテンシーの Elastic Fabric Adapter (EFA) ネットワークに接続され、インスタンスごとに 800 Gbps のノンブロッキング ネットワーク帯域幅を提供して、集合的なコンピューティング操作を実現します。 . 1 年初頭にリリースされる trn32n.2023xlarge インスタンス タイプでは、この帯域幅がインスタンスあたり 1600 Gbps に増加します。
多くの企業顧客は、クラウドでのコンテナ オーケストレーションのデファクト スタンダードである Kubernetes を使用してディープ ラーニング ワークロードをデプロイすることを選択しています。 AWS のお客様は、多くの場合、これらのワークロードを Amazon Elastic Kubernetesサービス (Amazon EKS)。 Amazon EKS は、アップストリーム Kubernetes の完全な柔軟性を提供しながら、Kubernetes クラスターの作成、構成、ライフサイクル、およびモニタリングを簡素化するマネージド Kubernetes サービスです。
本日、Amazon EKS および EC2 Trn1 インスタンスを使用した分散トレーニング ジョブの公式サポートを発表できることを嬉しく思います。 この発表により、Trn1 インスタンスが提供するコストパフォーマンス、スケーラビリティ、使いやすさを最大限に活用しながら、Amazon EKS 内で大規模なコンテナ化されたトレーニングジョブを簡単に実行できるようになりました。
この発表とともに、Amazon EKS および Trn1 インスタンスを使用して、マルチインスタンス分散トレーニング ジョブ (BERT フェーズ 1 事前トレーニング) を実行するために必要な手順を説明する詳細なチュートリアルも公開しています。 この投稿では、ソリューション アーキテクチャについて学び、チュートリアルのいくつかの重要な手順を確認します。 を参照してください。 公式チュートリアル リポジトリ 完全なエンドツーエンドのワークフローのために。
理解を深めるために、次のようなコア AWS サービスに関する幅広い知識が必要です。 アマゾン エラスティック コンピューティング クラウド (Amazon EC2) と Amazon EKS が暗示され、ディープ ラーニングと PyTorch の基本的な知識が役立ちます。
ソリューションのアーキテクチャ
次の図は、ソリューションのアーキテクチャを示しています。
このソリューションは、次の主要コンポーネントで構成されています。
- EKS クラスター
- trn1.32xlarge インスタンスで構成される EKS ノード グループ
- AWS ニューロン SDK
- Neuron および EFA 用の EKS プラグイン
- An Amazon エラスティック コンテナ レジストリ (Amazon ECR) レポジトリ
- トレーニング コンテナ イメージ
- An 光沢のためのAmazonFSx ファイルシステム
- Volcano バッチ スケジューラと etcd サーバー
- TorchX ユニバーサル ジョブ ランチャー
- Trainium 用の TorchX DDP モジュール
ソリューションの中心にあるのは、EKS サービス エンドポイントを介してコア Kubernetes 管理機能を提供する EKS クラスターです。 Amazon EKS の利点の 1.32 つは、サービスが負荷に基づいてコントロール プレーンを積極的に監視およびスケーリングすることです。これにより、分散トレーニングなどの大規模なワークロードで高いパフォーマンスが保証されます。 EKS クラスター内には、同じアベイラビリティーゾーンに存在する XNUMX つ以上の trnXNUMXxlarge Tranium ベースのインスタンスで構成されるノードグループがあります。
Neuron SDK は、ドライバ、コンパイラ、ランタイム、フレームワーク統合 (PyTorch Neuron など)、Trainium アクセラレータの利点にアクセスできるユーザー ツールを提供するソフトウェア スタックです。 Neuron デバイス ドライバーは、EKS ノード (Trn1 インスタンス) で直接実行され、ノードで起動されるトレーニング コンテナー内から Trainium チップへのアクセスを提供します。 Neuron および EFA プラグインは EKS クラスター内にインストールされ、分散トレーニングに必要な Trainium チップおよび EFA ネットワーク デバイスへのアクセスを提供します。
ECR リポジトリは、トレーニング コンテナー イメージの保存に使用されます。 これらのイメージには、Neuron SDK (Trn1 インスタンスで直接実行される Neuron ドライバーを除く)、PyTorch トレーニング スクリプト、および必要な依存関係が含まれています。 トレーニング ジョブが EKS クラスターで起動されると、最初にコンテナー イメージが Amazon ECR から EKS ノードにプルされ、次に PyTorch ワーカー コンテナーがイメージからインスタンス化されます。
共有ストレージは、trn1.32xlarge インスタンスと同じアベイラビリティーゾーンに存在する高性能 FSx for Lustre ファイルシステムを使用して提供されます。 FSx for Lustre ファイル システムの作成と EKS クラスターへの接続は、 Amazon FSx for Lustre CSI ドライバー. このソリューションでは、共有ストレージを使用して、トレーニング データセットと、トレーニング プロセス中に作成されたログまたはアーティファクトを保存します。
解決策は TorchX ユニバーサル ジョブ ランチャー Amazon EKS 内で分散トレーニング ジョブを起動します。 TorchX には、Volcano バッチ スケジューラと etcd サーバーという XNUMX つの重要な依存関係があります。 Volcano はトレーニング ジョブのスケジューリングとキューイングを処理しますが、etcd サーバーは、ジョブの起動時に同期とピア検出のために TorchElastic によって使用されるキーと値のストアです。
TorchX を使用してトレーニング ジョブが起動されると、起動コマンドは、Trainium 用に提供された TorchX 分散 DDP モジュールを使用して、トレーニング ジョブ全体を構成し、各 PyTorch ワーカー ポッドで適切な torchrun コマンドを実行します。 ジョブの実行中は、標準の Kubernetes ツール (kubectl など) または TensorBoard などの標準の ML ツールセットを使用して監視できます。
ソリューションの概要
このソリューションの重要な手順を見てみましょう。 この概要では、 TorchX と EKS を使用して、Trainium でマルチノード PyTorch ニューロン トレーニング ジョブを起動する GitHub のチュートリアル。
EKS クラスターを作成する
Trn1 インスタンスを使用して Amazon EKS で分散トレーニング ジョブを開始するには、最初に EKS クラスターを作成します。 GitHub のチュートリアル. クラスタの作成は、次のような標準ツールを使用して実現できます。 eksctl
および AWS CloudFormation.
EKS ノード グループを作成する
次に、サポートされているリージョンに 1.32 つ以上の trnXNUMXxlarge インスタンスを含む EKS ノード グループを作成する必要があります。 チュートリアルでは、 AWS CloudFormation を使用して、Trainium 固有の EC2 起動テンプレートを作成しますこれにより、Trn1 インスタンスが適切な Amazon マシン イメージ (AMI) と、分散トレーニングをサポートするために必要な正しい EFA ネットワーク構成で起動されます。 AMI には、Trainium アクセラレータ チップをサポートする Neuron デバイス ドライバも含まれています。 とともに eksctl
Amazon EKS 管理ツールを使用すると、新しく作成された起動テンプレートを参照する基本的な YAML マニフェストを使用して、Trainium ノード グループを簡単に作成できます。 例えば:
前のマニフェストでは、EKS クラスターで Trn1 インスタンスを使用できるように、いくつかの属性が構成されています。 初め、 metadata.region
Trn1 インスタンスをサポートするリージョンの XNUMX つに設定されます (現在、 us-east-1
および us-west-2
)。 次に、availabilityZones の場合、Amazon EKS では 1 つのアベイラビリティーゾーンを指定する必要があります。 これらのアベイラビリティーゾーンの XNUMX つは TrnXNUMX インスタンスの使用をサポートする必要があり、もう XNUMX つはランダムに選択できます。 チュートリアルでは、 AWS アカウント内で Trn1 インスタンスを許可するアベイラビリティーゾーンを決定する. 同じ Trn1 をサポートするアベイラビリティーゾーンも、 availabiltyZones
EKS ノード グループに関連付けられた属性。 efaEnabled
に設定されています true
分散トレーニングに必要な適切な EFA ネットワーク構成でノードを構成します。 最後に、 launchTemplate.id
ノード グループに関連付けられた属性は、前のステップで AWS CloudFormation を介して作成された EC2 起動テンプレートを指します。
すでに CloudFormation テンプレートを適用し、 eksctl
管理ツールを使用すると、次のコードを実行して、Trainium 対応の EKS ノード グループを作成できます。
Trainium および EFA デバイス用の Kubernetes プラグインをインストールする
ノード グループを配置したら、次のステップは、Trainium アクセラレータ (Neuron プラグイン経由) と EFA デバイス (EFA プラグイン経由) のサポートを提供する Kubernetes プラグインをインストールすることです。 これらのプラグインは、標準のプラグインを使用してクラスターに簡単にインストールできます。 kubectl
チュートリアルに示されている管理ツール。
TorchX ユニバーサル PyTorch ランチャーを使用して分散トレーニング ジョブを起動するには、Volcano バッチ スケジューラと etcd サーバーの XNUMX つの前提条件が必要です。 Neuron や EFA プラグインと同じように、 kubectl
ツールを使用して、Volcano と etcd サーバーを EKS クラスターにインストールします。
共有ストレージを EKS クラスターにアタッチする
チュートリアルでは、FSx for Lustre を使用して、さまざまな EKS ワーカー ポッドからアクセスできる高性能の共有ファイル システムを提供します。 この共有ストレージは、トレーニング データセット、およびトレーニング プロセス中に作成されるアーティファクトとログをホストするために使用されます。 このチュートリアルでは、共有ストレージを作成してクラスターにアタッチする方法について説明します。 Amazon FSx for Lustre CSI ドライバー.
トレーニング コンテナ イメージを作成する
次に、PyTorch トレーニング スクリプトと依存関係を含むトレーニング コンテナー イメージを作成する必要があります。 サンプルの Dockerfile がチュートリアルに含まれており、BERT 事前トレーニング スクリプトとそのソフトウェア依存関係が組み込まれています。 Dockerfile を使用してトレーニング コンテナー イメージを構築し、その後イメージを ECR リポジトリにプッシュします。このリポジトリから、トレーニング ジョブがクラスターで起動されたときに PyTorch ワーカーがイメージをプルできます。
トレーニング データを設定する
トレーニング ジョブを起動する前に、まずトレーニング データが FSx for Lustre の共有ストレージ ボリュームにコピーされます。 このチュートリアルでは、共有ストレージ ボリュームにアクセスできる一時的な Kubernetes ポッドを作成する方法を概説し、ポッドにログインして、標準の Linux シェル コマンドを使用してトレーニング データセットをダウンロードおよび抽出する方法を示します。
さまざまなインフラストラクチャとソフトウェアの前提条件が整ったので、ソリューションの Trainium の側面に集中できます。
モデルをプリコンパイルする
Neuron SDK は、PyTorch と呼ばれる統合レイヤーを通じて PyTorch をサポートします。 PyTorch ニューロン. デフォルトでは、PyTorch Neuron はジャストインタイム コンパイルで動作します。このコンパイルでは、トレーニング ジョブ内のさまざまなニューラル ネットワーク計算グラフが、トレーニング プロセス中に遭遇したときにコンパイルされます。 より大きなモデルの場合、提供されている neuron_parallel_compile
トレーニング時のグラフのコンパイルを回避するために、さまざまな計算グラフを事前にプリコンパイルおよびキャッシュするツール。 EKS クラスターでトレーニング ジョブを起動する前に、チュートリアルでは、TorchX を使用してプリコンパイル ジョブを起動する方法を示します neuron_parallel_compile
道具。 事前コンパイル ジョブが完了すると、Neuron コンパイラはすべてのニューラル ネットワーク計算グラフを識別してコンパイルし、後で実際の BERT 事前トレーニング ジョブで使用できるように共有ストレージ ボリュームにキャッシュします。
分散トレーニング ジョブを起動する
プリコンパイルが完了すると、TorchX を使用して、インスタンスあたり 64 ワーカーで、1.32 つの trn32xlarge インスタンスにわたって 32 ワーカーの分散トレーニング ジョブを起動します。 各 trn1.32xlarge インスタンスには 16 個の Trainium アクセラレータが含まれており、各アクセラレータは 2 個を提供するため、インスタンスごとに XNUMX 個のワーカーを使用します。 ニューロンコア. 各 NeuronCore は、一意としてアクセスできます。 PyTorch XLA デバイス トレーニング スクリプトで。 チュートリアルの TorchX 起動コマンドの例は、次のコードのようになります。
前述の TorchX コマンドのさまざまなコマンド ライン引数については、チュートリアルで詳しく説明されています。 ただし、トレーニング ジョブの構成では、次の引数が最も重要です。
- -cfg キュー=テスト – トレーニング ジョブに使用する Volcano キューを指定します
- -cfg イメージリポジトリ – TorchX コンテナ イメージに使用する ECR リポジトリを指定します
- –script_args – PyTorch トレーニング スクリプトに渡す必要がある引数を指定します
- –nnodes および –nproc_per_node – トレーニング ジョブに使用するインスタンスとインスタンスごとのワーカーの数
- -脚本 – トレーニング コンテナ内で起動する PyTorch トレーニング スクリプトの名前
- -画像 – Amazon ECR のトレーニング コンテナ イメージへのパス
- –bf16 – BF16 データ型を有効にするかどうか
トレーニング ジョブを監視する
トレーニング ジョブが開始された後、さまざまな方法でジョブを監視できます。 このチュートリアルでは、コマンド ラインで基本的なトレーニング スクリプト メトリックを監視する方法を示します。 kubectl
、TensorBoard でトレーニング スクリプトの進行状況を視覚的に監視する方法 (次のスクリーンショットを参照)、Trainium アクセラレータの使用状況を neuron-top
Neuron SDK のツール。
環境をクリーンアップまたは再利用する
トレーニング ジョブが完了すると、クラスターを再利用したり、追加のトレーニング ジョブ用に再構成したりできます。 たとえば、EKS ノード グループは、 eksctl
コマンドを使用して、追加の Trn1 インスタンスを必要とするトレーニング ジョブをサポートします。 同様に、提供されている Dockerfile と TorchX の起動コマンドは、追加のディープ ラーニング モデルと分散トレーニング トポロジをサポートするように簡単に変更できます。
クラスターが不要になった場合、チュートリアルには、EKS インフラストラクチャと関連リソースを削除するために必要なすべての手順も含まれています。
まとめ
この投稿では、Trn1 インスタンスと Amazon EKS が、ディープ ラーニング モデルの高性能で費用対効果が高く、非常にスケーラブルな分散型トレーニングのためのマネージド プラットフォームを提供する方法について説明しました。 また、Trn1 インスタンスを使用して Amazon EKS で実際のマルチインスタンス分散トレーニング ジョブを実行する方法を示す包括的なチュートリアルを共有し、ソリューションの主要なステップとコンポーネントのいくつかを強調しました。 このチュートリアルの内容は、他のモデルやワークロードに簡単に適応させることができ、AWS での深層学習モデルの分散トレーニングの基本的なソリューションを提供します。
Trainium を利用した Trn1 インスタンスの使用を開始する方法の詳細については、次を参照してください。 ニューロンのドキュメント.
著者について
スコットペリー AWS の Annapurna ML アクセラレータ チームのソリューション アーキテクトです。 カナダを拠点とし、AWS Inferentia と AWS Trainium を使用して、顧客が深層学習トレーニングと推論ワークロードをデプロイおよび最適化するのを支援しています。 彼の興味には、大規模言語モデル、深層強化学習、IoT、およびゲノミクスが含まれます。
ロレア・アリサバラガ は、英国の公共部門に所属するソリューション アーキテクトであり、Amazon SageMaker を使用して顧客が ML ソリューションを設計するのを支援しています。 また、ハードウェア アクセラレーションに特化した Technical Field Community の一員でもあり、AWS Inferentia および AWS Trainium ワークロードのテストとベンチマークを支援しています。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- Platoblockchain。 Web3メタバースインテリジェンス。 知識の増幅。 こちらからアクセスしてください。
- 情報源: https://aws.amazon.com/blogs/machine-learning/scaling-distributed-training-with-aws-trainium-and-amazon-eks/
- 1
- 100
- 11
- 2022
- 2023
- 7
- a
- できる
- 私たちについて
- 加速器
- 加速器
- アクセス
- アクセス
- 達成
- 越えて
- 積極的に
- NEW
- 進める
- 高度な
- 利点
- 整列した
- すべて
- 既に
- しかし
- Amazon
- Amazon EC2
- アマゾンセージメーカー
- および
- アナウンス
- 発表の
- お知らせ
- 適用された
- 適切な
- 建築
- 引数
- 側面
- 関連する
- アタッチ
- 属性
- 賃貸条件の詳細・契約費用のお見積り等について
- 利用できます
- AWS
- AWS CloudFormation
- AWSインフェレンティア
- 帯域幅
- ベース
- 基本
- なぜなら
- ベンチマーク
- 利点
- 10億
- ブルーム
- 広い
- ビルド
- キャッシュ
- 呼ばれます
- カナダ
- チップ
- 選択する
- 選ばれた
- クラウド
- クラスタ
- コード
- 集団
- 到来
- 近日公開
- コマンドと
- コミュニティ
- コンプリート
- 完成
- コンポーネント
- 包括的な
- 計算
- 交流
- からなる
- コンテナ
- コンテナ
- 含まれています
- コンテンツ
- コントロール
- 便利
- 基本
- コスト効率の良い
- 作ります
- 作成した
- 作成
- 創造
- CSI
- 現在
- Customers
- データ
- DDP
- 専用の
- 深いです
- 深い学習
- デフォルト
- 展開します
- 展開
- 記載された
- 設計
- 詳細
- 詳細な
- 進展
- デバイス
- Devices
- 直接に
- 発見
- 配布
- 分散トレーニング
- 配布する
- ダウンロード
- ドライバー
- 間に
- 各
- 前
- 早い
- 使いやすさ
- 簡単に
- どちら
- enable
- 端から端まで
- エンドポイント
- 確実に
- Enterprise
- さらに
- 例
- 興奮した
- 除外
- 存在
- 調査済み
- エキス
- ファブリック
- 親しみ
- フィールド
- File
- 名
- 柔軟性
- フォーカス
- フォロー中
- フレームワーク
- から
- フル
- 機能性
- ゲノミクス
- 取得する
- GitHubの
- 与えられた
- グラフ
- グラフ
- グループ
- ガイド
- ハンドル
- Hardware
- ハート
- 役立つ
- ことができます
- ハイ
- ハイパフォーマンス
- 強調表示された
- 非常に
- host
- 認定条件
- How To
- しかしながら
- HTML
- HTTPS
- 何百
- ID
- 特定され
- 画像
- 画像
- 暗黙の
- 重要
- in
- include
- 含まれました
- 含ま
- 増える
- ますます
- インフラ関連事業
- install
- インストール
- 統合
- 利益
- IOT
- IT
- ジョブ
- Jobs > Create New Job
- キー
- 種類
- 言語
- 大
- 大規模
- より大きい
- 遅く
- 起動する
- 打ち上げ
- 発射
- 層
- LEARN
- 学習
- ツェッペリン
- ライブラリ
- LINE
- linuxの
- 負荷
- より長いです
- 見て
- LOOKS
- 機械
- 機械学習
- メイン
- マネージド
- 管理
- 大規模
- メモリ
- メトリック
- ML
- モデル
- 修正されました
- モジュール
- モニター
- 監視対象
- モニタリング
- モニター
- ヶ月
- 他には?
- 最も
- の試合に
- 名
- 必要
- ネットワーク
- ネットワーキング
- ニューラルネットワーク
- 次の
- ノード
- 数
- 提供
- 提供すること
- 公式
- ONE
- 動作
- 業務執行統括
- 最適化
- 最適化
- 編成
- 注文
- その他
- 概説
- 輪郭
- 全体
- 概要
- パラメータ
- 部
- 渡された
- path
- ピア
- パフォーマンス
- 相
- 場所
- プラットフォーム
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- プラグイン
- プラグイン
- ポイント
- ポスト
- パワード
- 強力な
- 前提条件
- プロセス
- 進捗
- 提供します
- 提供
- は、大阪で
- 提供
- 公共
- 出版
- プッシュ
- パイトーチ
- すぐに
- ランダム
- 現実の世界
- リファレンス
- 地域
- 地域
- 関連する
- 削除します
- 倉庫
- 必要とする
- の提出が必要です
- 必要
- リソース
- レビュー
- ラン
- ランニング
- セージメーカー
- 同じ
- スケーラビリティ
- ド電源のデ
- 秤
- スケーリング
- SDDK
- セクター
- サービス
- サービス
- セッションに
- いくつかの
- shared
- シェル(Shell)
- すべき
- 示す
- 作品
- 重要
- 同様に
- サイズ
- より小さい
- So
- ソフトウェア
- 溶液
- ソリューション
- 一部
- 指定の
- スタック
- スタンドアロン
- 標準
- 開始
- スタートアップ
- 手順
- ステップ
- まだ
- ストレージ利用料
- 店舗
- そのような
- サポート
- サポート
- サポート
- 同期
- テーブル
- 取得
- チーム
- 技術的
- template
- 一時的
- テスト
- 英国
- アプリ環境に合わせて
- 数千
- 介して
- 全体
- 時間
- 〜へ
- ツール
- 豊富なツール群
- トレーニング
- true
- チュートリアル
- Uk
- ユニーク
- ユニバーサル
- つかいます
- ユーザー
- さまざまな
- バージョン
- 、
- ボリューム
- 方法
- ウィークス
- かどうか
- which
- while
- 意志
- 以内
- ワーカー
- 労働者
- でしょう
- ヤムル
- You
- あなたの
- ゼファーネット
- ゾーン