上で KServe を使用して、AI モデルをサーバーレスの推論サービスとしてデプロイできます。これにより、オートスケーリング、マルチバージョン管理、カナリアリリースなどの主要な機能が提供されます。
前提条件
KServe コンポーネントをデプロイする必要があります。詳細については、「KServe コンポーネントのデプロイ」をご参照ください。
ステップ1:InferenceService のデプロイ
まず、予測機能を備えた InferenceService をデプロイします。このサービスは、Iris データセットでトレーニングされた scikit-learn モデルを使用します。データセットには、Iris Setosa (インデックス:0)、Iris Versicolour (インデックス:1)、Iris Virginica (インデックス:2) の 3 つの出力クラスがあります。その後、デプロイされたモデルに推論リクエストを送信して、対応するアヤメのクラスを予測できます。
Iris データセットは、3 種類のアヤメの花それぞれについて 50 のデータポイントで構成されています。各サンプルには、がく片と花びらの長さと幅という 4 つの特徴量が含まれています。
次のコマンドを実行して、sklearn-iris という名前の InferenceService を作成します。
kubectl apply -f - <<EOF 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" EOF次のコマンドを実行して、サービスステータスを確認します。
kubectl get inferenceservices sklearn-iris想定される出力:
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
ステップ2:サービスへのアクセス
IP アドレスとアクセス方法は、サービスゲートウェイによって異なります。ご利用のゲートウェイに適した方法を選択してください。
ALB
次のコマンドを実行して、Application Load Balancer (ALB) エンドポイントを取得します。
kubectl get albconfig knative-internet想定される出力:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE knative-internet alb-hvd8nngl0l******* alb-hvd8nngl0l******.cn-<region>.alb.aliyuncs.com 2次のコマンドを実行して、次の JSON コンテンツを
./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=$(kubectl get albconfig knative-internet -o jsonpath='{.status.loadBalancer.dnsname}') SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -o jsonpath='{.status.url}' | cut -d "/" -f 3) curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_DOMAIN}/v1/models/sklearn-iris:predict" -d @./iris-input.json想定される出力:
* Trying 120.77.XX.XX... * TCP_NODELAY set * Connected to alb-hvd8nngl0l******.cn-<region>.alb.aliyuncs.com (120.77.XX.XX) port 80 (#0) > POST /v1/models/sklearn-iris:predict HTTP/1.1 > Host: sklearn-iris-predictor-default.default.example.com > User-Agent: curl/7.58.0 > Accept: */* > Content-Length: 76 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 76 out of 76 bytes < HTTP/1.1 200 OK < Date: Thu, 13 Jul 2023 01:48:44 GMT < Content-Type: application/json < Content-Length: 21 < Connection: keep-alive < * Connection #0 to host alb-hvd8nngl0l******.cn-<region>.alb.aliyuncs.com left intact {"predictions":[1,1]}出力は
{"predictions":[1,1]}です。これは、推論のために送信された 2 つのデータポイントについて、モデルが両方の花を Iris Versicolour (インデックス 1) であると予測したことを示します。
Kourier
次のコマンドを実行して、Kourier サービスのエンドポイントを取得します。
kubectl -n knative-serving get svc kourier想定される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 192.168.XX.XX 121.40.XX.XX 80:31158/TCP,443:32491/TCP 49mサービスのアクセス IP アドレスは
121.40.XX.XXで、ポートは 80 (HTTP) と 443 (HTTPS) です。次のコマンドを実行して、次の JSON コンテンツを
./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_HOST=$(kubectl -n knative-serving get service kourier -o jsonpath='{.status.loadBalancer.ingress[0].ip}') SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -o jsonpath='{.status.url}' | cut -d "/" -f 3) curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_HOST}/v1/models/sklearn-iris:predict" -d @./iris-input.json想定される出力:
* Trying 121.40.XX.XX... * TCP_NODELAY set * Connected to 121.40.XX.XX (121.40.XX.XX) port 80 (#0) > POST /v1/models/sklearn-iris:predict HTTP/1.1 > Host: sklearn-iris-predictor-default.default.example.com > User-Agent: curl/7.58.0 > Accept: */* > Content-Length: 76 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 76 out of 76 bytes < HTTP/1.1 200 OK < content-length: 21 < content-type: application/json < date: Wed, 12 Jul 2023 08:23:13 GMT < server: envoy < x-envoy-upstream-service-time: 4 < * Connection #0 to host 121.40.XX.XX left intact {"predictions":[1,1]}出力は
{"predictions":[1,1]}です。これは、推論のために送信された 2 つのデータポイントについて、モデルが両方の花を Iris Versicolour (インデックス 1) であると予測したことを示します。