Transformer は、前処理、後処理、およびモデル推論に使用される InferenceService コンポーネントです。 InferenceService は、REST プロトコルを使用して Transformer と通信します。 Transformer は、生の入力データをモデルサーバーが必要とする形式に簡単に変換できるため、エンドツーエンドのデータ処理とモデル推論を実装できます。
前提条件
お使いの環境で基本的な推論サービスを想定どおりに実行できます。 詳細については、「クラウドネイティブ AI モデルに基づいて KServe と ASM を統合して推論サービスを実装する」をご参照ください。
KServe のバージョンによって、必要な入力データ形式が異なる場合があります。 この例では、KServe 0.10 を使用しています。 詳細については、「InferenceService を使用した Transformer のデプロイ」をご参照ください。
ステップ 1:Transformer Docker イメージを作成する
方法 1:GitHub の KServe の kserve/python ディレクトリで、Dockerfile を使用して Transformer Docker イメージを作成します。
cd python docker build -t <your-registry-url>/image-transformer:latest -f custom_transformer.Dockerfile . docker push <your-registry-url>/image-transformer:latest方法 2:既存のイメージを使用します。
asm-registry.cn-hangzhou.cr.aliyuncs.com/asm/kserve-image-custom-transformer:0.10
ステップ 2:REST プリディクターを使用して InferenceService をデプロイする
デフォルトでは、InferenceService は TorchServe を使用して PyTorch モデルを提供し、モデルはモデルリポジトリからロードされます。 この例では、モデルリポジトリに MNIST モデルがあります。
次の内容を含む transformer-new.yaml ファイルを作成します。
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: torch-transformer spec: predictor: model: modelFormat: name: pytorch storageUri: gs://kfserving-examples/models/torchserve/image_classifier/v1 transformer: containers: - image: asm-registry.cn-hangzhou.cr.aliyuncs.com/asm/kserve-image-custom-transformer:0.10 name: kserve-container command: - "python" - "-m" - "model" args: - --model_name - mnist次のコマンドを実行して、InferenceService をデプロイします。
kubectl apply -f transformer-new.yaml
ステップ 3:予測を実行する
リクエスト入力ペイロードを確認します。
次の画像の内容を Base64 にエンコードし、次の input.json ファイルとして保存します。

{ "instances":[ { "image":{ "b64": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAAw0lEQVR4nGNgGFggVVj4/y8Q2GOR83n+58/fP0DwcSqmpNN7oOTJw6f+/H2pjUU2JCSEk0EWqN0cl828e/FIxvz9/9cCh1zS5z9/G9mwyzl/+PNnKQ45nyNAr9ThMHQ/UG4tDofuB4bQIhz6fIBenMWJQ+7Vn7+zeLCbKXv6z59NOPQVgsIcW4QA9YFi6wNQLrKwsBebW/68DJ388Nun5XFocrqvIFH59+XhBAxThTfeB0r+vP/QHbuDCgr2JmOXoSsAAKK7bU3vISS4AAAAAElFTkSuQmCC" } } ] }イングレスゲートウェイ経由でモデルサービスにアクセスします。
次のコマンドを実行して、SERVICE_HOSTNAME の値を取得します。
SERVICE_NAME=torchserve-transformer SERVICE_HOSTNAME=$(kubectl get inferenceservice $SERVICE_NAME -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAME予期される出力:
torchserve-transformer.default.example.com次のコマンドを実行して、モデルサービスにアクセスします。
イングレスゲートウェイの IP アドレスを取得する方法の詳細については、「Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする」トピックのステップ 3 の「サブステップ 1 イングレスゲートウェイの IP アドレスを取得する」をご参照ください。
MODEL_NAME=mnist INPUT_PATH=@./input.json ASM_GATEWAY="XXXX" # XXXX をイングレスゲートウェイの IP アドレスに置き換えます。 curl -v -H "Host: ${SERVICE_HOSTNAME}" -d $INPUT_PATH http://${ASM_GATEWAY}/v1/models/$MODEL_NAME:predict予期される出力:
> POST /v1/models/mnist:predict HTTP/1.1 > Host: torchserve-transformer.default.example.com > User-Agent: curl/7.79.1 > Accept: */* > Content-Length: 427 > Content-Type: application/x-www-form-urlencoded > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < content-length: 19 < content-type: application/json < date: Mon, 13 Nov 2023 05:53:15 GMT < server: istio-envoy < x-envoy-upstream-service-time: 119 < * Connection #0 to host xxxx left intact {"predictions":[2]}%出力は、モデルサービスへのアクセスが成功したことを示しています。