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

Container Service for Kubernetes:KServe を使用した推論サービスの迅速なデプロイ

最終更新日:Apr 03, 2026

ACK Knative 上で KServe を使用して、AI モデルをサーバーレス推論サービスとしてデプロイします。これにより、自動スケーリング、マルチバージョン管理、および段階的リリースが実現されます。

ステップ 1:KServe アドオンのインストールと構成

Knative の ALB ゲートウェイ または Kourier ゲートウェイ と KServe をシームレスに統合するには、まず KServe アドオンをインストールします。その後、そのデフォルト設定を更新して、組み込みの Istio 仮想サービスを無効化します。

  1. KServe アドオンをインストールします。

    1. Container Service Management Console にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

    2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、アプリケーション > Knative をクリックします。

    3. アドオン管理 タブの アドオンコンポーネント セクションに移動し、KServe アドオンを検索してデプロイします。

  2. Istio VirtualHost を無効化します。

    inferenceservice-config ConfigMap を編集し、disableIstioVirtualHosttrue に設定します。

    kubectl get configmap inferenceservice-config -n kserve -o yaml \
    | sed 's/"disableIstioVirtualHost": false/"disableIstioVirtualHost": true/g' \
    | kubectl apply -f -

    期待される出力:

    configmap/inferenceservice-config configured
  3. 構成を確認します。

    kubectl get configmap inferenceservice-config -n kserve -o yaml \
    | grep '"disableIstioVirtualHost":' \
    | tail -n1 \
    | awk -F':' '{gsub(/[ ,]/,"",$2); print $2}'

    出力が true の場合、構成が更新されています。

  4. 変更を適用するために KServe コントローラーを再起動します。

    kubectl rollout restart deployment kserve-controller-manager -n kserve

ステップ 2:InferenceService のデプロイ

この例では、Iris データセットでトレーニングされた scikit-learn 分類モデルをデプロイします。このモデルは、順に 4 つの花の測定値を受け取り、花のクラスを予測します。

入力:順に並んだ 4 つの数値特徴量:

  1. がく片の長さ(Sepal length)

  2. がく片の幅(Sepal width)

  3. 花びらの長さ(Petal length)

  4. 花びらの幅(Petal width)

出力:予測されたクラスのインデックス:

  • 0:Iris Setosa

  • 1:Iris Versicolour

  • 2:Iris Virginica

  1. 推論サービスをデプロイするための inferenceservice.yaml を作成します。

    apiVersion: "serving.kserve.io/v1beta1"
    kind: "InferenceService"
    metadata:
      name: "sklearn-iris"
    spec:
      predictor:
        model:
          # モデルフォーマット。scikit-learn の場合は "sklearn" を使用します。
          modelFormat:
            name: sklearn
          image: "kube-ai-registry.cn-shanghai.cr.aliyuncs.com/ai-sample/kserve-sklearn-server:v0.12.0"
          command:
          - sh
          - -c
          - "python -m sklearnserver --model_name=sklearn-iris --model_dir=/models --http_port=8080"
  2. InferenceService をデプロイします。

    kubectl apply -f inferenceservice.yaml
  3. サービスのステータスを確認します。

    kubectl get inferenceservices sklearn-iris

    出力の READY 列に True と表示される場合、サービスが準備完了です。

    NAME           URL                                                         READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION                    AGE
    sklearn-iris   http://sklearn-iris-predictor-default.default.example.com   True           100                              sklearn-iris-predictor-default-00001   51s

ステップ 3:サービスへのアクセス

クラスターのイングレスゲートウェイを介して、サービスに推論リクエストを送信します。

  1. Knative ページで、サービス管理 タブに移動します。ゲートウェイ のアドレスとサービスの デフォルトドメイン を取得します。これらの情報を使ってサービスにアクセスします。

    以下の図は ALB ゲートウェイを示しています。Kourier ゲートウェイのインターフェイスも同様です。

    image

  2. リクエストデータを準備します。

    ローカル端末で、./iris-input.json という名前のファイルを作成します。このファイルには 2 つの配列が含まれており、それぞれが 1 つの予測サンプルを表します。

    cat <<EOF > "./iris-input.json"
    {
      "instances": [
        [6.8,  2.8,  4.8,  1.4],
        [6.0,  3.4,  4.5,  1.6]
      ]
    }
    EOF
  3. ローカル端末からサービスに推論リクエストを送信します。

    ${INGRESS_DOMAIN} を、ステップ 1 で取得した ゲートウェイ アドレスに置き換えます。

    curl -H "Content-Type: application/json" -H "Host: sklearn-iris-predictor.default.example.com" "http://${INGRESS_DOMAIN}/v1/models/sklearn-iris:predict" -d @./iris-input.json

    出力から、両方のサンプルがクラス 1(Iris Versicolour)と予測されたことがわかります。

    {"predictions":[1,1]}                        

課金

KServe および Knative アドオンには追加料金は発生しません。ただし、ECS や ECI などの計算リソース、ALB や CLB などのネットワークリソースについては課金されます。詳細については、「クラウドプロダクトのリソース料金」をご参照ください。

よくある質問

InferenceService のステータスが長期間 Not Ready のままです。トラブルシューティング方法を教えてください。

以下の手順に従ってください:

  1. kubectl describe inferenceservice <yourServiceName> を実行し、Events を確認してエラーメッセージを探します。

  2. kubectl get pods を実行し、このサービスに関連する Pod(通常はサービス名に基づいて命名)が Error または CrashLoopBackOff 状態になっていないか確認します。

  3. Pod のステータスが異常な場合、kubectl logs <pod-name> -c kserve-container を実行して、モデルサービスコンテナのログを確認します。モデルの読み込み失敗(例:モデルダウンロードを妨げるネットワークエラー、不正なモデルファイルフォーマットなど)がないかチェックします。

独自にトレーニングしたモデルをデプロイするにはどうすればよいですか?

モデルファイルを OSS バケットにアップロードします。InferenceService を作成する際、spec.predictor.model.storageUri をモデルファイルの URI に設定します。また、モデルフレームワークに応じて modelFormat を適切に設定します(例: tensorflowpytorchonnx)。

モデルサービスに GPU リソースを割り当てるにはどうすればよいですか?

モデルの推論に GPU が必要な場合、InferenceService の YAML ファイル内の predictor セクションに resources フィールドを追加して、GPU リソースを要求します。例:

Knative における GPU リソースの利用について詳しくは、「GPU リソースの利用」をご参照ください。
spec:
  predictor:
    resources:
      requests:
        nvidia.com/gpu: "1"
      limits:
        nvidia.com/gpu: "1"

参考文献