KServe は、モデルサービスのパフォーマンスと正常性を監視するためのデフォルトの Prometheus メトリックセットを提供します。このトピックでは、V100 GPU 上の Qwen-7B-Chat-Int8 モデルを例として、KServe フレームワークの Prometheus モニタリングを設定する方法について説明します。
前提条件
-
Arena クライアントのバージョン 0.9.15 以降がインストールされていること。詳細については、「Arena クライアントの設定」をご参照ください。
-
ack-kserve コンポーネントがインストールされていること。
-
Alibaba Cloud Prometheus モニタリングコンポーネントが有効になっていること。詳細については、「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 # ジョブ sklearn-iris は正常に送信されました INFO[0004] You can run `arena serve get sklearn-iris --type kserve -n default` to check the job status # `arena serve get sklearn-iris --type kserve -n default` を実行してジョブのステータスを確認できますこの出力は、Arena が Prometheus モニタリングを統合した scikit-learn モデルを使用して、KServe サービスを正常にデプロイしたことを示しています。
-
次のコマンドを実行して、推論入力を
./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 のホスト名を取得します。
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 (
$POD_NAME変数で指定) のポート 8080 を、ローカルホストのポート 8080 に転送します。これにより、ローカルポート 8080 に送信されたリクエストは、Pod のポート 8080 に透過的に転送されます。# 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この出力は、ローカルホストへの 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メトリックの時系列の折れ線グラフが表示されます。
よくある質問
質問
request_predict_seconds_bucket メトリックのデータが正常に収集されたことを確認するにはどうすればよいですか?
ソリューション
-
ARMS コンソールにログインします。
-
[接続済み環境] の [コンテナサービス] タブで、ターゲットコンテナ環境名をクリックし、次に [自己監視] タブをクリックします。
-
左側のナビゲーションウィンドウで、[ターゲット] をクリックします。
default/sklearn-iris-svcmonitor/0 (1/1 up)が表示されていれば、メトリックデータが正常に収集されたことを示します。
関連ドキュメント
KServe フレームワークが提供するデフォルトのメトリックの詳細については、コミュニティドキュメント「KServe Prometheus Metrics」をご参照ください。