注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
以下のドキュメントでは、Amazon SageMaker にホストされたモデルへのカスタム接続の例として、設定とモデルアダプタを提供しています。
手順に沿ったガイドは、モデルアダプタの作成方法および外部ホストされたモデルへの接続の作成方法のドキュメントを参照してください。
まず、Code Repositories アプリケーションでモデルアダプタライブラリを使用して、モデルアダプタを公開およびタグ付けします。以下のモデルアダプタは、AWS SDK for Python(Boto3) およびフレームワークを使用して、Amazon SageMaker にホストされているモデルへの接続を構成します。以下のコードは、バージョン Python 3.8.17
、boto3 1.28.1
、および pandas 1.5.3
でテストされました。
このモデルアダプタは、以下の前提を持っています:
region_name
- 接続設定として提供されます。endpoint_name
- 接続設定として提供されます。access_key_id
- 資格情報として提供されます。secret_access_key
- 資格情報として提供されます。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 70 71 72 73 74 75 76
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__) # SageMakerTabularAdapterクラス定義 class SageMakerTabularAdapter(pm.ExternalModelAdapter): """ :display-name: SageMaker Tabular Model Adapter :description: Default model adapter for SageMaker models that expect tabular input and output tabular data. """ # 初期化メソッド 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.external_model.connection_configuration["region_name"] endpoint_name = external_context.external_model.connection_configuration["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 ) # APIメソッド @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: # SageMakerの推論呼び出しが失敗した場合のエラーログ logger.error("SageMaker inference call failed. This can indicate an error with this Model's egress " "policy. Double check your configured egress policy and ensure the remote endpoint is still " "available.") raise error try: # モデルからの出力はJSONシリアライズ可能であると想定 # 結果が大きすぎると、このデシリアライゼーションでOOMが発生する可能性がある result = json.loads(response['Body'].read().decode()) except ValueError as error: # SageMakerTabularAdapterは結果がJSONシリアライズ可能であることを期待 logger.error("This SageMakerTabularAdapter expects results to be json serializable.") 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モデルに対して行われた例のクエリを示しています。