Amazon SageMaker
開発者ガイド

機械学習実験の管理

機械学習モデルの開発には、通常、さまざまなデータセット、アルゴリズム、ハイパーパラメータ値を使用した広範な実験が必要です。数千に及ぶ機械学習モデルの実験を管理するには、 Amazon SageMaker のモデル追跡機能を使用します。

モデル追跡を使用すると、以下のことができます。

  • プロパティ、ハイパーパラメータ、パフォーマンスメトリクス、その他のメタデータを使用してトレーニングジョブを整理、検索、評価する

  • トレーニングジョブやモデルのメトリクス (トレーニングの損失や検証の正確さなど) を確認して、最良のパフォーマンスモデルを見つける

  • トレーニングジョブやその関連リソース (トレーニングデータセットなど) までのモデルの系統を追跡する

Amazon SageMaker コンソールまたは API を使用して、トレーニングジョブとモデルを整理、検索、評価できます。

ML 実験を管理するためのサンプルノートブック

Amazon SageMaker モデル追跡機能を使用して ML 実験を管理するサンプルノートブックについては、「Amazon SageMaker モデル追跡機能を使用した ML エクスペリエンスの管理」を参照してください。

Amazon SageMaker でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法については、ノートブックインスタンスの使用を参照してください。ノートブックインスタンスを作成して開いた後、[SageMaker Examples (SageMaker サンプル)] タブを選択して、すべての Amazon SageMaker サンプルのリストを表示します。ML 実験を管理するノートブックは、[高度な機能] セクションにあります。ノートブックを開くには、その [Use (使用)] タブを選択し、[Create copy (コピーを作成)] を選択します。ご質問がある場合は、 Amazon Machine Learning 開発者フォーラムに投稿してください。

トピック

    トレーニングジョブを整理、検索、評価する (コンソール)

    トレーニングジョブを整理するには、それらにタグを適用します。

    特定のトレーニングジョブ、モデル、またはリソースを見つけるには、モデル追跡を使用して、検索可能なアイテムに割り当てられたキーワードを検索します。検索可能なアイテムには、トレーニングジョブ、モデル、ハイパーパラメータ、メタデータ、タグ、および URL が含まれます。追跡結果を絞り込むには、複数の条件を使用して検索します。

    デプロイに最適なモデルを選択するには、1 つ以上のメトリクスについてすべてのモデルのパフォーマンスを評価します。モデル追跡の結果を使用して、実験でモデルのパフォーマンスを一覧表示、ソート、および評価することができます。

    タグを使用してトレーニングジョブを追跡する (コンソール)

    トレーニングジョブをグループ化するには、わかりやすいキーと値でタグを作成します。たとえば、プロジェクト、所有者、顧客、および業界のタグキーを作成します。

    トレーニングジョブにタグを追加する (コンソール)

    1. Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker) を開きます。

    2. ナビゲーションペインで、[トレーニングジョブ]、[トレーニングジョブの作成] の順に選択します。

    3. ページの下部までスクロールし、タグのキーと値を入力します。

    4. 別のタグを追加するには、[タグの追加] を選択し、別のキーと値のペアを追加します。

    5. トレーニングモデルにタグを追加すると、タグを使用してモデルを検索できます。ナビゲーションペインで、[Search (検索)] を選択します。

    6. [プロパティ] に、タグのキーと値を入力します。

    検索結果では、キーは列名で、値は行のエントリです。

    トレーニングジョブの検索 (コンソール)

    トレーニングジョブを検索するには (コンソール)

    1. Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker) を開きます。

    2. ナビゲーションペインで、[Search (検索)] を選択します。

    3. [リソースタイプ] で、[トレーニングジョブ] を選択します。

    4. パラメータを追加するには、[パラメータ] について、以下を指定します。

      1. 検索ボックスにパラメータを入力し、パラメータタイプ (TrainingJobName など) を選択します。

      2. 使用する条件演算を選択します。数値については、is equals tolesser thanor greater than などの演算子を使用します。テキストベースの値については、equals tocontains などの演算子を使用します。

      3. パラメータの値を入力します。

    5. (オプション) 検索を絞り込むには、検索条件を追加します。[パラメータの追加] を選択し、パラメータ値を入力します。

    6. [検索] を選択します。

    モデルの評価 (コンソール)

    モデルのパフォーマンスを評価するには、そのメタデータ、ハイパーパラメータ、メトリクスを確認します。メトリクスをハイライトするには、表示を調整して、メトリクスと重要なハイパーパラメータのみを表示します。

    モデルを評価するには

    1. Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker) を開きます。

    2. ナビゲーションペインで、[検索] を選択し、該当するパラメータを指定してトレーニングジョブを検索します。結果がテーブルに表示されます。

    3. 検索結果テーブルの設定アイコンを選択して、設定ウィンドウを開きます。

    4. ハイパーパラメータまたはメトリクスの表示/非表示を切り替えるには、[ハイパーパラメータ] または [メトリクス] を選択してオン/オフにします。

    5. 必要な変更を行い、[Update view (表示の更新)] を選択します。

    6. メトリクスと重要なハイパーパラメータが表示されると、結果を比較し、違いを示すことができます。さらに、ホストする最適なモデルを選択したり、パフォーマンスが低いモデルを調査したりすることができます。

    トレーニングジョブの検索と評価 (API)

    トレーニングジョブを検索および評価したり、実験で使用された検索可能な候補やアイテムを取得したりするには、Search API を使用できます。

    トレーニングジョブの検索 (API)

    トレーニングジョブを検索するには、search_params パラメータを使用して検索パラメータを作成します。次に、AWS SDK for Python (Boto3) の smclient サブプロセスで検索関数を使用します。

    次の例は、Search API を使用してトレーニングジョブを検索する方法を示しています。

    import boto3 search_params={ "MaxResults": 10, "Resource": "TrainingJob", "SearchExpression": { "Filters": [{ "Name": "Tags.Project", "Operator": "Equals", "Value": "Project_Binary_Classifier" }]}, "SortBy": "Metrics.train:binary_classification_accuracy", "SortOrder": "Descending" } smclient = boto3.client(service_name='sagemaker') results = smclient.search(**search_params)

    モデルの評価 (API)

    モデルを評価するには、「トレーニングジョブの検索」の説明に従って検索を実行し、モデルのメトリクスを確認します。次に、AWS SDK for Python (Boto3) を使用してテーブルを作成してプロットします。

    次の例は、モデルを評価して、その結果をテーブルに表示する方法を示しています。

    import pandas headers=["Training Job Name", "Training Job Status", "Batch Size", "Binary Classification Accuracy"] rows=[] for result in results['Results']: trainingJob = result['TrainingJob'] metrics = trainingJob['FinalMetricDataList'] rows.append([trainingJob['TrainingJobName'], trainingJob['TrainingJobStatus'], trainingJob['HyperParameters']['mini_batch_size'], metrics[[x['MetricName'] for x in metrics].index('train:binary_classification_accuracy')]['Value'] ]) df = pandas.DataFrame(data=rows,columns=headers) from IPython.display import display, HTMLdisplay(HTML(df.to_html()))

    検索候補の取得 (API)

    検索候補を取得するには、GetSearchSuggestions API を使用します。

    次に示す AWS SDK for Python (Boto3) の例は、「linear」を含むアイテムに対する get_search_suggestions リクエストを示しています。

    search_suggestion_params={ "Resource": "TrainingJob", "SuggestionQuery": { "PropertyNameQuery": { "PropertyNameHint": "linear" } } }

    get_search_suggestions リクエストのレスポンスの例を次に示します。

    { 'PropertyNameSuggestions': [{'PropertyName': 'hyperparameters.linear_init_method'}, {'PropertyName': 'hyperparameters.linear_init_value'}, {'PropertyName': 'hyperparameters.linear_init_sigma'}, {'PropertyName': 'hyperparameters.linear_lr'}, {'PropertyName': 'hyperparameters.linear_wd'}] }

    検索候補を取得したら、プロパティ名のいずれかを検索で使用できます。

    トレーニングジョブで使用されたデータセットを確認する

    モデル追跡機能を使用して、トレーニングで使用されたデータセット、提示されたデータセットの使用場所、その他のトレーニングジョブに関する詳細を確認できます。たとえば、モデル追跡機能を使用して、監査のトレーニングジョブで特定のデータセットが使用されたことを確認したり、コンプライアンスを検証したりできます。

    特定のデータセットがトレーニングジョブで使用されたかどうかを確認するには、その Amazon S3 URL を検索します。Amazon SageMaker のモデル追跡機能は、指定したデータセットが使用されたトレーニングジョブを返します。検索結果が空の場合、データセットはトレーニングジョブで使用されていません。この空の結果は、提示されたデータセットが使用されていないことを確認する場合に役立ちます。

    モデル系統のトレース

    モデル追跡を使用して、トレーニングジョブの系統に関する情報と、それに関連するモデルリソース (使用されたデータセット、アルゴリズム、ハイパーパラメータ、メトリクスなど) をトレースできます。たとえば、ホストされたモデルのパフォーマンスが低下していることが判明した場合、そのトレーニングジョブと使用されたリソースを確認して、問題の原因を判断できます。Amazon SageMaker コンソールまたは API を使用して、系統をトレースできます。

    モデル系統のトレース (コンソール)

    モデルの系統をトレースするには (コンソール)

    1. Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker/) を開きます。

      .
    2. ナビゲーションペインで [エンドポイント] を選択し、該当するエンドポイントを選択します。

    3. [エンドポイント設定の指定] セクションまでスクロールします。このセクションには、エンドポイントにデプロイされたすべてのモデルバージョンと、それぞれを作成したトレーニングジョブへのハイパーリンクが一覧表示されます。

    モデル系統のトレース (API)

    モデルの系統をトレースするには、モデルの名前を取得し、それを使用してトレーニングジョブを検索します。

    次の例は、API を使用してモデルの系統をトレースする方法を示しています。

    # Get the name of model deployed at endpoint endpoint_config = smclient.describe_endpoint_config(EndpointConfigName=endpointName) model_name = endpoint_config['ProductionVariants'][0]['ModelName'] # Get the model's name model = smclient.describe_model(ModelName=model_name) # Search the training job by the location of model artifacts in Amazon S3 search_params={ "MaxResults": 1, "Resource": "TrainingJob", "SearchExpression": { "Filters": [ { "Name": "ModelArtifacts.S3ModelArtifacts", "Operator": "Equals", "Value": model['PrimaryContainer']['ModelDataUrl'] }]}, } results = smclient.search(**search_params)

    トレーニングジョブを見つけたら、モデルのトレーニングに使用されたリソースを確認できます。