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