1.11. 关于查询您的 AI 模型


通过 API 查询您的模型也称为模型推断。Model inferencing 最常用于检索信息、自动化任务、进行预测、提供数据分析或执行操作。

通常,必须使用与正在使用的 AI 模型的格式来构建查询。模型服务运行时格式查询会自动进行。该模型根据底层培训和数据处理查询,然后提供一个输出。输出应该与模型本身的目的一致,无论是要提供答案、进行预测或执行任务。

以下示例概述了确保您的模型准备推断出来的常规步骤,以及在服务运行时查询输出中可能预期的内容。

1.11.1. 验证您的 AI 模型是否可以访问

在通过 API 查询模型前,您可以检查该模型可以访问并准备好根据连接的数据提供答案。以下示例继续使用 OpenVINO Model Server。

先决条件

  • 您已配置了 AI 模型-serving 运行时。
  • 将 AI 模型上传到 MicroShift。
  • MicroShift 集群正在运行。
  • 已安装 OpenShift CLI (oc)。

流程

  1. 获取 MicroShift 集群的 IP 地址,并将其分配给 IP 变量,如下例所示:

    $ IP=$(oc get nodes -o json | jq -r '.items[0].status.addresses[0].address')
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令识别您创建的路由的名称:

    $ oc get route -n ai-test <route_name> -o yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <route_name > 替换为路由的实际名称。
  3. 运行以下命令,将路由的 HOST 值提取并分配给 DOMAIN 变量:

    DOMAIN=$(oc get route -n ai-test <route_name> -o=jsonpath="{ .status.ingress[0].host }") 
    1
    Copy to Clipboard Toggle word wrap
    1
    <route_name > 替换为路由的实际名称。
  4. 运行以下命令,启用从路由到 MicroShift IP 地址的数据传输:

    $ curl -i "${DOMAIN}/v2/models/ovms-resnet50/ready" --connect-to "${DOMAIN}::${IP}:" 
    1
    Copy to Clipboard Toggle word wrap
    1
    除了使用 "${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
    Copy to Clipboard Toggle word wrap

  5. 运行以下命令来查询模型元数据:

    $ curl "${DOMAIN}/v2/models/ovms-resnet50" --connect-to "${DOMAIN}::${IP}:"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"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 Toggle word wrap

后续步骤

  • 验证您的模型是否已准备好推断。
  • 查询模型。
  • 验证模型响应。
  • 可选:获取模型服务器指标。

1.11.2. 将您的 AI 模型随时用于推测

在通过 API 查询 AI 模型之前,请先获得模型,以便根据培训数据提供答案。以下示例继续使用 OVMS 模型。

先决条件

  • MicroShift 集群正在运行。
  • 您有 xxd 工具,它是 vim-common 软件包的一部分。
  • 已配置了模型运行时。
  • 将 AI 模型上传到 MicroShift。

流程

  1. 运行以下命令,从 OpenVINO Model Server 示例下载 bee 的镜像:

    $ curl -O https://raw.githubusercontent.com/openvinotoolkit/model_server/main/demos/common/static/images/bee.jpeg
    Copy to Clipboard Toggle word wrap
  2. 通过运行以下命令来创建请求数据:

    IMAGE=./bee.jpeg
    REQ=./request.json
    
    # Add an inference header
    echo -n '{"inputs" : [{"name": "0", "shape": [1], "datatype": "BYTES"}]}' > "${REQ}"
    # Get the size of the inference header 
    1
    
    HEADER_LEN="$(stat -c %s "${REQ}")"
    # Add size of the data (image) in binary format (4 bytes, little endian) 
    2
    
    printf "%08X" $(stat --format=%s "${IMAGE}") | sed 's/\(..\)/\1\n/g' | tac | tr -d '\n' | xxd -r -p >> "${REQ}"
    # Add the data, that is, append the image to the request file
    cat "${IMAGE}" >> "${REQ}"
    Copy to Clipboard Toggle word wrap
    1
    稍后必须将 inference 标头大小传给 OpenVINO Model Server,格式为 HTTP 标头。
    2
    OpenVINO Model Server 需要 4 字节(min endian)字节顺序。

1.11.3. 查询您的 AI 模型

对使用 ovms-resnet50 模型的 AI 模型服务器发出 inference 请求。

先决条件

  • MicroShift 集群正在运行。
  • 已配置了模型运行时。
  • 将 AI 模型上传到 MicroShift。

流程

  • 运行以下命令,针对使用 ovms-resnet50 模型的模型服务器发出 inference 请求:

    $ curl \
        --data-binary "@./request.json" \
        --header "Inference-Header-Content-Length: ${HEADER_LEN}" \
        "${DOMAIN}/v2/models/ovms-resnet50/infer" \
        --connect-to "${DOMAIN}::${IP}:" > response.json
    Copy to Clipboard Toggle word wrap

    延迟输出示例,保存到 response.json

    {
        "model_name": "ovms-resnet50",
        "model_version": "1",
        "outputs": [{
                "name": "1463",
                "shape": [1, 1000],
                "datatype": "FP32",
                "data": [ ....... ] 
    1
    
            }]
    }
    Copy to Clipboard Toggle word wrap

    1
    示例中省略了 .outputs[0].data 的内容,如 brevity。

验证

  1. 要确定模型的预测,请使用以下 Python 脚本获取 .outputs[0].data 中最高元素的索引,以确定模型的预测值:

    import json
    with open('response.json') as f:
        response = json.load(f)
    data = response["outputs"][0]["data"]
    argmax = data.index(max(data))
    print(argmax)
    Copy to Clipboard Toggle word wrap

    输出示例

    309 
    1
    Copy to Clipboard Toggle word wrap

    1
    在本例中,标记为 309 的元素是模型的响应。
  2. 验证针对 resnet 的输入数据 的输出,例如:

    ../../../../demos/common/static/images/bee.jpeg 309
    Copy to Clipboard Toggle word wrap

后续步骤

  • 可选。使用 resnet 输入数据中提供的其他镜像查询 AI 模型。

1.11.4. 获取 model-server 指标

在进行查询后,您可以获取模型服务器的指标来识别瓶颈、优化资源分配并确保高效的基础架构利用率。

注意

您还可以为 MicroShift 配置 Open Telemetry 来获取 model-server 指标。如需更多信息,请参阅"将 Open Telemetry 添加到 InferenceService 自定义资源"。

先决条件

  • MicroShift 集群正在运行。
  • 有足够的查询来提供您要查看的指标数据。

流程

  • 运行以下命令,在 /metrics 端点上发出请求来获取模型服务器的 Prometheus-format 指标:

    $ curl "${DOMAIN}/metrics" --connect-to "${DOMAIN}::${IP}:"
    Copy to Clipboard Toggle word wrap

    输出部分示例

    # 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"} 1
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat