KServe は、モデルサービスのパフォーマンスおよび健全性を監視するためのデフォルトの Prometheus メトリックを公開します。本トピックでは、scikit-learn を使用した InferenceService を Prometheus モニタリング有効化状態でデプロイし、推論トラフィックを生成して、ARMS で収集されたメトリックをクエリする手順について説明します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Arena クライアントのバージョンが 0.9.15 以降であること。詳細については、「Arena クライアントの設定」をご参照ください。
ack-kserve コンポーネントがインストール済みであること。詳細については、「ack-kserve コンポーネントのインストール」をご参照ください。
Alibaba Cloud Prometheus モニタリングが有効化されていること。詳細については、「Alibaba Cloud Prometheus モニタリングの有効化」をご参照ください。
ステップ 1:KServe アプリケーションのデプロイ
scikit-learn 向け KServe アプリケーションをデプロイします。
リソース タイプ 説明 sklearn-iris-metric-svcKubernetes Service ポート 8080 でメトリック エンドポイントを公開します sklearn-irisKServe InferenceService モデルサービング用リソースです sklearn-iris-svcmonitorServiceMonitor sklearn-iris-metric-svcarena serve kserve \ --name=sklearn-iris \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/ai-sample/kserve-sklearn-server:v0.12.0 \ --cpu=1 \ --memory=200Mi \ --enable-prometheus=true \ --metrics-port=8080 \ "python -m sklearnserver --model_name=sklearn-iris --model_dir=/models --http_port=8080"--enable-prometheus=trueフラグにより、以下のリソースが作成されます。想定される出力:
service/sklearn-iris-metric-svc created inferenceservice.serving.kserve.io/sklearn-iris created servicemonitor.monitoring.coreos.com/sklearn-iris-svcmonitor created INFO[0004] The Job sklearn-iris has been submitted successfully INFO[0004] You can run `arena serve get sklearn-iris --type kserve -n default` to check the job status以下の内容で
./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] ] } EOFNGINX Ingress ゲートウェイの IP アドレスおよび InferenceService のホスト名を取得します。
NGINX_INGRESS_IP=`kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}'` SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -o jsonpath='{.status.url}' | cut -d "/" -f 3)Hey ストレステストツールを使用して推論トラフィックを生成します。
hey -z 2m -c 20 -m POST -host $SERVICE_HOSTNAME -H "Content-Type: application/json" -D ./iris-input.json http://${NGINX_INGRESS_IP}:80/v1/models/sklearn-iris:predict想定される出力:
(任意)ARMS でのクエリ実行前に、Pod からメトリックが正しく公開されているかを検証します。Pod はポート 8080 でメトリックを公開していますが、クラスター外部からはアクセスできません。ローカル環境でアクセスするには、ポート フォワーディングを使用します。
メトリック タイプ ラベル 説明 request_preprocess_secondsヒストグラム model_name各リクエストの前処理遅延時間 request_predict_secondsヒストグラム model_name各リクエストの予測遅延時間 request_postprocess_secondsヒストグラム model_name各リクエストの後処理遅延時間 request_explain_secondsヒストグラム model_name説明リクエストの遅延時間 model_nameラベルにより、同一クラスター内で複数のモデルが実行されている場合でも、モデルごとにメトリックをフィルターおよび集計できます。# Pod 名を取得 POD_NAME=`kubectl get po|grep sklearn-iris |awk -F ' ' '{print $1}'` # Pod のポート 8080 をローカルホストに転送 kubectl port-forward pod/$POD_NAME 8080:8080想定される出力:
Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080ブラウザで
http://localhost:8080/metricsを開き、生のメトリックを確認します。KServe は以下のメトリックを公開します。
ステップ 2:KServe アプリケーションのメトリックのクエリ
ARMS コンソール にログインします。
左側ナビゲーションウィンドウで、統合管理 をクリックし、次に クエリダッシュボード をクリックします。
ダッシュボード一覧 ページで、Kubernetes Pod ダッシュボードをクリックして Grafana ページを開きます。
左側ナビゲーションウィンドウで、Explore をクリックします。アプリケーションのメトリック値をクエリするには、以下の検索文を入力します。
トラフィック生成後、データ収集には約 5 分の遅延があります。
request_predict_seconds_bucket
よくある質問
質問
request_predict_seconds_bucket のメトリックが正しく収集されているかを確認するにはどうすればよいですか?
ソリューション
ARMS におけるスクレイプ対象のステータスを確認します。
ARMS コンソール にログインします。
左側ナビゲーションウィンドウで、統合管理 をクリックします。統合済み環境 ページで、Container Service タブをクリックし、ご利用のクラスター名をクリックします。その後、セルフモニタリング タブをクリックします。
左側ナビゲーションウィンドウで、Targets をクリックします。
default/sklearn-iris-svcmonitor/0 (1/1 up)が一覧表示されていれば、メトリック収集は正常に動作しています。