SageMaker Training Compiler のベストプラクティスと考慮事項 - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SageMaker Training Compiler のベストプラクティスと考慮事項

重要

Amazon Web Services (AWS) は、 SageMaker Training Compiler の新しいリリースやバージョンがないことを発表しました。Training Compiler は、既存の SageMaker AWS トレーニング用 Deep Learning Containers (DLCs) を通じて引き続き利用できます SageMaker 。既存の DLCsは引き続きアクセス可能ですが、 AWS Deep Learning Containers Framework サポートポリシー に従って AWS、 からパッチや更新プログラムを受け取らなくなることに注意してください。

SageMaker Training Compiler を使用する際は、以下のベストプラクティスと考慮事項を確認してください。

ベストプラクティス

SageMaker Training Compiler でトレーニングジョブを実行するときに最良の結果を得るには、次のガイドラインを使用します。

一般的なベストプラクティス
  • サポートされるインスタンスタイプテスト済みモデル のいずれかを使用していることを確認します。

  • トレーニングスクリプトで Hugging Face Transformers ライブラリを使用してNLPモデルのトークナイザを作成するときは、 を指定して静的入力テンソルシェイプを使用していることを確認してくださいpadding='max_length'。バッチ内の最長シーケンスにパディングすると、各トレーニングバッチのテンソル形状が変化する可能性があるため、padding='longest' は使用しないでください。動的入力形状はモデルの再コンパイルを開始し、合計トレーニング時間が長くなる可能性があります。Transformer トークナイザのパディングオプションの詳細については、Hugging Face Transformers ドキュメントの「Padding and truncation」を参照してください。

  • GPU メモリ使用率を測定して、GPUメモリに収まる最大バッチサイズを使用していることを確認します。Amazon SageMaker Training Compiler は、トレーニング中のモデルのメモリフットプリントを削減します。通常、より大きな をGPUメモリbatch_sizeに収めることができます。これを大きくするとbatch_size、GPU使用率が向上し、合計トレーニング時間が短縮されます。

    バッチサイズを調整する場合、learning_rate も適切に調整する必要があります。例えば、バッチサイズを k 倍に増やした場合は、learning_rate を直線的に (単純に k の乗算)、もしくは k の平方根を乗算して調整する必要があります。これは、トレーニング時間を短縮しながら、同じか同様の収束動作を実現するためです。人気モデルでテスト済みの batch_size のリファレンスについては、「テスト済みモデル」を参照してください。

  • コンパイラで高速化されたトレーニングジョブをデバッグするには、compiler_config パラメータ の debug フラグを有効化します。これにより、 SageMaker はデバッグログを SageMaker トレーニングジョブログに入れることができます。

    huggingface_estimator=HuggingFace( ... compiler_config=TrainingCompilerConfig(debug=True) )

    コンパイラでトレーニングジョブの完全なデバッグを有効化すると、オーバーヘッドが増す可能性があることに注意してください。

のベストプラクティス PyTorch
  • PyTorch モデルを持ち込んでチェックポイントする場合は、 PyTorch/ XLAのモデル保存関数を使用してモデルを適切にチェックポイントしてください。関数の詳細については、「 on Devices ドキュメントtorch_xla.core.xla_model.save」の「」を参照してください。 PyTorch XLA

    PyTorch スクリプトに変更を追加する方法については、「」を参照してください PyTorch 直接使用する大規模言語モデル (Hugging Face ストランスフォーマートレーナー API なし)

    モデル保存関数を使用する実際のアプリケーションの詳細については、「/ の Hugging Face でのチェックポイントの書き込みとロードTPUs: より高速で安価なトレーニングブログ PyTorchXLA」を参照してください。

  • 分散トレーニングで最適なトレーニング時間を達成するには、以下を考慮します。

    • シングル GPU インスタンスGPUsを使用する代わりに、複数の を持つインスタンスを使用します。例えば、単一の ml.p3dn.24xlarge インスタンスは 8 x ml.p3.2xlarge インスタンスと比較してトレーニング時間が短縮されます。

    • ml.p3dn.24xlarge や などのEFAサポートがあるインスタンスを使用しますml.p4d.24xlarge。これらのインスタンスタイプでは、ネットワーク速度が加速され、トレーニング時間が短縮されます。

    • データセットの preprocessing_num_workers パラメータを調整して、前処理が遅いためにモデルトレーニングが遅れることがないようにします。

考慮事項

SageMaker Training Compiler を使用する場合は、次の点を考慮してください。

ログ記録、チェックポイント、プロファイリングによるパフォーマンスの低下

  • 明示的な評価につながるモデルテンソルのログ記録、チェックポイント、プロファイリングは避けます。明示的な評価とは何かを理解するために、次のコードコンパイル例を考慮します。

    a = b+c e = a+d

    コンパイラはコードを次のように解釈し、変数 a のメモリフットプリントを削減します。

    e = b+c+d

    次に、コードを変更して変数 a の print 関数を追加した例を考慮します。

    a = b+c e = a+d print(a)

    コンパイラは、変数 a を次のように明示的に評価します。

    e = b+c+d a = b+c # Explicit evaluation print(a)

    例えば PyTorch、 では、明示的な評価を導入する可能性のある torch.tensor.items() を使用しないでください。深層学習では、このような明示的な評価によってモデルのコンパイルグラフ内の融合オペレーションが中断され、テンソルの再計算につながるため、オーバーヘッドが発生する可能性があります。

    SageMaker Training Compiler の使用中にトレーニング中にモデルを定期的に評価する場合は、明示的な評価によるオーバーヘッドを減らすために、ログ記録とチェックポイント記録の頻度を低くすることをお勧めします。例えば、エポックごとではなく 10 エポックごとにログを記録します。

  • グラフのコンパイルはトレーニングの最初の数ステップで実行されます。そのため、最初の数ステップは非常に時間がかかると予想されます。ただし、これは 1 回限りのコンパイルコストであり、コンパイルによって今後のステップがはるかに速くなるため、より長い期間トレーニングすることで償却できます。初期コンパイルのオーバーヘッドは、モデルのサイズ、入力テンソルのサイズ、入力テンソルの形状の分布によって異なります。

PyTorch を直接APIs使用する場合の PyTorch/XLA の誤った使用

PyTorch/XLA は、既存の PyTorchトレーニング の一部を置き換えAPIsる のセットを定義しますAPIs。正しく使用しないと、 PyTorch トレーニングは失敗します。

  • PyTorch モデルをコンパイルする際の最も一般的なエラーの 1 つは、演算子とテンソルのデバイスタイプが間違っていることです。 PyTorch モデルを適切にコンパイルするには、デバイスやXLAデバイスを操作CUDAせずにCUDA、デバイス (xm.xla_device()) を使用してくださいXLA。

  • mark_step() は だけの障壁ですXLA。正しく設定しないと、トレーニングジョブが停止します。

  • PyTorch/XLA は、追加の分散トレーニング を提供しますAPIs。APIs を適切にプログラムしないと、勾配が誤って収集され、トレーニングの収束が失敗します。

PyTorch スクリプトを適切にセットアップし、前述の誤ったAPI使用を回避するには、「」を参照してください PyTorch 直接使用する大規模言語モデル (Hugging Face ストランスフォーマートレーナー API なし)