注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
import palantir_models as pm import models_api.models_api_executable as executable_api import boto3 import json import pandas as pd import logging from typing import Optional from botocore.exceptions import ClientError logger = logging.getLogger(__name__) class SageMakerTabularAdapter(pm.ExternalModelAdapter): """ :display-name: SageMaker Tabular Model Adapter :description: SageMakerモデルのデフォルトのモデルアダプター。表形式の入力を想定し、表形式のデータを出力します。 """ def __init__(self, region_name, endpoint_name, access_key_id, secret_access_key): self.endpoint_name = endpoint_name self.runtime = boto3.client( 'runtime.sagemaker', aws_access_key_id=access_key_id, aws_secret_access_key=secret_access_key, region_name=region_name ) @classmethod def init_external(cls, external_context) -> "pm.ExternalModelAdapter": region_name = external_context.connection_config["region_name"] endpoint_name = external_context.connection_config["endpoint_name"] access_key_id = external_context.resolved_credentials["access_key_id"] secret_access_key = external_context.resolved_credentials["secret_access_key"] return cls( region_name, endpoint_name, access_key_id, secret_access_key ) @classmethod def api(cls): inputs = {"df_in": pm.Pandas()} outputs = {"df_out": pm.Pandas()} return inputs, outputs def predict(self, df_in): payload = { "instances": df_in.apply(lambda row: {"features": row.tolist()}, axis=1).tolist() } try: response = self.runtime.invoke_endpoint( EndpointName=self.endpoint_name, ContentType="application/json", Body=json.dumps(payload) ) except ClientError as error: logger.error("SageMaker推論呼び出しが失敗しました。これは、このモデルのegressポリシーに問題があることを示す可能性があります。" "設定されているegressポリシーを再確認し、リモートエンドポイントがまだ利用可能であることを確認してください。") raise error try: # モデルからの出力は、jsonシリアライズ可能であることが前提です # もし結果が実行プログラムに対して大きすぎる場合、この復号化によってOOMが発生する可能性があります result = json.loads(response['Body'].read().decode()) except ValueError as error: logger.error("このSageMakerTabularAdapterは、結果がjsonシリアライズ可能であることを想定しています。") raise error return pd.json_normalize(result)
次に、このモデルアダプタを使用し、モデルアダプタが予期する設定と資格情報を提供する外部ホストされたモデルを設定します。この例では、モデルが us-east-1
にホストされていると仮定していますが、これは設定可能です。
上記の SageMakerTabularAdapter
では URL が必要ではないため、空白のままになりますが、設定と資格情報のマップは、モデルアダプタで定義された同じキーを使用して完成します。
以下では、runtime.sagemaker.us-east-1.amazonaws.com
(ポート 443)に設定されたイグレスポリシーが使用されています。
外部ホストされたモデルに接続するダイアログで、公開されたモデルアダプタを選択します。
サンプル Amazon SageMaker タブラーモデルアダプタで要求されるように、接続設定を定義します。
このアダプタは、次の接続設定が必要です。
サンプル Amazon SageMaker タブラーモデルアダプタで要求されるように、資格情報設定を定義します。
このアダプタは、次の資格情報設定が必要です。
Amazon SageMaker モデルが設定されたので、このモデルは ライブデプロイメント または Pythonトランスフォーム でホストできます。
以下の画像は、ライブデプロイメントで Amazon SageMaker モデルに対して行われたサンプルクエリを示しています。