Amazon SageMaker Autopilot モデルをサーバーレス推論エンドポイント PlatoBlockchain Data Intelligence にデプロイします。垂直検索。あい。

Amazon SageMaker Autopilot モデルをサーバーレス推論エンドポイントにデプロイする

Amazon SageMakerオートパイロット 完全な制御と可視性を維持しながら、データに基づいて最適な機械学習 (ML) モデルを自動的に構築、トレーニング、調整します。 Autopilot は、トレーニング済みのモデルをリアルタイムの推論エンドポイントに自動的にデプロイすることもできます。

コールド スタートを許容できる、スパイクの多いまたは予測不可能なトラフィック パターンを持つワークロードがある場合は、モデルをサーバーレスの推論エンドポイントにデプロイする方がコスト効率が高くなります。

AmazonSageMakerサーバーレス推論 は、トラフィック パターンが予測不可能で、コールド スタートに耐えられるワークロードに最適な、専用の推論オプションです。 長時間実行されるコンピューティング インスタンスによってサポートされるリアルタイムの推論エンドポイントとは異なり、サーバーレス エンドポイントは、組み込みの自動スケーリングを使用してオンデマンドでリソースをプロビジョニングします。 サーバーレス エンドポイントは、受信リクエストの数に基づいて自動的にスケーリングし、受信リクエストがない場合はリソースをゼロにスケールダウンするため、コストを最小限に抑えることができます。

この投稿では、Autopilot でトレーニングされたモデルをサーバーレスの推論エンドポイントにデプロイする方法を示します。 Boto3 ライブラリ for アマゾンセージメーカー.

自動操縦訓練モード

オートパイロット実験を作成する前に、オートパイロットにトレーニング モードを自動的に選択させるか、トレーニング モードを手動で選択することができます。

オートパイロットは現在、次の XNUMX つのトレーニング モードをサポートしています。

  • 自動応答オプション – データセットのサイズに基づいて、オートパイロットはアンサンブル モードまたは HPO モードのいずれかを自動的に選択します。 100 MB を超えるデータセットの場合、Autopilot は HPO を選択します。 それ以外の場合は、アンサンブルを選択します。
  • アンサンブル – オートパイロットは オートグルオン モデル スタッキングを使用したアンサンブル手法を使用して、最適な予測モデルを生成します。
  • ハイパーパラメータ最適化 (HPO) – Autopilot は、データセットでトレーニング ジョブを実行しながら、ベイジアン最適化またはマルチフィデリティ最適化を使用してハイパーパラメーターを調整することにより、モデルの最適なバージョンを見つけます。 HPO モードは、データセットに最も関連するアルゴリズムを選択し、モデルを調整するために最適な範囲のハイパーパラメーターを選択します。

オートパイロット トレーニング モードの詳細については、次を参照してください。 トレーニングモード.

ソリューションの概要

この投稿では、 UCI バンク マーケティング クライアントが銀行が提供する定期預金を申し込むかどうかを予測するためのデータセット。 これは二項分類の問題タイプです。

を使用して XNUMX つのオートパイロット ジョブを起動します。 SageMaker の Boto3 ライブラリ. 最初のジョブは、選択されたトレーニング モードとしてアンサンブルを使用します。 次に、生成された単一のアンサンブル モデルをサーバーレス エンドポイントにデプロイし、このホストされたエンドポイントに推論リクエストを送信します。

XNUMX 番目のジョブは、HPO トレーニング モードを使用します。 分類問題の種類の場合、Autopilot は XNUMX つの推論コンテナーを生成します。 これら XNUMX つの推論コンテナーを抽出し、それらを個別のサーバーレス エンドポイントにデプロイします。 次に、これらのホストされたエンドポイントに推論リクエストを送信します。

回帰および分類の問題タイプの詳細については、次を参照してください。 回帰および分類の問題タイプの推論コンテナー定義.

からオートパイロット ジョブを起動することもできます。 Amazon SageMakerスタジオ UI。 UI からジョブを起動する場合は、必ずオフにしてください。 自動デプロイ 内のオプション 展開と詳細設定 セクション。 それ以外の場合、Autopilot は最適な候補をリアルタイム エンドポイントにデプロイします。

前提条件

最新バージョンの Boto3 と SageMaker Python パッケージがインストールされていることを確認します。

pip install -U boto3 sagemaker

SageMaker パッケージのバージョンが必要です >= 2.110.0 およびBoto3バージョン >= boto3-1.24.84.

アンサンブル モードでオートパイロット ジョブを起動する

SageMaker Boto3 ライブラリを使用して Autopilot ジョブを起動するには、 create_auto_ml_job API。 次に、パスします AutoMLJobConfig, InputDataConfig, AutoMLJobObjective への入力として create_auto_ml_job。 次のコードを参照してください。

bucket = session.default_bucket()
role = sagemaker.get_execution_role()
prefix = "autopilot/bankadditional"
sm_client = boto3.Session().client(service_name='sagemaker',region_name=region)

timestamp_suffix = strftime('%d%b%Y-%H%M%S', gmtime())
automl_job_name = f"uci-bank-marketing-{timestamp_suffix}"
max_job_runtime_seconds = 3600
max_runtime_per_job_seconds = 1200
target_column = "y"
problem_type="BinaryClassification"
objective_metric = "F1"
training_mode = "ENSEMBLING"

automl_job_config = {
    'CompletionCriteria': {
      'MaxRuntimePerTrainingJobInSeconds': max_runtime_per_job_seconds,
      'MaxAutoMLJobRuntimeInSeconds': max_job_runtime_seconds
    },    
    "Mode" : training_mode
}

automl_job_objective= { "MetricName": objective_metric }

input_data_config = [
    {
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': f's3://{bucket}/{prefix}/raw/bank-additional-full.csv'
        }
      },
      'TargetAttributeName': target_column
    }
  ]

output_data_config = {
	    'S3OutputPath': f's3://{bucket}/{prefix}/output'
	}


sm_client.create_auto_ml_job(
				AutoMLJobName=auto_ml_job_name,
				InputDataConfig=input_data_config,
				OutputDataConfig=output_data_config,
				AutoMLJobConfig=automl_job_config,
				ProblemType=problem_type,
				AutoMLJobObjective=automl_job_objective,
				RoleArn=role)

オートパイロットは BestCandidate を持つモデルオブジェクト InferenceContainers モデルを推論エンドポイントにデプロイするために必要です。 を取得するには BestCandidate 前のジョブでは、 describe_automl_job 関数:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
best_candidate = job_response['BestCandidate']
inference_container = job_response['BestCandidate']['InferenceContainers'][0]
print(inference_container)

トレーニング済みモデルをデプロイする

ここで、前述の推論コンテナーをサーバーレス エンドポイントにデプロイします。 最初のステップは、推論コンテナーからモデルを作成し、次に、指定するエンドポイント構成を作成することです。 MemorySizeInMB および MaxConcurrency サーバーレス エンドポイントの値とモデル名。 最後に、上記で作成したエンドポイント構成でエンドポイントを作成します。

選択することをお勧めします エンドポイントのメモリ サイズ あなたのモデルのサイズに応じて。 メモリ サイズは、少なくともモデル サイズと同じ大きさにする必要があります。 サーバーレス エンドポイントの最小 RAM サイズは 1024 MB (1 GB) で、選択できる最大 RAM サイズは 6144 MB (6 GB) です。

選択できるメモリ サイズは、1024 MB、2048 MB、3072 MB、4096 MB、5120 MB、または 6144 MB です。

コストとパフォーマンスの観点から、サーバーレス エンドポイントが適切なデプロイ オプションであるかどうかを判断するには、以下を参照することをお勧めします。 SageMaker サーバーレス推論ベンチマーク ツールキット、さまざまなエンドポイント構成をテストし、最も最適な構成を同等のリアルタイム ホスティング インスタンスと比較します。

サーバーレスエンドポイントはのみ受け入れることに注意してください SingleModel 推論コンテナ用。 アンサンブル モードのオートパイロットは単一のモデルを生成するため、このモデル コンテナーをそのままエンドポイントにデプロイできます。 次のコードを参照してください。

# Create Model
	model_response = sm_client.create_model(
				ModelName=model_name,
				ExecutionRoleArn=role,
				Containers=[inference_container]
	)

# Create Endpoint Config
	epc_response = sm_client.create_endpoint_config(
		EndpointConfigName = endpoint_config_name,
		ProductionVariants=[
			{
				"ModelName": model_name,
				"VariantName": "AllTraffic",
				"ServerlessConfig": {
					"MemorySizeInMB": memory,
					"MaxConcurrency": max_concurrency
				}
			}
		]
	)

# Create Endpoint
	ep_response = sm_client.create_endpoint(
		EndpointName=endpoint_name,
		EndpointConfigName=endpoint_config_name
	)

サーバーレス推論エンドポイントが InService、推論リクエストを送信してエンドポイントをテストし、予測を観察できます。 次の図は、このセットアップのアーキテクチャを示しています。

生データをペイロードとしてエンドポイントに送信できることに注意してください。 Autopilot によって生成されたアンサンブル モデルは、アルゴリズム モデルおよびパッケージと共に、必要なすべての特徴変換および逆ラベル変換ステップを単一のモデルに自動的に組み込みます。

トレーニング済みモデルに推論リクエストを送信する

次のコードを使用して、アンサンブル モードを使用してトレーニングされたモデルの推論を送信します。

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer


payload = "34,blue-collar,married,basic.4y,no,no,no,telephone,may,tue,800,4,999,0,nonexistent,1.1,93.994,-36.4,4.857,5191.0"

predictor = Predictor(
        endpoint_name=endpoint,
        sagmaker_session=session,
        serializer=CSVSerializer(),
    )

prediction = predictor.predict(payload).decode(‘utf-8’)
print(prediction)

HPO モードでオートパイロット ジョブを起動する

HPO モードでは、 CompletionCriteria、さらに MaxRuntimePerTrainingJobInSeconds および MaxAutoMLJobRuntimeInSeconds, を指定することもできます MaxCandidates Autopilot ジョブが生成する候補の数を制限します。 これらはオプションのパラメーターであり、デモンストレーション用にジョブの実行時間を制限するためにのみ設定されることに注意してください。 次のコードを参照してください。

training_mode = "HYPERPARAMETER_TUNING"

automl_job_config["Mode"] = training_mode
automl_job_config["CompletionCriteria"]["MaxCandidates"] = 15
hpo_automl_job_name =  f"{model_prefix}-HPO-{timestamp_suffix}"

response = sm_client.create_auto_ml_job(
					  AutoMLJobName=hpo_automl_job_name,
					  InputDataConfig=input_data_config,
					  OutputDataConfig=output_data_config,
					  AutoMLJobConfig=automl_job_config,
					  ProblemType=problem_type,
					  AutoMLJobObjective=automl_job_objective,
					  RoleArn=role,
					  Tags=tags_config
				)

取得するため BestCandidate 前のジョブでは、再び describe_automl_job 関数:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
best_candidate = job_response['BestCandidate']
inference_containers = job_response['BestCandidate']['InferenceContainers']
print(inference_containers)

トレーニング済みモデルをデプロイする

分類問題タイプの HPO モードのオートパイロットは、XNUMX つの推論コンテナーを生成します。

最初のコンテナーは、機能変換の手順を処理します。 次に、アルゴリズム コンテナーは、 predicted_label 最も高い確率で。 最後に、後処理の推論コンテナーは、予測されたラベルに対して逆変換を実行し、それを元のラベルにマップします。 詳細については、次を参照してください。 回帰および分類の問題タイプの推論コンテナー定義.

これら XNUMX つの推論コンテナーを抽出し、別のサーバーレス エンドポイントにデプロイします。 推論のために、最初にペイロードを機能変換コンテナーに送信し、次にこのコンテナーからの出力をアルゴリズム コンテナーに渡し、最後に前の推論コンテナーからの出力を後処理コンテナーに渡すことによって、エンドポイントを順番に呼び出します。予測されたラベルを出力します。

次の図は、このセットアップのアーキテクチャを示しています。 XNUMX つのサーバーレス エンドポイントにデプロイされた HPO モードの Autopilot モデルを示す図

から XNUMX つの推論コンテナーを抽出します。 BestCandidate 次のコードで:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
inference_containers = job_response['BestCandidate']['InferenceContainers']

models = list()
endpoint_configs = list()
endpoints = list()

# For brevity, we've encapsulated create_model, create endpoint_config and create_endpoint as helper functions
for idx, container in enumerate(inference_containers):
    (status, model_arn) = create_autopilot_model(
								    sm_client,
								    automl_job_name,
            						role,
								    container,
								    idx)
    model_name = model_arn.split('/')[1]
    models.append(model_name)

    endpoint_config_name = f"epc-{model_name}"
    endpoint_name = f"ep-{model_name}"
    (status, epc_arn) = create_serverless_endpoint_config(
								    sm_client,
								    endpoint_config_name,
								    model_name,
            						memory=2048,
								    max_concurrency=10)
	endpoint_configs.append(endpoint_config_name)

	response = create_serverless_endpoint(
								    sm_client,
								    endpoint_name,
								    endpoint_config_name)
	endpoints.append(endpoint_name)

トレーニング済みモデルに推論リクエストを送信する

推論のために、ペイロードを順番に送信します。最初に機能変換コンテナーに送信し、次にモデル コンテナーに送信し、最後に逆ラベル変換コンテナーに送信します。

HPO モードからの XNUMX つの推論コンテナーの推論要求フローのビジュアル

次のコードを参照してください。

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer

payload = "51,technician,married,professional.course,no,yes,no,cellular,apr,thu,687,1,0,1,success,-1.8,93.075,-47.1,1.365,5099.1"


for _, endpoint in enumerate(endpoints):
    try:
        print(f"payload: {payload}")
        predictor = Predictor(
            endpoint_name=endpoint,
            sagemaker_session=session,
            serializer=CSVSerializer(),
        )
        prediction = predictor.predict(payload)
        payload=prediction
    except Exception as e:
        print(f"Error invoking Endpoint; {endpoint} n {e}")
        break

この例の完全な実装は、次の jupyter で利用できます。 ノート.

クリーンアップ

リソースをクリーンアップするために、作成されたサーバーレス エンドポイント、エンドポイント構成、およびモデルを削除できます。

sm_client = boto3.Session().client(service_name='sagemaker',region_name=region)

for _, endpoint in enumerate(endpoints):
    try:
        sm_client.delete_endpoint(EndpointName=endpoint)
    except Exception as e:
        print(f"Exception:n{e}")
        continue
        
for _, endpoint_config in enumerate(endpoint_configs):
    try:
        sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config)
    except Exception as e:
        print(f"Exception:n{e}")
        continue

for _, autopilot_model in enumerate(models):
    try:
        sm_client.delete_model(ModelName=autopilot_model)
    except Exception as e:
        print(f"Exception:n{e}")
        continue

まとめ

この投稿では、Autopilot で生成されたモデルをアンサンブル モードと HPO モードの両方でサーバーレスの推論エンドポイントにデプロイする方法を示しました。 このソリューションは、Autopilot などの費用対効果の高いフル マネージド ML サービスを使用して活用する能力をスピードアップし、生データからモデルを迅速に生成し、組み込みの自動スケーリングを備えたフル マネージド サーバーレス推論エンドポイントにそれらをデプロイしてコストを削減します。 .

ビジネス KPI に関連するデータセットでこのソリューションを試すことをお勧めします。 Jupyter ノートブックに実装されたソリューションは、 GitHubレポ.

追加の参考文献


著者について

Amazon SageMaker Autopilot モデルをサーバーレス推論エンドポイント PlatoBlockchain Data Intelligence にデプロイします。垂直検索。あい。プラヴィーン・チャマルティ アマゾン ウェブ サービスのシニア AI/ML スペシャリストです。 彼は AI/ML とすべての AWS に情熱を注いでいます。 彼は、南北アメリカ全体の顧客が AWS で ML ワークロードを効率的にスケーリング、革新、運用するのを支援しています。 余暇には、Praveen は読書が大好きで、SF 映画を楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習