ここ数年、自然言語処理 (NLP) の分野で急速な発展が見られました。 NVIDIA や Amazon の最新世代のアクセラレータなどによりハードウェアは改善されていますが、高度な機械学習 (ML) 実践者は依然として、複数の GPU にわたって大規模な言語モデルをスケーリングする際に問題に遭遇することがよくあります。
このブログ投稿では、主に Hugging Face と Amazon SageMaker のモジュラー バックエンドによって提供される抽象化を通じて、大規模および小規模の NLP モデルの台頭について簡単に要約します。特に、顧客向けに 175 億パラメータの NLP モデルの事前トレーニングと微調整を可能にする、SageMaker モデル並列ライブラリ内の XNUMX つの追加機能のリリースを強調します。
このライブラリを SageMaker トレーニング プラットフォームで使用し、32 ml.p120d.4xlarge インスタンスと 24 億のパラメーターで 175 秒あたり 240 サンプルのスループットを達成しました。これを 25 インスタンスまで増やした場合、完全なモデルのトレーニングには XNUMX 日かかると予想されます。
モデルの並列処理の詳細については、論文を参照してください。 Amazon SageMaker モデル並列処理: 大規模モデルトレーニングのための汎用的で柔軟なフレームワーク.
これらのパフォーマンス数値を生成するために使用した GPT2 ノートブックも、 GitHubリポジトリ.
SageMaker モデル内の新機能を並行して使用する方法の詳細については、以下を参照してください。 PyTorch 用 SageMaker モデル並列ライブラリの拡張機能, SageMaker Python SDK と一緒に使用する.
Amazon SageMaker の NLP – ハグフェイスとモデルの並列処理
Hugging Face と NLP を初めて使用する場合、知っておくべき最大のハイライトは、自然言語処理 (NLP) を使用するアプリケーションが人間レベルのパフォーマンスを達成し始めているということです。これは主に、と呼ばれる学習メカニズムによって推進されます。 注意、と呼ばれる深層学習モデルが誕生しました。 トランス、これは以前のディープラーニング逐次メソッドよりもはるかにスケーラブルです。今では有名になった BERTモデル はトランスフォーマーを活用するために開発され、その過程でいくつかの有用な NLP 戦術が開発されました。 NLP 内外のトランスフォーマーと一連のモデルはすべて BERT からインスピレーションを受けており、 Google 検索結果の背後にある主要なエンジンです、あなたの Google翻訳の結果, 多くの新しいスタートアップ.
SageMaker と Hugging Face は、顧客にとってこれをこれまで以上に簡単にするために提携しました。 Hugging Face のディープ ラーニング コンテナ (DLC) をリリースしました。これにより、事前トレーニングされたモデルを Hugging Face から直接トレーニングおよびホストできるようになります。 26,000 を超えるモデルのリポジトリ。 ローンチしました SageMaker トレーニング コンパイラー Hugging Face トレーニング ループの実行時間を最大 50% 高速化します。も統合しました ハグフェイスのフラッグシップトランスフォーマーSDK 分散トレーニング ライブラリ NLP モデルのスケールアウトがこれまでより簡単になります。
Amazon SageMaker の Hugging Face Transformer モデルの詳細については、を参照してください。 ハグフェイストランスフォーマーモデルのサポート。
SageMaker モデル並列ライブラリを使用した大規模 NLP モデル トレーニングのための新機能
AWS re:Invent 2020 で、SageMaker は、次のようなコンピューター ビジョン モデルをトレーニングするためにクラウド上で最高のパフォーマンスを提供する分散ライブラリを発表しました。 マスク-RCNN および次のような NLP モデル T5-3B。 これは、AWS 上の NCCL よりも 20 ~ 40% 高速な強化された通信プリミティブと、非常に大規模な言語モデルを数十、数百、数千の GPU にわたって拡張できるモデル分散技術によって可能になります。
SageMaker モデル並列ライブラリ (SMP) を使用すると、Hugging Face などを通じて PyTorch で事前定義された NLP モデルを取得し、そのモデルをクラスター内の複数の GPU に分割することができます。言い換えれば、SMP はモデルをより小さなチャンクに分割するので、メモリ不足 (OOM) エラーが発生することはありません。大規模モデルにとって重要なメモリ節約テクニックを追加できることをうれしく思います。
- テンソル並列処理
- オプティマイザー状態のシャーディング
- アクティベーションチェックポイント
- アクティベーションオフロード
これら XNUMX つの機能を組み合わせて、メモリをより効率的に利用し、次世代の非常に大規模な NLP モデルをトレーニングすることができます。
分散トレーニングとテンソル並列処理
テンソル並列処理を理解するには、さまざまな種類の分散トレーニング、つまり並列処理があることを知っておくと役立ちます。. おそらく最も一般的なタイプについてはすでにご存知かと思いますが、 データの並列性。 データ並列処理の中核は次のように機能します。SageMaker エスティメーター内の ml.EC2 インスタンスを XNUMX つから XNUMX つにするなど、クラスターに追加のノードを追加します。次に、Horovod、PyTorch Distributed Data Parallel、SageMaker Distributed などのデータ並列フレームワークを使用します。これにより、モデルのレプリカがアクセラレータごとに XNUMX つ作成され、各ノードへのデータのシャーディングアウトが処理されるとともに、ニューラル ネットワークの逆伝播ステップですべての結果がまとめられます。分散勾配降下法を考えてみましょう。データの並列処理はサーバー内でも一般的です。すべてのノード上のすべての GPU、場合によっては CPU にデータをシャーディングします。次の図は、データの並列処理を示しています。
モデルの並列処理 は少し異なります。同じモデルのコピーを作成する代わりに、モデルをいくつかの部分に分割します。その後、私たちがその実行を管理します。そのため、データは数学的にはまったく同じ方法でニューラル ネットワークを通過し続けますが、モデルの異なる部分は異なる GPU に配置されます。 ml.p3.8xlarge を使用している場合は、NVIDIA V100 が 4 つあるため、モデルを GPU ごとに 4 つずつ、24 つの部分にシャーディングするとよいでしょう。 ml.p16d.100xlarge を 16 つまでジャンプすると、クラスター内の AXNUMX は合計 XNUMX 個になるため、モデルを XNUMX 個の部分に分割する可能性があります。こう呼ばれることもあります パイプラインの並列処理。 これは、ネットワーク内の一連のレイヤーが GPU 間で分割されており、GPU 使用率を最大化するためにパイプライン方式で実行されるためです。次の図は、モデルの並列性を示しています。
モデルの並列処理を大規模に実現するには、XNUMX 番目のタイプの分散が必要です。 テンソル並列処理。テンソル並列処理では、同じ概念をさらに一歩進めて適用します。ニューラル ネットワークの最大の層を分割し、層自体の一部を異なるデバイスに配置します。これは、175 億以上のパラメーターを操作し、そのトランスフォーマーをトレーニングするために、モデルの一部とともにわずかなレコードでも RAM に格納しようとする場合に関係します。次の図は、テンソル並列処理を示しています。
有効にする テンソル並列処理、smp オプション内で設定します あなたは見積もり担当者に渡します。
上記のコードでは、 pipeline_parallel_degree
では、上で説明したパイプラインの並列性に基づいて、モデルをいくつのセグメントにシャードする必要があるかを説明します。これを別の言葉で表すと、 パーティション.
テンソル並列処理を有効にするには、次のように設定します。 tensor_parallel_degree
希望のレベルまで。必ずインスタンスごとの GPU の数以下の数値を選択してください。つまり、ml.p8d.4xlarge マシンの場合は 24 を超えないようにしてください。追加のスクリプト変更については、以下を参照してください。 Tensor 並列処理を使用した SageMaker 分散モデル並列トレーニング ジョブの実行.
ddp パラメータは分散データ並列を指します。データ並列処理またはテンソル並列処理を使用している場合は、モデル並列処理ライブラリがこれらの機能で DDP に依存しているため、通常これを有効にします。
オプティマイザーの状態シャーディング、アクティベーションオフロード、チェックポイント
非常に大規模なモデルがある場合は、非常に大規模なオプティマイザー状態も必要になります。 SMP 用にオプティマイザーを準備するのは簡単です。スクリプト内でディスクからオプティマイザーを取得して、 smp.DistributedOptimizer()
オブジェクト。
設定により、推定器でこれを有効にしてください。 shard_optimizer_state
で True に smp_options
SMP の設定に使用します。
テンソルおよびパイプライン並列処理と同様に、SMP はモデルとワールド サイズ (すべてのトレーニング ノードの GPU の合計数) をプロファイリングして、最適な配置戦略を見つけます。
深層学習では、中間層の出力はアクティベーションとも呼ばれ、これらは前方パス中に保存する必要があります。これは、バックワード パスでの勾配の計算に使用する必要があるためです。大規模なモデルでは、これらすべてのアクティベーションを同時にメモリに保存すると、重大なメモリ ボトルネックが発生する可能性があります。このボトルネックに対処するには、次を使用できます。 アクティベーションチェックポイント、SageMaker モデル並列処理ライブラリの XNUMX 番目の新機能です。アクティベーションチェックポイント設定、または 勾配チェックポイント設定は、特定のレイヤーのアクティベーションをクリアし、バックワード パス中に再計算することでメモリ使用量を削減する手法です。これにより、余分な計算時間と引き換えにメモリ使用量が削減されます。
最後に、 アクティベーションオフロード アクティブ化チェックポイントを直接使用します。これは、モデルのトレーニング中に GPU RAM 上に少数のテンソル アクティベーションのみを保持する戦略です。具体的には、フォワード パス中にチェックポイントされたアクティベーションを CPU メモリに移動し、特定のマイクロバッチのバックワード パスのためにそれらを GPU にロードして戻します。
マイクロバッチと配置戦略
マイクロバッチや配置戦略など、顧客の混乱を引き起こすことがあるその他のトピックもあります。これらは両方とも、SageMaker モデル並列ライブラリに指定できるハイパーパラメーターです。特に、マイクロバッチは、サイズが少なくとも 30 億以上のパラメーターなど、パイプラインの並列処理に依存するモデルを実装する場合に関連します。
マイクロバッチはミニバッチのサブセットです。モデルがトレーニング ループに入っているとき、特定の数のレコードを取得してレイヤー間を前後に渡すように定義します。これは、「レコード」と呼ばれます。 ミニバッチ、または場合によっては、 バッチ。データセットを通過する完全なパスは、 時代。パイプライン並列処理で前方パスと後方パスを実行するために、SageMaker モデル並列ライブラリはバッチをマイクロバッチと呼ばれる小さなサブセットに分割し、GPU 使用率を最大化するために一度に 2 つずつ実行されます。結果として得られる、GPU ごとのはるかに小さいサンプルのセットは、マイクロバッチと呼ばれます。 GPT-XNUMX の例では、 デフォルトの 1 マイクロバッチをトレーニング スクリプトに直接追加しました。.
トレーニング構成をスケールアップすると、 それに応じてバッチ サイズとマイクロバッチ サイズを変更することを強くお勧めします。。これが良好なパフォーマンスを保証する唯一の方法です。パイプラインの並列処理に依存する場合は、全体のワールド サイズの関数としてバッチ サイズとマイクロバッチ サイズを考慮する必要があります。
配置戦略は、モデル パーティションを配置する場所を SageMaker に物理的に指示する方法です。モデル並列とデータ並列の両方を使用している場合、設定 placement_strategy
〜へ “cluster”
モデルのレプリカを物理的に互いに近いデバイス ID (GPU) に配置します。ただし、並列処理戦略をより規範的にしたい場合は、XNUMX 文字のさまざまな組み合わせを使用して単一の文字列に分割できます。D はデータ並列処理を表し、D はデータ並列処理を表します。 P
パイプラインの並列性を示します。 T
テンソル並列処理の場合。通常、デフォルトの配置を維持することをお勧めします。 "cluster"
これは大規模なモデルのトレーニングに最も適しているためです。 「クラスター」の配置は「」に対応します。DPT
"
配置戦略の詳細については、を参照してください。 Tensor 並列処理を使用した配置戦略.
ユースケースの例
トレーニング ジョブに 3.16 つの ml.pXNUMXxlarge があると想像してみましょう。それはあなたに与えます ノードあたり 8 台の NVIDIA V100。追加のインスタンスを追加するたびに、追加の帯域幅オーバーヘッドが発生するため、単一ノード上により多くの GP'U を配置する方が常に良いことを覚えておいてください。この場合、たとえば 3.16 つの ml.p3.8xlarge よりも XNUMX つの ml.pXNUMXxlarge を使用する方が良いでしょう。 GPU の数が同じであっても、追加のノードによる帯域幅のオーバーヘッドによりスループットが低下します。
次の図は、XNUMX 方向のモデル並列処理と XNUMX 方向のデータ並列処理を組み合わせたものを示しています。これは、実際にはモデルのレプリカが XNUMX つあり (データ並列と考えてください)、それぞれが XNUMX つの GPU に分割されている (モデル並列) ことを意味します。
これらのモデル パーティションのいずれかが大きすぎて XNUMX つの GPU に収まらない場合は、追加のタイプの分散 (テンソル並列処理) を追加して、それを分割して両方のデバイスを利用できます。
まとめ
このブログ投稿では、特にモデルの並列処理に焦点を当てて、SageMaker 分散トレーニング ライブラリについて説明しました。最新のテストのパフォーマンス ベンチマークを共有し、Amazon SageMaker 上の 32 ml.p120d.4xlarge インスタンスと 24B パラメータにわたって 175 秒あたり 240 サンプルを達成しました。これを 4 の p175 インスタンスに増やせば、25B のパラメーター モデルを XNUMX 日でトレーニングできると予想されます。
また、大規模なトレーニングを可能にする最新の機能、つまりテンソル並列処理、オプティマイザー状態シャーディング、アクティベーション チェックポイント、アクティベーション オフロードについても説明しました。 Amazon SageMaker でのトレーニングを通じてこれを可能にするためのヒントとコツをいくつか共有しました。
自分で試してみてください 数値を生成したのと同じノートブックを使用します。このノートブックは GitHub から入手できます。。また、次の方法で AWS アカウントにさらに GPU をリクエストすることもできます。 ここからサービス制限の承認をリクエストしてください.
著者について
エミリー・ウェバー SageMakerがリリースされた直後にAWSに参加し、それ以来、世界中にそのことを伝えようとしています。 エミリーは、顧客のために新しいML体験を構築する以外に、チベット仏教の瞑想と勉強を楽しんでいます。
アディティア・ビンダル AWSディープラーニングのシニアプロダクトマネージャーです。 彼は、顧客がAWSでディープラーニングモデルを簡単にトレーニングできるようにする製品に取り組んでいます。 余暇には、娘と過ごしたり、テニスをしたり、歴史小説を読んだり、旅行したりしています。
ルイ・キンテラ AWS SageMaker モデル並列ライブラリのソフトウェア開発者マネージャーです。暇なときは、サンフランシスコのベイエリアでハーレーに乗っている姿が見られます。
- "
- 000
- 100
- 2020
- 39
- 私たちについて
- 加速器
- 達成
- 越えて
- NEW
- 住所
- 高度な
- すべて
- 既に
- Amazon
- 別の
- AREA
- 利用できます
- AWS
- ベイ
- BEST
- 最大の
- 10億
- ブログ
- 建物
- 原因となる
- 変化する
- クラウド
- コード
- 組み合わせ
- コマンドと
- コミュニケーション
- 混乱
- コンテナ
- 基本
- 可能性
- Customers
- データ
- 発展した
- Developer
- 開発
- デバイス
- Devices
- 異なります
- 配布
- ディストリビューション
- ダウン
- ドリブン
- 有効にする
- 特に
- 例
- 体験
- エクスペリエンス
- 極端な
- 顔
- 速いです
- 特徴
- 特徴
- フィクション
- フィット
- フォロー中
- フォワード
- 発見
- フレームワーク
- フル
- function
- 生成する
- GitHubの
- 行く
- 良い
- でログイン
- グーグル検索
- GPU
- Hardware
- 役立つ
- 特徴
- 歴史的
- 認定条件
- How To
- HTTPS
- 何百
- 増加した
- 情報
- インスピレーションある
- 統合された
- 問題
- IT
- ジョブ
- 参加した
- ジャンプ
- 保管
- 言語
- 大
- 最新の
- 起動する
- LEARN
- 学習
- レベル
- 図書館
- 負荷
- 機械
- 機械学習
- マシン
- 作成
- マネージャー
- メモリ
- ML
- モデル
- モジュラー
- 最も
- すなわち
- ナチュラル
- ネットワーク
- 新しい特徴
- ノード
- ノート
- 番号
- その他
- 紙素材
- 提携
- パフォーマンス
- ピース
- プラットフォーム
- 人気
- 可能
- 主要な
- プロダクト
- 製品
- 対応プロファイル
- 提供します
- RAM
- RE
- リーディング
- 推奨する
- 記録
- 減らします
- 結果
- ラン
- ランニング
- 前記
- ド電源のデ
- 規模
- スケーリング
- SDDK
- を検索
- サービス
- セッションに
- 設定
- シャーディング
- shared
- 重要
- サイズ
- So
- ソフトウェア
- 特に
- スピード
- 支出
- split
- 都道府県
- 作戦
- 戦略
- 供給
- 戦術
- テクニック
- test
- 世界
- 数千
- 介して
- 時間
- ヒント
- ヒントとトリック
- 一緒に
- トピック
- トレード
- トレーニング
- わかる
- つかいます
- 活用する
- ビジョン
- 以内
- ワーキング
- 作品
- 世界
- 年