

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

# Amazon SageMaker Experiments によるパラメータとメトリクスの記録
<a name="train-remote-decorator-experiments"></a>

このガイドでは、Amazon SageMaker Experiments を使用してパラメータとメトリクスを記録する方法を説明します。SageMaker AI 実験は実行で構成され、実行はモデルトレーニングの 1 回のインタラクションのすべての入力、パラメータ、構成、結果で構成されます。

@remote デコレータまたは `RemoteExecutor` API を使用して、リモート関数からパラメータとメトリクスを記録できます。

リモート関数からパラメータとメトリクスを記録するには、以下の方法のいずれかを選択します。
+ SageMaker Experiments ライブラリから `Run` を使用して、リモート関数内で実行された SageMaker AI 実験をインスタンス化します。詳細については、「[Create an Amazon SageMaker AI Experiment](https://docs.aws.amazon.com/sagemaker/latest/dg/experiments-create.html)」を参照してください。
+ SageMaker AI Experiments ライブラリのリモート関数内で `load_run` 関数を使用します。これにより、リモート関数の外部で宣言された `Run` インスタンスがロードされます。

以下のセクションでは、前述の方法を使用して SageMaker AI 実験の実行を使用して系統を作成および追跡する方法を示します。また、SageMaker トレーニングではサポートされていないケースについても説明します。

## @remote デコレータを使用して SageMaker Experiments と統合する
<a name="train-remote-decorator-experiments-remote"></a>

SageMaker AI で実験をインスタンス化するか、またはリモート関数内部から現在の SageMaker AI 実験を読み込むことができます。以下のセクションでは、いずれかの方法を使用する方法を示します。

### SageMaker Experiments を使用して実験を作成する
<a name="train-remote-decorator-experiments-remote-create"></a>

SageMaker AI 実験で実行される実験を作成できます。これを行うには、実験名、実行名、その他のパラメータをリモート関数に渡します。

次のコードサンプルでは、実験の名前、実行の名前、各実行中に記録するパラメータをインポートします。パラメータ `param_1` および `param_2` は、トレーニングループ内で経時的に記録されます。一般的なパラメータには、バッチサイズやエポックなどが含まれています。この例では、実行のメトリクス `metric_a` および `metric_b` がトレーニングループ内で経時的に記録されます。その他の一般的なメトリクスには、`accuracy` または `loss` が含まれる場合があります。

```
from sagemaker.remote_function import remote
from sagemaker.experiments.run import Run

# Define your remote function
@remote
def train(value_1, value_2, exp_name, run_name):
    ...
    ...
    #Creates the experiment
    with Run(
        experiment_name=exp_name,
        run_name=run_name,
    ) as run:
        ...
        #Define values for the parameters to log
        run.log_parameter("param_1", value_1)
        run.log_parameter("param_2", value_2) 
        ...
        #Define metrics to log
        run.log_metric("metric_a", 0.5)
        run.log_metric("metric_b", 0.1)


# Invoke your remote function        
train(1.0, 2.0, "my-exp-name", "my-run-name")
```

### @remote デコレータによって開始されたジョブを使用して現在の SageMaker Experiments を読み込む
<a name="train-remote-decorator-experiments-remote-current"></a>

SageMaker Experiments ライブラリの `load_run()` 関数を使用して、実行コンテキストから現在の実行オブジェクトを読み込みます。`load_run()` 関数は、リモート関数内でも使用できます。次のコード例に示すように、実行オブジェクトの `with` ステートメントによってローカルで初期化された実行オブジェクトを読み込みます。

```
from sagemaker.experiments.run import Run, load_run

# Define your remote function
@remote
def train(value_1, value_2):
    ...
    ...
    with load_run() as run:
        run.log_metric("metric_a", value_1)
        run.log_metric("metric_b", value_2)


# Invoke your remote function
with Run(
    experiment_name="my-exp-name",
    run_name="my-run-name",
) as run:
    train(0.5, 1.0)
```

## `RemoteExecutor` API で開始されたジョブ内の現在の実験実行を読み込む
<a name="train-remote-decorator-experiments-api"></a>

ジョブが `RemoteExecutor` API で開始された場合も、現在の SageMaker AI 実験を読み込むことができます。次のコードサンプルは、SageMaker Experiments `load_run` 関数で `RemoteExecutor` API を使用する方法を示しています。これにより、現在の SageMaker AI 実験実行を読み込み、`RemoteExecutor` によって送信されたジョブのメトリクスをキャプチャできます。

```
from sagemaker.experiments.run import Run, load_run

def square(x):
    with load_run() as run:
        result = x * x
        run.log_metric("result", result)
    return result


with RemoteExecutor(
    max_parallel_job=2,
    instance_type="ml.m5.large"
) as e:
    with Run(
        experiment_name="my-exp-name",
        run_name="my-run-name",
    ):
        future_1 = e.submit(square, 2)
```

## @remote デコレータでコードに注釈を付ける際に SageMaker Experiments のサポートされていない使用法を実行する
<a name="train-remote-decorator-experiments-unsupported"></a>

SageMaker AI は、@remote 関数に `Run` 型オブジェクトを渡したり、グローバル `Run` オブジェクトを使用したりする操作をサポートしていません。以下の例は、`SerializationError` をスローするコードを示しています。

次のコードサンプルでは、`Run` 型オブジェクトを @remote デコレータに渡そうとするとエラーが生成されます。

```
@remote
def func(run: Run):
    run.log_metrics("metric_a", 1.0)
    
with Run(...) as run:
    func(run) ---> SerializationError caused by NotImplementedError
```

次のコード例では、リモート関数の外部でインスタンス化されたグローバル `run` オブジェクトを使用しようとしています。このコード例では、`train()` 関数は `with Run` コンテキスト内で定義され、内部からグローバル実行オブジェクトを参照します。`train()` が呼び出されると、エラーが生成されます。

```
with Run(...) as run:
    @remote
    def train(metric_1, value_1, metric_2, value_2):
        run.log_parameter(metric_1, value_1)
        run.log_parameter(metric_2, value_2)
    
    train("p1", 1.0, "p2", 0.5) ---> SerializationError caused by NotImplementedError
```