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

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

最終更新日:Sep 11, 2026

ACK Knative または で KServe を使用して、AI モデルをサーバーレス推論サービスとしてデプロイできます。これにより、オートスケーリング、バージョニング、カナリアリリースなどの機能を実現できます。

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

KServe を Knative の ALB イングレス または Kourier ゲートウェイ とシームレスに統合するには、まず KServe アドオンをインストールする必要があります。その後、デフォルト設定を変更して、組み込みの Istio VirtualService を無効にします。

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

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ネイティブ] を選択します。

    3. アドオン管理 タブの アドオンコンポーネント セクションで、KServe アドオンを見つけてデプロイします。

  2. Istio VirtualService の作成を無効にします。

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

    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. がく片の長さ

  2. がく片の幅

  3. 花びらの長さ

  4. 花びらの幅

出力は、予測されたクラスを表すインデックスです:

  • 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:
          # モデルのフォーマット。この場合は 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 ゲートウェイの ゲートウェイ と、サービスの デフォルトドメイン を取得します。

    この例では ALB イングレスを使用します。Kourier ゲートウェイのユーザーインターフェースも同様です。

    ページの上部に、[ゲートウェイアドレス] (alb-xxx.aliyuncsslb.com など) が表示されます。サービスリストで、sklearn-iris-predictor のステータスが [成功] であり、その [デフォルトドメイン名] が sklearn-iris-predictor.default.example.com であることを確認します。

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

    ローカルターミナルで、2 つの配列を含む ./iris-input.json ファイルを作成します。各配列は、予測対象のサンプルを表します。

    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 や Elastic Container Instance など) およびネットワークリソース (ALB や CLB など) については料金が発生します。

よくある質問

InferenceService が Not Ready 状態の場合

問題をトラブルシューティングするには:

  1. kubectl describe inferenceservice <yourServiceName> を実行し、イベントでエラーメッセージを確認します。

  2. kubectl get pods を実行して、サービスに関連付けられた Pod が Error または CrashLoopBackOff 状態になっていないか確認します。これらの Pod の名前は通常、サービス名で始まります。

  3. Pod が異常な状態の場合は、kubectl logs <pod-name> -c kserve-container を実行してモデルサービスコンテナのログを表示し、ネットワークエラーやモデルファイル形式の誤りなどによるモデルの読み込み失敗がないか確認します。

カスタムモデルのデプロイ

モデルファイルを OSS バケットにアップロードできます。InferenceService を作成する際、spec.predictor.model.storageUri フィールドの値をモデルファイルの URI に置き換えます。また、modelFormat パラメータを、モデルフレームワークに基づいて tensorflow、pytorch、onnx などの有効な値に設定する必要があります。

GPU リソースの設定

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

Knative で GPU リソースを使用する方法の詳細については、「GPU リソースを使用する」をご参照ください。
spec:
  predictor:
    resources:
      requests:
        nvidia.com/gpu: "1"
      limits:
        nvidia.com/gpu: "1"

関連ドキュメント