1.11. AI モデルのクエリーについて
API を介してモデルをクエリーすることは、モデル推論とも呼ばれます。モデル推論は、情報の取得、タスクの自動化、予測の作成、データの洞察の提供、アクションの実行に最もよく使用されます。
一般に、クエリーは、使用されている AI モデルと互換性のある形式を使用して構築する必要があります。モデルサービングランタイムは、クエリーを自動的にフォーマットします。モデルは、基礎となるトレーニングとデータに従ってクエリーを処理し、出力を提供します。出力は、回答を提供すること、予測を行うこと、またはタスクを実行することなど、モデル自体の目的と一致することが期待されます。
次の例では、モデルが推論の準備ができていることを確認するための一般的な手順と、サービスランタイムからのクエリー出力に何が期待できるかを説明します。
1.11.1. AI モデルがアクセス可能であることを確認する リンクのコピーリンクがクリップボードにコピーされました!
API を介してモデルをクエリーする前に、モデルがアクセス可能であり、接続されたデータに基づいて回答を提供する準備ができていることを確認できます。次の例は、OpenVINO Model Server を引き続き使用します。
前提条件
- AI モデルサービングランタイムを設定している。
- AI モデルを MicroShift にアップロードしている。
- MicroShift が実行されています。
-
OpenShift CLI (
oc) がインストールされている。
手順
MicroShift ノードの IP アドレスを取得し、それを
IP変数に割り当てます。以下に例を示します。IP=$(oc get nodes -o json | jq -r '.items[0].status.addresses[0].address')
$ IP=$(oc get nodes -o json | jq -r '.items[0].status.addresses[0].address')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、作成したルートの名前を特定します。
oc get route -n ai-test <route_name> -o yaml
$ oc get route -n ai-test <route_name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<route_name>は、実際のルートの名前に置き換えます。
次のコマンドを実行して、ルートの
HOST値を抽出し、DOMAIN変数に割り当てます。DOMAIN=$(oc get route -n ai-test <route_name> -o=jsonpath="{ .status.ingress[0].host }")DOMAIN=$(oc get route -n ai-test <route_name> -o=jsonpath="{ .status.ingress[0].host }")1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<route_name>は、実際のルートの名前に置き換えます。
次のコマンドを実行して、ルートから MicroShift IP アドレスへのデータ転送を有効にします。
curl -i "${DOMAIN}/v2/models/ovms-resnet50/ready" --connect-to "${DOMAIN}::${IP}:"$ curl -i "${DOMAIN}/v2/models/ovms-resnet50/ready" --connect-to "${DOMAIN}::${IP}:"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--connect-to "${DOMAIN}::${IP}:"フラグを使用する代わりに、実際の DNS を使用することも、IP アドレスとドメインを/etc/hostsファイルに追加することもできます。
出力例
HTTP/1.1 200 OK content-type: application/json date: Wed, 12 Mar 2025 16:01:32 GMT content-length: 0 set-cookie: 56bb4b6df4f80f0b59f56aa0a5a91c1a=4af1408b4a1c40925456f73033d4a7d1; path=/; HttpOnly
HTTP/1.1 200 OK content-type: application/json date: Wed, 12 Mar 2025 16:01:32 GMT content-length: 0 set-cookie: 56bb4b6df4f80f0b59f56aa0a5a91c1a=4af1408b4a1c40925456f73033d4a7d1; path=/; HttpOnlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、モデルのメタデータをクエリーします。
curl "${DOMAIN}/v2/models/ovms-resnet50" --connect-to "${DOMAIN}::${IP}:"$ curl "${DOMAIN}/v2/models/ovms-resnet50" --connect-to "${DOMAIN}::${IP}:"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"name":"ovms-resnet50","versions":["1"],"platform":"OpenVINO","inputs":[{"name":"0","datatype":"FP32","shape":[1,224,224,3]}],"outputs":[{"name":"1463","datatype":"FP32","shape":[1,1000]}]{"name":"ovms-resnet50","versions":["1"],"platform":"OpenVINO","inputs":[{"name":"0","datatype":"FP32","shape":[1,224,224,3]}],"outputs":[{"name":"1463","datatype":"FP32","shape":[1,1000]}]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
- モデルが推論の準備ができていることを確認します。
- モデルをクエリーします。
- モデルの応答を検証します。
- オプション: モデルサーバーのメトリクスを取得します。
1.11.2. AI モデルを推論用に準備する リンクのコピーリンクがクリップボードにコピーされました!
API を介して AI モデルをクエリーする前に、トレーニングデータに基づいて回答を提供できるようにモデルを準備します。次の例は、OVMS モデルを引き続き使用します。
前提条件
- MicroShift が実行されています。
-
vim-commonパッケージの一部であるxxdユーティリティーがある。 - モデルサービングランタイムを設定している。
- AI モデルを MicroShift にアップロードしている。
手順
次のコマンドを実行して、OpenVINO Model Server の例からハチのイメージをダウンロードします。
curl -O https://raw.githubusercontent.com/openvinotoolkit/model_server/main/demos/common/static/images/bee.jpeg
$ curl -O https://raw.githubusercontent.com/openvinotoolkit/model_server/main/demos/common/static/images/bee.jpegCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のスクリプトを実行して、リクエストデータを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.11.3. AI モデルのクエリー リンクのコピーリンクがクリップボードにコピーされました!
ovms-resnet50 モデルを使用している AI モデルサーバーに対して推論リクエストを行います。
前提条件
- MicroShift が実行されています。
- モデルサービングランタイムを設定している。
- AI モデルを MicroShift にアップロードしている。
手順
次のコマンドを実行して、
ovms-resnet50モデルを使用しているモデルサーバーに対して推論リクエストを行います。curl \ --data-binary "@./request.json" \ --header "Inference-Header-Content-Length: ${HEADER_LEN}" \ "${DOMAIN}/v2/models/ovms-resnet50/infer" \ --connect-to "${DOMAIN}::${IP}:" > response.json$ curl \ --data-binary "@./request.json" \ --header "Inference-Header-Content-Length: ${HEADER_LEN}" \ "${DOMAIN}/v2/models/ovms-resnet50/infer" \ --connect-to "${DOMAIN}::${IP}:" > response.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow response.jsonに保存された推論出力の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 簡潔にするために、
.outputs[0].dataの内容は例では省略されています。
検証
モデルの予測を決定するには、次の Python スクリプトを使用して、
.outputs[0].data内の最高要素のインデックスを取得し、モデルの予測値を決定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
309
3091 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、
309というラベルの付いた要素がモデルの応答です。
出力を resnet 入力データ に対して検証します。以下に例を示します。
../../../../demos/common/static/images/bee.jpeg 309
../../../../demos/common/static/images/bee.jpeg 309Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
- オプション: resnet 入力データで利用可能な他のイメージを使用して AI モデルをクエリーします。
1.11.4. モデルサーバーのメトリクスを取得する リンクのコピーリンクがクリップボードにコピーされました!
クエリーを実行した後、モデルサーバーのメトリクスを取得して、ボトルネックの特定、リソース割り当ての最適化、そして効率的なインフラ利用の確保を行うことができます。
または、MicroShift の Open Telemetry を設定して、モデルサーバーのメトリクスを取得することもできます。詳細は、「InferenceService カスタムリソースへの Open Telemetry の追加」を参照してください。
前提条件
- MicroShift が実行されています。
- 表示したいメトリクスデータを提供するのに十分なクエリーが行われました。
手順
次のコマンドを実行して、
/metricsエンドポイントにリクエストを送信し、モデルサーバーの Prometheus 形式のメトリクスを取得します。curl "${DOMAIN}/metrics" --connect-to "${DOMAIN}::${IP}:"$ curl "${DOMAIN}/metrics" --connect-to "${DOMAIN}::${IP}:"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部分的な出力例
HELP ovms_requests_success Number of successful requests to a model or a DAG. TYPE ovms_requests_success counter
# HELP ovms_requests_success Number of successful requests to a model or a DAG. # TYPE ovms_requests_success counter ovms_requests_success{api="KServe",interface="REST",method="ModelReady",name="ovms-resnet50"} 4 ovms_requests_success{api="KServe",interface="REST",method="ModelMetadata",name="ovms-resnet50",version="1"} 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow