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

Alibaba Cloud Service Mesh:クラウドネイティブ AI モデルに基づく推論サービスを実装するための KServe と ASM の統合

最終更新日:Jan 13, 2025

KServe(旧称 KFServing)は、クラウドネイティブ環境におけるモデルサーバーおよび推論エンジンです。自動スケーリング、スケールツーゼロ、カナリアデプロイなどの機能をサポートしています。 KServe を Service Mesh(ASM)と統合することで、開発者はクラウドネイティブアプリケーションで機械学習モデルに基づく推論サービスを迅速にデプロイおよび管理できます。これにより、手動設定とメンテナンスの作業負荷が軽減され、開発効率が向上します。

前提条件

KServe の概要

モデルサーバーとして、KServe は機械学習モデルと深層学習モデルの大規模デプロイをサポートしています。 KServe は、従来の Kubernetes デプロイメントモード、またはスケールツーゼロをサポートするサーバーレスモードで動作するようにデプロイできます。モデルの自動トラフィックベースのスケーリングと、ブルーグリーンまたはカナリアデプロイを提供します。詳細については、KServe をご参照ください。

KServe

ステップ 1:KServe コンポーネント cert-manager をインストールする

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[エコシステム] > [ASM 上の Kserve] を選択します。

  3. [ASM 上の Kserve] ページで、[ASM 上の Kserve を有効にする] をクリックします。

    KServe は cert-manager コンポーネントに依存しています。 KServe をインストールすると、cert-manager コンポーネントが自動的にインストールされます。独自の cert-manager コンポーネントを使用する場合は、[クラスターに Certmanager コンポーネントを自動的にインストールする] をオフにします。

ステップ 2:ASM イングレスゲートウェイの IP アドレスを取得する

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

  3. [イングレスゲートウェイ] ページで、ASM イングレスゲートウェイの [サービスアドレス] を表示して記録します。

ステップ 3:推論サービスを作成する

この例では、テストに scikit-learn トレーニングモデルを使用します。

  1. kubectl を使用して、データプレーン上の ACK クラスターに接続します。次に、次のコマンドを実行して、KServe リソースをデプロイするための名前空間を作成します。

    kubectl create namespace kserve-test
  2. 推論サービスを作成します。

    1. 次の内容を使用して、isvc.yaml ファイルを作成します。

      apiVersion: "serving.kserve.io/v1beta1"
      kind: "InferenceService"
      metadata:
        name: "sklearn-iris"
      spec:
        predictor:
          model:
            modelFormat:
              name: sklearn
            storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
    2. 次のコマンドを実行して、kserve-test 名前空間に sklearn-iris サービスを作成します。

      kubectl apply -f isvc.yaml -n kserve-test
  3. 次のコマンドを実行して、sklearn-iris サービスが正常に作成されたかどうかをクエリします。

    kubectl get inferenceservices sklearn-iris -n kserve-test

    予期される出力:

    NAME           URL                                           READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION            AGE
    sklearn-iris   http://sklearn-iris.kserve-test.example.com   True           100                              sklearn-iris-predictor-00001   3h26m

    READY の値が True であることは、sklearn-iris サービスが正常に作成されたことを示します。

  4. (オプション)仮想サービスと Istio ゲートウェイを表示します。

    sklearn-iris サービスが作成されると、scikit-learn モデル用に仮想サービスと Istio ゲートウェイが自動的に作成されます。仮想サービスと Istio ゲートウェイを表示するには、次の手順を実行します。

    1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[トラフィック管理センター] > [virtualservice] を選択します。

    3. [virtualservice] ページで、刷新[名前空間] の横にある kserve-test名前空間 アイコンをクリックし、 ドロップダウンリストから を選択して、作成された仮想サービスを表示します。

    4. 左側のナビゲーションペインで、[ASM ゲートウェイ] > [ゲートウェイ] を選択します。

    5. [ゲートウェイ] ページの上部で、knative-serving[名前空間] ドロップダウンリストから を選択して、作成された Istio ゲートウェイを表示します。

ステップ 4:scikit-learn モデルによって提供されるサービスにアクセスする

次のセクションでは、Linux および Mac オペレーティングシステムで scikit-learn モデルによって提供されるサービスにアクセスする手順について説明します。

  1. 次のコマンドを実行して、scikit-learn モデルの入力ファイルを作成します。

    cat <<EOF > "./iris-input.json"
    {
      "instances": [
        [6.8,  2.8,  4.8,  1.4],
        [6.0,  3.4,  4.5,  1.6]
      ]
    }
    EOF
  2. イングレスゲートウェイを介して scikit-learn モデルによって提供されるサービスへのアクセスをテストします。

    1. 次のコマンドを実行して、SERVICE_HOSTNAME の値を取得します。

      SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3)
      echo $SERVICE_HOSTNAME

      予期される出力:

      sklearn-iris.kserve-test.example.com
    2. 次のコマンドを実行してサービスにアクセスします。この手順では、ASM_GATEWAY を ステップ 2 で取得したイングレスゲートウェイの IP アドレスに設定します。

      ASM_GATEWAY="XXXX" # XXXX をイングレスゲートウェイの IP アドレスに置き換えます。
      curl  -H "Host: ${SERVICE_HOSTNAME}" http://${ASM_GATEWAY}:80/v1/models/sklearn-iris:predict -d @./iris-input.json

      予期される出力:

      {"predictions": [1, 1]}
  3. scikit-learn モデルによって提供されるサービスのパフォーマンスをテストします。

    1. 次のコマンドを実行して、ストレステスト用のアプリケーションをデプロイします。

      kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml
    2. 次のコマンドを実行して、Pod の名前をクエリします。

      kubectl get pod

      予期される出力:

      NAME                                                       READY   STATUS      RESTARTS   AGE
      load-testxhwtq-pj9fq                                       0/1     Completed   0          3m24s
      sklearn-iris-predictor-00001-deployment-857f9bb56c-vg8tf   2/2     Running     0          51m
    3. 次のコマンドを実行して、テスト結果ログを表示します。

      kubectl logs load-testxhwtq-pj9fq # Pod 名を、ストレステスト用にデプロイしたアプリケーションが実行されている Pod の名前に置き換えます。

      予期される出力:

      Requests      [total, rate, throughput]         30000, 500.02, 500.01
      Duration      [total, attack, wait]             59.999s, 59.998s, 1.352ms
      Latencies     [min, mean, 50, 90, 95, 99, max]  1.196ms, 1.463ms, 1.378ms, 1.588ms, 1.746ms, 2.99ms, 18.873ms
      Bytes In      [total, mean]                     690000, 23.00
      Bytes Out     [total, mean]                     2460000, 82.00
      Success       [ratio]                           100.00%
      Status Codes  [code:count]                      200:30000
      Error Set:

参考資料