KServe は、モデルサービスのパフォーマンスと正常性を監視するのに役立つ、デフォルトの Prometheus メトリックのセットを提供します。このトピックでは、NVIDIA V100 GPU 上の Qwen-7B-Chat-Int8 モデルを例として、KServe フレームワークの Prometheus モニタリングを設定する方法を説明します。
前提条件
Arena クライアントバージョン 0.9.15 以降がインストールされていること。詳細については、「Arena クライアントの設定」をご参照ください。
ack-kserve コンポーネントがインストールされていること。詳細については、「ack-kserve コンポーネントのインストール」をご参照ください。
Alibaba Cloud Prometheus モニタリングコンポーネントが有効になっていること。詳細については、「Alibaba Cloud Prometheus モニタリングの有効化」をご参照ください。
ステップ 1: KServe アプリケーションのデプロイ
次のコマンドを実行して、Scikit-learn 用の KServe アプリケーションをデプロイします。
arena 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"期待される出力:
service/sklearn-iris-metric-svc created # sklearn-iris-metric-svc という名前のサービスが作成されます。 inferenceservice.serving.kserve.io/sklearn-iris created # KServe InferenceService リソース sklearn-iris が作成されます。 servicemonitor.monitoring.coreos.com/sklearn-iris-svcmonitor created # Prometheus モニタリングシステムと統合し、sklearn-iris-metric-svc サービスによって公開されたモニタリングデータを収集するために、ServiceMonitor リソースが作成されます。 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この出力は、Arena が scikit-learn モデルを使用する KServe サービスのデプロイメントを正常に開始し、Prometheus モニタリングを統合したことを示しています。
次のコマンドを実行して、次の 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次のコマンドを実行して、NGINX Ingress ゲートウェイの IP アドレスと InferenceService URL のホスト名をクラスターから取得します。
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 ストレステストツールの詳細については、「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期待される出力:
この出力は、テスト中のシステムのパフォーマンスを要約したものです。処理速度、データスループット、応答レイテンシーなどの主要なメトリックが含まれています。この情報は、システムの効率と安定性を評価するのに役立ちます。
(オプション) アプリケーションメトリックを手動で取得して、正しく公開されていることを確認します。
次の手順では、ACK クラスター内の
sklearn-irisに関連する特定の Pod からモニタリングメトリックを収集し、ローカルホストでデータを表示する方法について説明します。Pod にログインしたり、Pod のポートを外部ネットワークに公開したりする必要はありません。次のコマンドを実行して、名前に `sklearn-iris` を含む Pod のポート 8080 をローカルホストのポート 8080 に転送します。Pod 名は
$POD_NAME変数で指定されます。ローカルホストのポート 8080 に送信されたリクエストは、Pod のポート 8080 に透過的に転送されます。# Pod 名を取得します。 POD_NAME=`kubectl get po|grep sklearn-iris |awk -F ' ' '{print $1}'` # port-forward を使用して、Pod のポート 8080 をローカルホストに転送します。 kubectl port-forward pod/$POD_NAME 8080:8080期待される出力:
Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080この出力は、IPv4 と IPv6 の両方を通じたローカルホストへの接続が、Pod のポート 8080 に正しく転送されていることを示しています。
ブラウザで次の URL を入力して、Pod のポート 8080 にアクセスし、メトリックを表示します。
http://localhost:8080/metrics期待される出力:
この出力には、Pod 内のアプリケーションからのさまざまなパフォーマンスおよびステータスメトリックが表示されます。これにより、リクエストが Pod 内のアプリケーションサービスに正常に転送されたことが確認されます。
ステップ 2: KServe アプリケーションメトリックのクエリ
ARMS コンソールにログインします。
左側のナビゲーションウィンドウで、[プロビジョニング] をクリックし、次に [ダッシュボードのクエリ] をクリックします。
[ダッシュボードリスト] ページで、[Kubernetes Pod] ダッシュボードをクリックして Grafana ページに移動します。
左側のナビゲーションウィンドウで、[Explore] をクリックします。検索文
request_predict_seconds_bucketを入力して、アプリケーションのメトリック値をクエリします。説明データ収集には約 5 分の遅延があります。

よくある質問と解決策
よくある質問
request_predict_seconds_bucket メトリックのデータが正常に収集されたことを確認するにはどうすればよいですか?
解決策
ARMS コンソールにログインします。
[プロビジョニングされた環境] ページで、[コンテナー環境] タブをクリックします。ターゲットコンテナー環境の名前をクリックし、次に [自己監視] タブをクリックします。
左側のナビゲーションウィンドウで、[ターゲット] をクリックします。「default/sklearn-iris-svcmonitor/0 (1/1 up)」が表示されている場合、メトリックデータは正常に収集されています。
参考資料
KServe フレームワークが提供するデフォルトのメトリックの詳細については、KServe コミュニティドキュメント「KServe Prometheus メトリック」をご参照ください。