すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:InferenceService を使用したトランスフォーマーのデプロイ

最終更新日:Mar 12, 2026

モデルサーバーが、例えば未加工の Base64 イメージではなく、テンソルのような前処理済み入力を想定している場合、トランスフォーマーがそのギャップを埋めます。単一の InferenceService 内で、以下の3つのハンドラを順次実行します。

  1. preprocess ハンドラは、未加工の入力をモデルが想定するフォーマットに変換します。例えば、Base64 イメージをデコードしてテンソルに変換します。

  2. 処理されたデータは、推論のためにプレディクターに転送されます。

  3. プレディクターの応答は、クライアントに返される前に postprocess ハンドラを通過します。

デフォルトでは、トランスフォーマーは REST を介してプレディクターと通信します。

前提条件

開始する前に、以下が準備できていることを確認してください。

  • Service Mesh (ASM) 上で動作する KServe 環境。セットアップ手順については、「KServe と ASM の統合」をご参照ください。

  • ご利用のクラスターにアクセスできるように設定された kubectl

  • (任意) カスタムトランスフォーマーイメージをビルドする場合、インストール済みの Docker

  • (任意) カスタムイメージをプッシュする場合、コンテナレジストリへのアクセス

説明

このチュートリアルでは KServe 0.10 を使用します。バージョンが異なると、必要な入力データ形式が異なる場合があります。アップストリームリファレンスについては、「Deploy Transformer with InferenceService」をご参照ください。

トランスフォーマー Docker イメージの作成

以下のいずれかのメソッドを選択します。

メソッド使用するケース
ソースからビルドトランスフォーマーのロジックをカスタマイズする必要がある場合
ビルド済みイメージデフォルトのイメージトランスフォーマーを無修正で使用したい場合

ソースからビルド

KServe GitHub リポジトリkserve/python ディレクトリからイメージをビルドします。

cd python
docker build -t <your-registry-url>/image-transformer:latest -f custom_transformer.Dockerfile .
docker push <your-registry-url>/image-transformer:latest

<your-registry-url> を、ご利用のコンテナレジストリ URL (例:registry.example.com/ml-models) に置き換えてください。

ビルド済みイメージの使用

InferenceService YAML で、以下のイメージを直接使用します。

asm-registry.cn-hangzhou.cr.aliyuncs.com/asm/kserve-image-custom-transformer:0.10

トランスフォーマーを使用した InferenceService のデプロイ

デフォルトでは、InferenceService は TorchServe を使用して PyTorch モデルをサービングします。この例では、事前学習済みの MNIST 手書き数字分類器を、カスタムイメージトランスフォーマーとともにデプロイします。

  1. 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
    フィールド説明
    spec.predictor.model.storageUriTorchServe によってサービングされる MNIST PyTorch モデルへの Google Cloud Storage パス
    spec.transformer.containers[].image受信イメージデータを前処理するトランスフォーマーイメージ
    spec.transformer.containers[].args--model_name mnist は、トランスフォーマーにターゲットとなるモデルを指示します
  2. InferenceService をデプロイします。

    kubectl apply -f transformer-new.yaml
  3. InferenceService の準備が完了するまで待ちます。

    kubectl get inferenceservice torch-transformer

    続行する前に、READY 列に True と表示されることを確認してください。

予測の実行

入力データの準備

サンプル画像を Base64 でエンコードし、input.json という名前のファイルに保存します。次の例では、手書きの数字の画像を使用しています。

Sample handwritten digit
{
    "instances": [
        {
            "image": {
                "b64": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAAw0lEQVR4nGNgGFggVVj4/y8Q2GOR83n+58/fP0DwcSqmpNN7oOTJw6f+/H2pjUU2JCSEk0EWqN0cl828e/FIxvz9/9cCh1zS5z9/G9mwyzl/+PNnKQ45nyNAr9ThMHQ/UG4tDofuB4bQIhz6fIBenMWJQ+7Vn7+zeLCbKXv6z59NOPQVgsIcW4QA9YFi6wNQLrKwsBebW/68DJ388Nun5XFocrqvIFH59+XhBAxThTfeB0r+vP/QHbuDCgr2JmOXoSsAAKK7bU3vISS4AAAAAElFTkSuQmCC"
            }
        }
    ]
}

予測リクエストの送信

  1. サービスホスト名を取得します。

    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
  2. ASM イングレスゲートウェイ経由でリクエストを送信します。

    イングレスゲートウェイの IP アドレスを確認するには、「イングレスゲートウェイの IP アドレスの取得」をご参照ください。

    MODEL_NAME=mnist
    INPUT_PATH=@./input.json
    ASM_GATEWAY="<ingress-gateway-ip>"  # ご利用のイングレスゲートウェイ IP アドレスに置き換えてください
    curl -v -H "Host: ${SERVICE_HOSTNAME}" -d $INPUT_PATH http://${ASM_GATEWAY}/v1/models/$MODEL_NAME:predict

結果の検証

リクエストが成功すると、HTTP 200 とともに JSON 形式の予測が返されます。

< HTTP/1.1 200 OK
< content-length: 19
< content-type: application/json
< server: istio-envoy
<
{"predictions":[2]}

予測 [2] は、モデルが入力イメージを数字の 2 として分類したことを意味します。これにより、トランスフォーマーが Base64 イメージをデコードし、テンソルに変換して MNIST プレディクターに転送したことが確認できます。

次のステップ