生成されたコンテナに推論出力を設定する - Amazon SageMaker

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

生成されたコンテナに推論出力を設定する

Autopilot は、順序付けされた ContainerDefinition リストを生成します。これを使用して、機械学習パイプラインにデプロイするモデルを構築できます。このモデルはオンラインホスティングや推論に使用できます。

顧客は、ListCandidateForAutoMLJob API を使用して推論コンテナ定義をリストできます。また、最良候補を表す推論コンテナ定義のリストは、DescribeAutoMLJob レスポンスでも入手できます。

回帰および分類の問題タイプのための推論コンテナ定義

Autopilot は、ジョブのトレーニングモード問題タイプに固有の推論コンテナを生成します。

ハイパーパラメータ最適化 (HPO) モードのコンテナ定義

  • 回帰: HPO は 2 つのコンテナを生成します。

    1. 元の特徴量を、回帰アルゴリズムでトレーニングできる特徴量に変換する特徴量エンジニアリングコンテナ。

    2. 特徴量を変換してデータセットの回帰スコアを生成するアルゴリズムコンテナ。

  • 分類: HPO は 3 つのコンテナを生成します。

    1. 元の特徴量を、分類アルゴリズムでトレーニングできる特徴量に変換する特徴量エンジニアリングコンテナ。

    2. 最も高い確率で predicted_label を生成するアルゴリズムコンテナ。このコンテナは、推論レスポンスで分類結果に関連するさまざまな確率を生成することもできます。

    3. アルゴリズム予測の後処理を実行する特徴量エンジニアリングコンテナ。たとえば、予測されたラベルに対して逆変換を実行し、元のラベルに変更できます。

アンサンブルモードのコンテナ定義

アンサンブルモードでは、回帰問題タイプと分類問題タイプはどちらも 1 つの推論コンテナしかありません。この推論コンテナは、問題のタイプに基づいて特徴量を変換し、予測を生成します。

問題タイプごとの推論レスポンス

分類モデルの推論レスポンス

分類推論コンテナの場合、4 つの事前定義キーを使用して推論応答のコンテンツを選択できます。

  • predicted_label: Autopilot によって決定された、正しいラベルを予測する確率が最も高いラベル。

  • probability:

    • HPO モデル: 二項分類の True クラスの確率。多クラス分類の predicted_label の確率。

    • アンサンブルモデル: 二項分類および多クラス分類の predicted_label の確率。

  • probabilities: 対応するすべてのクラスの確率のリスト。

  • labels: すべてのラベルのリスト

たとえば、二項分類の問題で、推論レスポンスキー ['predicted_label', 'probability', 'probabilities', 'labels'] を渡して出力応答が [1, 0.1, "[0.9, 0.1]", "['1', '0']"] のように表示される場合は、次のように解釈する必要があります。

  1. ラベル「1」の確率が高いため (この場合は 0.9)、predicted_label1 に等しくなります。

  2. HPO モデルの場合、probability0.1 に等しく、これは Autopilot によって選択された positive_class (この場合は 0) の確率です。

    アンサンブルモデルの場合は、probabilitypredicted_label の確立である 0.9 に等しくなります。

  3. probabilitieslabels の各ラベルの probability をリストします。

  4. labels はデータセット内の一意のラベルで、2 番目のラベル (この場合は「0」) は Autopilot によって選択された positive_class です。

デフォルトでは、推論コンテナは predicted_label のみを生成するように設定されています。追加の推論コンテンツを選択するには、inference_response_keys パラメータを更新して次の 3 つの環境変数を含めることができます。

  • SAGEMAKER_INFERENCE_SUPPORTED: これは、各コンテナがサポートするコンテンツについてのヒントを提供するために設定されます。

  • SAGEMAKER_INFERENCE_INPUT: これは、入力ペイロードでコンテナに必要となるキーに設定します。

  • SAGEMAKER_INFERENCE_OUTPUT: これは、コンテナから出力される一連のキーを入力します。

HPO モードでの分類モデルの推論レスポンス

このセクションでは、ハイパーパラメータ最適化 (HPO) モードを使用して分類モデルからの推論レスポンスを設定する方法を説明します。

HPO モードで推論レスポンスの内容を選択するには、分類問題用に HPO モードで生成される 2 番目と 3 番目のコンテナに SAGEMAKER_INFERENCE_INPUT および SAGEMAKER_INFERENCE_OUTPUT 変数を追加します。

2 番目のコンテナ (アルゴリズム) でサポートされているキーは、predicted_label、probability、probabilities です。labelsSAGEMAKER_INFERENCE_SUPPORTED に意図的に追加されていないことに注意してください。

3 番目の分類モデルコンテナがサポートするキーは predicted_labellabelsprobabilityprobabilities です。そのため、SAGEMAKER_INFERENCE_SUPPORTED 環境にはこれらのキーの名前が含まれます。

推論コンテナの定義を更新して、predicted_labelprobability を受け取るには、次のコード例を使用してください。

containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

次のコード例では、predicted_labelprobabilitieslabels を受け取るように推論コンテナの定義を更新します。labels は 3 番目のコンテナによって別個に生成されるため、2 番目のコンテナ (アルゴリズムコンテナ) には渡さないでください。

containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probabilities,labels'})

次の折りたたみ可能なセクションでは、 AWS SDK for Python (Boto3) および SageMaker SDK for Python のコード例を示します。各セクションでは、それぞれのコード例で、HPO モードで推論レスポンスの内容を選択する方法が示されています。

import boto3 sm_client = boto3.client('sagemaker', region_name='<Region>') role = '<IAM role>' input_data = '<S3 input uri>' output_path = '<S3 output uri>' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] best_candidate_containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) # create model reponse = sm_client.create_model( ModelName = '<Model Name>', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>', ModelName='<Model Name>', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, }, )
from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, inference_response_keys**=['probabilities', 'labels']) aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)

アンサンブルモードでの分類モデルの推論レスポンス

このセクションでは、アンサンブルモードを使用して分類モデルからの推論レスポンスを設定する方法を説明します。

アンサンブルモードで推論レスポンスの内容を選択するには、SAGEMAKER_INFERENCE_OUTPUT 環境変数を更新します。

分類モデルコンテナがサポートするキーは predicted_labellabelsprobabilityprobabilities です。これらのキーは SAGEMAKER_INFERENCE_SUPPORTED 環境に含まれています。

推論コンテナの定義を更新して、predicted_labelprobability を受け取るには、次のコード例を参照してください。

containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

次の折りたたみ可能なセクションは、アンサンブルモードで推論レスポンスの内容を選択するコード例を示しています。この例では を使用しています AWS SDK for Python (Boto3)。

import boto3 sm_client = boto3.client('sagemaker', region_name='<Region>') role = '<IAM role>' input_data = '<S3 input uri>' output_path = '<S3 output uri>' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] *best_candidate_containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) * # create model reponse = sm_client.create_model( ModelName = '<Model Name>', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>', ModelName='<Model Name>', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, }, )

次の折りたたみ可能なセクションでは、HPO の SageMaker SDK for Python の例と同じコード例を示します。便宜上、ここに含めます。

次の HPO コード例では、 SageMaker SDK for Python を使用しています。

from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, *inference_response_keys**=['probabilities', 'labels'])* aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)