ACK Knative または で KServe を使用して、AI モデルをサーバーレス推論サービスとしてデプロイできます。これにより、オートスケーリング、バージョニング、カナリアリリースなどの機能を実現できます。
ステップ 1: KServe アドオンのインストールと設定
KServe を Knative の ALB イングレス または Kourier ゲートウェイ とシームレスに統合するには、まず KServe アドオンをインストールする必要があります。その後、デフォルト設定を変更して、組み込みの Istio VirtualService を無効にします。
-
KServe アドオンをインストールします。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
アドオン管理 タブの アドオンコンポーネント セクションで、KServe アドオンを見つけてデプロイします。
-
Istio VirtualService の作成を無効にします。
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: # モデルのフォーマット。この場合は 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 ゲートウェイの ゲートウェイ と、サービスの デフォルトドメイン を取得します。
この例では ALB イングレスを使用します。Kourier ゲートウェイのユーザーインターフェースも同様です。
ページの上部に、[ゲートウェイアドレス] (
alb-xxx.aliyuncsslb.comなど) が表示されます。サービスリストで、sklearn-iris-predictor のステータスが [成功] であり、その [デフォルトドメイン名] がsklearn-iris-predictor.default.example.comであることを確認します。 -
リクエストデータを準備します。
ローカルターミナルで、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 -
ローカルターミナルで、推論リクエストを送信してサービスにアクセスします。
${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 状態の場合
問題をトラブルシューティングするには:
-
kubectl describe inferenceservice <yourServiceName>を実行し、イベントでエラーメッセージを確認します。 -
kubectl get podsを実行して、サービスに関連付けられた Pod がErrorまたはCrashLoopBackOff状態になっていないか確認します。これらの Pod の名前は通常、サービス名で始まります。 -
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"
関連ドキュメント
-
Knative で AI モデル推論サービスをデプロイする際の推奨設定については、「Knative で AI モデル推論サービスをデプロイするためのベストプラクティス」をご参照ください。
-
ACK Knative は、Stable Diffusion 用のアプリケーションテンプレートを提供します。詳細については、「Knative を使用して本番環境向け Stable Diffusion サービスをデプロイする」をご参照ください。