翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PyTorch トレーニングスクリプトを適応させる
モデル出力テンソルの収集を開始し、トレーニングの問題をデバッグするには、 PyTorch トレーニングスクリプトに次の変更を加えます。
PyTorch 1.12.0 の場合
PyTorch トレーニングスクリプトを持ち込む場合は、トレーニングスクリプトに追加のコード行を使用してトレーニングジョブを実行し、モデル出力テンソルを抽出できます。sagemaker-debugger
クライアントライブラリの「 フック API
-
フックを作成します。
(推奨) 内のトレーニングジョブの場合 SageMaker
import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)
DebuggerHookConfig、 TensorBoardConfig、または ルールのいずれかステップ 2: SageMaker Python を使用してトレーニングジョブを起動およびデバッグする SDKを指定して でトレーニングジョブを起動すると、 SageMaker は
get_hook
、関数によって取得される JSON 設定ファイルをトレーニングインスタンスに追加します。推定器に設定 API が含まれていない場合、フックで検索できる設定ファイルは存在せず、関数はNone
を返すことに注意してください。(オプション) 外部でのトレーニングジョブの場合 SageMaker
ローカルモードでトレーニングジョブを実行する場合は、ノートブックインスタンス、Amazon EC2 SageMaker インスタンス、または独自のローカルデバイス上で直接、
smd.Hook
クラスを使用してフックを作成します。ただし、このアプローチではテンソルコレクションのみを保存でき、 TensorBoard 視覚化に使用できます。 SageMaker デバッガーの組み込みルールは、 ルールがリモートインスタンスからの出力をリアルタイムで保存するために SageMaker ML トレーニングインスタンスと S3 を必要とするため、ローカルモードでは機能しません。この場合smd.get_hook
API はNone
を返します。ローカルモードでテンソルを保存する手動フックを作成する場合は、以下のコードスニペットとロジックを使用して
smd.get_hook
API がNone
を戻すかどうかを確認し、smd.Hook
クラスを使用して手動フックを作成します。ローカルマシンの任意の出力ディレクトリを指定できることに注意してください。import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True) if hook is None: hook=smd.Hook( out_dir='
/path/to/your/local/output/
', export_tensorboard=True ) -
フックのクラスメソッドでモデルをラップします。
この
hook.register_module()
メソッドはモデルを取得して各レイヤーを繰り返し処理し、ステップ 2: SageMaker Python を使用してトレーニングジョブを起動およびデバッグする SDK の設定で指定した正規表現と一致するテンソルを検索します。このフックメソッドで収集できるテンソルは、重み、バイアス、アクティベーション、グラデーション、入力、出力です。hook.register_module(model)
ヒント
大規模なディープラーニングモデルから出力テンソル全体を収集すると、それらのコレクションの合計サイズが指数関数的に大きくなり、ボトルネックの原因になる可能性があります。特定のテンソルを保存したい場合は、
hook.save_tensor()
メソッドを使用することもできます。このメソッドは、特定のテンソルの変数を選択し、必要な名前を付けたカスタムコレクションに保存するのに役立ちます。詳細については、この手順の「ステップ 7」を参照してください。 -
損失関数をフックのクラスメソッドでワープします。
hook.register_loss
メソッドは損失関数をラップします。ステップ 2: SageMaker Python を使用してトレーニングジョブを起動およびデバッグする SDK で設定するsave_interval
ごとに損失値を抽出し、"losses"
コレクションに保存します。hook.register_loss(loss_function)
-
トレインブロックに
hook.set_mode(ModeKeys.TRAIN)
を追加します。これは、テンソルコレクションがトレーニングフェーズ中に抽出されることを示しています。def train(): ... hook.set_mode(ModeKeys.TRAIN)
-
検証ブロックを
hook.set_mode(ModeKeys.EVAL)
に追加します。これは、テンソルコレクションがト検証フェーズ中に抽出されることを示しています。def validation(): ... hook.set_mode(ModeKeys.EVAL)
-
カスタムスカラーを保存するには
hook.save_scalar()
を使用します。モデルにないスカラー値を保存できます。例えば、評価中に計算された精度の値を記録したい場合は、精度を計算する行の下に次のコード行を追加します。 hook.save_scalar("accuracy", accuracy)
カスタムスカラーコレクションに名前を付けるには、最初の引数に文字列を指定する必要があります。これは、 のスカラー値を視覚化するために使用される名前であり TensorBoard、任意の文字列にすることができます。
-
カスタムテンソルを保存するには
hook.save_tensor()
を使用します。 hook.save_scalar()
と同様に、独自のテンソルコレクションを定義して、追加のテンソルを保存できます。例えば、モデルに渡された入力画像データを抽出し、カスタムテンソルとして保存するには、次のコード行 ( "images"
はカスタムテンソルの名前の例、image_inputs
は入力画像データの変数の例) を追加します。hook.save_tensor("images", image_inputs)
カスタムテンソルの名前を付けるには、最初の引数に文字列を指定する必要があることに注意してください。
hook.save_tensor()
には、カスタムテンソルを保存するテンソルコレクションを指定するための 3 番目の引数collections_to_write
があります。デフォルトはcollections_to_write="default"
です。3 番目の引数を明示的に指定しない場合、カスタムテンソルは"default"
テンソルコレクションに保存されます。
トレーニングスクリプトの調整が完了したら、ステップ 2: SageMaker Python を使用してトレーニングジョブを起動およびデバッグする SDK に進みます。