

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

# メトリクスと環境変数を定義する
<a name="automatic-model-tuning-define-metrics-variables"></a>

調整ジョブでは、メトリックスを使用してパフォーマンスを評価することで、起動するトレーニングジョブのハイパーパラメータを最適化します。このガイドでは、トレーニングにカスタムアルゴリズムを使用したり、Amazon SageMaker AI の組み込みアルゴリズムを使用したりできるようにメトリクスを定義する方法を説明します。また、自動モデル調整 (AMT) ジョブ中に環境変数を指定する方法についても説明します。

## メトリクスを定義する
<a name="automatic-model-tuning-define-metrics"></a>

Amazon SageMaker AI ハイパーパラメータ調整では、機械学習アルゴリズムの `stdout` ストリームと `stderr` ストリームを解析して、損失や検証精度などのメトリクスを検索します。メトリクスは、データセットに対するモデルのパフォーマンスを示します。

以下のセクションでは、組み込みアルゴリズムとカスタムアルゴリズムの 2 種類のアルゴリズムをトレーニングに使用する方法について説明します。

### 組み込みアルゴリズムをトレーニングに使用する
<a name="automatic-model-tuning-define-metrics-builtin"></a>

[SageMaker AI の組み込みアルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html)のいずれかを使用する場合、メトリクスはすでに定義されています。また、組み込みアルゴリズムは、自動的に最適化のハイパーパラメータ調整にメトリクスを送信します。これらのメトリクスは Amazon CloudWatch Logs にも書き込まれます。詳細については、「[Log Amazon SageMaker AI Events with Amazon CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/logging-cloudwatch.html)」を参照してください。

調整ジョブの目標メトリクスについては、組み込みアルゴリズムから出力されるメトリクスの 1 つを選択する必要があります。使用可能なメトリクスのリストについては、「[Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Model](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html)」で該当するアルゴリズムのモデル調整セクションを参照してください。

最大 40 個のメトリクスを選択して、[トレーニングジョブ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterAlgorithmSpecification.html)で監視できます。目標メトリクスとするメトリクスを 1 つ選択します。ハイパーパラメータ調整ジョブは、目標メトリクスに対して最もパフォーマンスの高い[トレーニングジョブ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeHyperParameterTuningJob.html#sagemaker-DescribeHyperParameterTuningJob-response-BestTrainingJob)を返します。

**注記**  
ハイパーパラメータ調整では、追加のハイパーパラメータ `_tuning_objective_metric` が自動的に送信され、トレーニング中に使用する目的メトリクスを調整ジョブに渡します。

### トレーニングにカスタムアルゴリズムを使用する
<a name="automatic-model-tuning-define-metrics-custom"></a>

このセクションでは、独自のメトリクスを定義して独自のカスタムアルゴリズムをトレーニングに使用する方法を説明します。その際、アルゴリズムによって少なくとも 1 つのメトリクスが `stderr` または `stdout` に書き込まれることを確認してください。ハイパーパラメータ調整は、これらのストリームを解析して、データセットに対するモデルのパフォーマンスを示すアルゴリズムメトリクスを見つけます。

カスタムメトリクスを定義するには、調整ジョブが監視する各メトリクスの名前と正規表現を指定します。次に、`AlgorithmSpecification` の `MetricDefinitions`のフィールドの `TrainingJobDefinition` パラメータで [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) API にこれらのメトリクス定義を渡します。

以下は、トレーニングアルゴリズムによって `stderr` または `stdout` に書き込まれたログからのサンプル出力を示しています。

```
GAN_loss=0.138318;  Scaled_reg=2.654134; disc:[-0.017371,0.102429] real 93.3% gen 0.0% disc-combined=0.000000; disc_train_loss=1.374587;  Loss = 16.020744;  Iteration 0 took 0.704s;  Elapsed=0s
```

次のコードサンプルは、Python (regex) で正規表現を使用する方法を示しています。これを使用してサンプルログ出力を検索し、4 つの異なるメトリクスの数値をキャプチャします。

```
[
    {
        "Name": "ganloss",
        "Regex": "GAN_loss=(.*?);",
    },
    {
        "Name": "disc-combined",
        "Regex": "disc-combined=(.*?);",
    },
    {
        "Name": "discloss",
        "Regex": "disc_train_loss=(.*?);",
    },
    {
        "Name": "loss",
        "Regex": "Loss = (.*?);",
    },
]
```

正規表現では、`()` (括弧) を使用して正規表現の各部分をグループ化します。
+ コードサンプルで定義されている `loss` メトリクスでは、式 `(.*?);` が正確なテキスト `"Loss="` と最初のセミコロン (`;`) 文字の間のすべての文字をキャプチャします。
+ 文字 `.` は、正規表現に任意の文字にマッチするように指示します。
+  文字 `*` は、0 回以上繰り返された文字にマッチすることを意味します。
+ 文字 `?` は、`;` 文字の最初のインスタンスまでの文字のみキャプチャすることを意味します。

コードサンプルで定義されている損失メトリクスでは、サンプル出力から `Loss = 16.020744` がキャプチャされます。

調整ジョブの目標メトリクスとして定義したメトリクスの 1 つを選択します。SageMaker API を使用している場合は、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) オペレーションに送信する `HyperParameterTuningJobConfig` パラメータの `HyperParameterTuningJobObjective` フィールドに `name` キーの値を指定します。

## 環境変数を指定する
<a name="automatic-model-tuning-define-variables"></a>

SageMaker AI AMT は調整ジョブ内のハイパーパラメータを最適化して、モデルのパフォーマンスに最適なパラメータを見つけます。環境変数を使用して、チューニングジョブの動作を変更するように設定できます。トレーニング中に使用した環境変数を調整ジョブ内で使用することもできます。

調整ジョブの環境変数を使用する場合、または新しい環境変数を指定する場合は、SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html) API 内に `Environment` の文字列値を入力します。このトレーニングジョブ定義を [CreateHyperParameterTuningJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) API に渡します。

たとえば、環境変数 `SM_LOG_LEVEL` を次の値に設定して、Python コンテナからの出力を調整できます。

```
NOTSET=0
DEBUG=10
INFO=20
WARN=30
ERROR=40
CRITICAL=50
```

例として、ログレベルを `10` に設定してコンテナログをデバッグするには、[HyperParameterTrainingJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html) 内で環境変数を次のように設定します。

```
{
   "[HyperParameterTuningJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html#sagemaker-CreateHyperParameterTuningJob-request-HyperParameterTuningJobConfig)": { 
   ...,
   }
   "[TrainingJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html#sagemaker-CreateHyperParameterTuningJob-request-TrainingJobDefinition)": { 
      ...,
      "Environment" : [
          {
            "SM_LOG_LEVEL": 10 
          }
      ],
      ...,
   },
   ...,        
}
```