ACK Knative 上で KServe を使用して、AI モデルをサーバーレス推論サービスとしてデプロイします。これにより、自動スケーリング、マルチバージョン管理、および段階的リリースが実現されます。
ステップ 1:KServe アドオンのインストールと構成
Knative の ALB ゲートウェイ または Kourier ゲートウェイ と KServe をシームレスに統合するには、まず KServe アドオンをインストールします。その後、そのデフォルト設定を更新して、組み込みの Istio 仮想サービスを無効化します。
-
KServe アドオンをインストールします。
Container Service Management Console にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
アドオン管理 タブの アドオンコンポーネント セクションに移動し、KServe アドオンを検索してデプロイします。
-
Istio VirtualHost を無効化します。
inferenceservice-configConfigMap を編集し、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 -
構成を確認します。
kubectl get configmap inferenceservice-config -n kserve -o yaml \ | grep '"disableIstioVirtualHost":' \ | tail -n1 \ | awk -F':' '{gsub(/[ ,]/,"",$2); print $2}'出力が
trueの場合、構成が更新されています。 -
変更を適用するために KServe コントローラーを再起動します。
kubectl rollout restart deployment kserve-controller-manager -n kserve
ステップ 2:InferenceService のデプロイ
この例では、Iris データセットでトレーニングされた scikit-learn 分類モデルをデプロイします。このモデルは、順に 4 つの花の測定値を受け取り、花のクラスを予測します。
|
入力:順に並んだ 4 つの数値特徴量:
|
出力:予測されたクラスのインデックス:
|
-
推論サービスをデプロイするための 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" -
InferenceService をデプロイします。
kubectl apply -f inferenceservice.yaml -
サービスのステータスを確認します。
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:サービスへのアクセス
クラスターのイングレスゲートウェイを介して、サービスに推論リクエストを送信します。
-
Knative ページで、サービス管理 タブに移動します。ゲートウェイ のアドレスとサービスの デフォルトドメイン を取得します。これらの情報を使ってサービスにアクセスします。
以下の図は ALB ゲートウェイを示しています。Kourier ゲートウェイのインターフェイスも同様です。

-
リクエストデータを準備します。
ローカル端末で、
./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 -
ローカル端末からサービスに推論リクエストを送信します。
${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 のままです。トラブルシューティング方法を教えてください。
以下の手順に従ってください:
-
kubectl describe inferenceservice <yourServiceName>を実行し、Events を確認してエラーメッセージを探します。 -
kubectl get podsを実行し、このサービスに関連する Pod(通常はサービス名に基づいて命名)がErrorまたはCrashLoopBackOff状態になっていないか確認します。 -
Pod のステータスが異常な場合、
kubectl logs <pod-name> -c kserve-containerを実行して、モデルサービスコンテナのログを確認します。モデルの読み込み失敗(例:モデルダウンロードを妨げるネットワークエラー、不正なモデルファイルフォーマットなど)がないかチェックします。
独自にトレーニングしたモデルをデプロイするにはどうすればよいですか?
モデルファイルを OSS バケットにアップロードします。InferenceService を作成する際、spec.predictor.model.storageUri をモデルファイルの URI に設定します。また、モデルフレームワークに応じて modelFormat を適切に設定します(例: tensorflow、pytorch、onnx)。
モデルサービスに GPU リソースを割り当てるにはどうすればよいですか?
モデルの推論に GPU が必要な場合、InferenceService の YAML ファイル内の predictor セクションに resources フィールドを追加して、GPU リソースを要求します。例:
Knative における GPU リソースの利用について詳しくは、「GPU リソースの利用」をご参照ください。
spec:
predictor:
resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"
参考文献
-
Knative 上での AI モデル推論サービスのデプロイについては、「Knative における AI モデル推論サービスのデプロイに関するベストプラクティス」を参照して、構成のヒントを得られます。
-
ACK Knative には Stable Diffusion アプリケーションテンプレートが提供されています。「Knative を使用した本番運用レベルの Stable Diffusion サービスのデプロイ」をご参照ください。