翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 xml.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 なし)。