使用 AI 模型


Red Hat build of MicroShift 4.19

在 MicroShift 中使用 AI 模型

Red Hat OpenShift Documentation Team

摘要

了解如何在 MicroShift 边缘部署中提供智能(AI)模型。

了解如何在 MicroShift 边缘部署上提供智能和机器学习(AI/ML)模型。

重要

Red Hat OpenShift AI 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

1.1. Red Hat OpenShift AI 在 MicroShift 中的工作方式

边缘部署是数据的发生位置,需要做出决策。您可以使用 Red Hat OpenShift AI (Red Hat OpenShift AI Self-Managed)将 MicroShift 驱动的边缘设备集合集成到人工智能和机器学习(AI/ML)操作周期中。MicroShift 与基于 Kubernetes 的 KServe 组件的单一模型服务平台兼容。KServe 是一个编配模型服务的平台。

Red Hat OpenShift AI Self-Managed 是数据科学家和 AI/ML 应用程序开发人员的平台。首先,使用云或数据中心中的 Red Hat OpenShift AI Self-Managed 来开发、培训和测试 AI 模型。然后,在 MicroShift 上的边缘部署中运行您的模型。

部署 AI 模型后,应用程序数据可以发送到模型可在无需人工用户的情况下做出数据驱动决策的模型。这是与管理员交互的边缘应用程序的理想场景。

使用 KServe 实现
KServe 组件包括实现各种模型服务器的加载的模型运行时。这些运行时配置有自定义资源(CR)。KServe 自定义资源定义(CRD)还定义部署对象、存储访问和网络设置的生命周期。
使用 Red Hat OpenShift AI Self-Managed with MicroShift 的具体信息

作为边缘优化 Kubernetes 部署,MicroShift 在使用 Red Hat OpenShift AI Self-Managed 时有以下限制:

  • MicroShift 上的 AI 模型服务仅在 x86_64 架构中可用。
  • MicroShift 支持 Red Hat OpenShift AI Self-Managed Operator 组件的子集。
  • 作为单节点 Kubernetes 发行版本,MicroShift 不支持多型号部署。您必须使用单模式服务平台。
  • 您必须开发要在云或数据中心的 MicroShift 模型平台中运行的 AI 模型。不支持将 MicroShift 用作 AI 模型的开发平台。
  • 您必须计划提供 AI 模型所需的额外 RAM、磁盘空间和存储配置。
  • 不是所有模型服务器都支持 IPv6 网络协议。检查每个模型服务器的文档,以验证支持您的网络配置。
  • 您必须保护公开的模型服务器端点,例如使用 OAUTH2。
  • ClusterServingRuntimes CRD 不支持 Red Hat OpenShift AI Self-Managed,这意味着您必须将 microshift-ai-model-serving RPM 中提供的 ServingRuntime CR 复制到您的工作负载命名空间中。
  • 要在 MicroShift 上管理模型服务,您必须使用 CLI。不支持 Red Hat OpenShift AI Self-Managed 仪表板。

将 Red Hat OpenShift AI Self-Managed 与 MicroShift 搭配使用需要以下常规工作流:

将您的 AI 模型就绪
  • 选择最适合您的边缘应用程序的智能(AI)模型,以及在 MicroShift 部署站点上做出的决策。
  • 在云或数据中心,开发、培训和测试您的模型。
  • 计划系统要求,以及 AI 模型需要运行的额外资源。
设置部署环境
  • 为部署运行的特定硬件配置 Red Hat Device Edge,包括驱动程序和设备插件。
  • 要为 MicroShift 启用 GPU 或其他硬件加速器,请遵循与您的边缘设备相关的信息。例如,要使用 NVIDIA GPU 加速器,请先阅读以下 NVIDIA 文档: 在 Red Hat Device Edge 上运行 GPU 加速工作负载 (NVIDIA 文档)。
  • 如需故障排除,请参阅设备文档或产品支持。

    提示

    仅使用驱动程序和设备插件而不是 Operator 可能会提高资源效率。

安装 MicroShift Red Hat OpenShift AI Self-Managed RPM
  • 安装 microshift-ai-model-serving RPM 软件包。
  • 如果您要在 MicroShift 运行时添加 RPM,请重新启动 MicroShift。
准备部署
  • 将您的 AI 模型打包到 OCI 镜像中,否则称为 ModelCar 格式。如果您已经设置了 S3 兼容存储或持久性卷声明,您可以跳过这一步,但对 MicroShift 测试并支持 ModelCar 格式。
  • 选择一个模型运行时,该运行时充当您的模型服务器。使用服务运行时和 inference 服务配置运行时。

    • ServingRuntime 自定义资源(CR)从默认的 redhat-ods-applications 命名空间复制到您自己的命名空间中。
    • 创建 InferenceService CR。
  • 可选:创建一个 Route 对象,以便您的模型可以在集群外连接。
使用您的模型
  • 向模型服务器发出请求。例如,在附加到 camera 的 MicroShift 部署中运行的另一个 pod 可将镜像流传输回模型运行时。模型保留运行时将该镜像准备为模型推断的数据。如果该模式在一种情况的二进制识别中被培训,AI 模型会输出镜像数据的可能性。

1.3. 安装 Red Hat OpenShift AI RPM

要在 MicroShift 部署中使用 AI 模型,请使用以下步骤安装带有新的 MicroShift 安装的 Red Hat OpenShift AI (Red Hat OpenShift AI Self-Managed) RPM。如果重启系统,您还可以在现有 MicroShift 实例上安装 RPM。

重要

Red Hat OpenShift AI 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 满足安装 MicroShift 的系统要求。
  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。
  • 已使用工作负载 PV 所需的容量配置了 LVM VG。
  • 您有 AI 模型所需的 RAM 和磁盘空间。
  • 您已配置了所需的加速器、硬件、操作系统和 MicroShift,以提供模型所需的资源。
  • 您的 AI 模型可供使用。
注意

microshift-ai-model-serving RPM 包含用于部署 kserve、启用原始部署模式以及 redhat-ods-applications 命名空间中的 ServingRuntimes 对象的清单。

流程

  1. 运行以下命令安装 MicroShift AI-model-serving RPM 软件包:

    $ sudo dnf install microshift-ai-model-serving
    Copy to Clipboard Toggle word wrap
  2. 作为 root 用户,输入以下命令重启 MicroShift 服务:

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap
  3. 可选:运行以下命令来安装发行版本信息软件包:

    $ sudo dnf install microshift-ai-model-serving-release-info 
    1
    Copy to Clipboard Toggle word wrap
    1
    发行信息软件包包含一个 JSON 文件,其中包含镜像引用,有助于在 bootc 镜像构建过程中将 ServingRuntime 的副本部署到命名空间中。

验证

  • 输入以下命令验证 kserve pod 是否在 redhat-ods-applications 命名空间中运行:

    $ oc get pods -n redhat-ods-applications
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                        READY   STATUS    RESTARTS   AGE
    kserve-controller-manager-7fc9fc688-kttmm   1/1     Running   0          1h
    Copy to Clipboard Toggle word wrap

后续步骤

  • 为您的 AI 模型创建一个命名空间。
  • 将您的模型打包成 OCI 镜像。
  • 配置模型运行时。
  • 验证您的模型是否已准备好推断。
  • 向模型服务器发出请求。

为您的 AI 模型和所有其他资源创建一个命名空间。

先决条件

  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。

流程

  • 运行以下命令来创建新命名空间:

    $ oc create ns <namespace_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <namespace_name > 替换为您要使用的命名空间名称。在以下示例中使用了 ai-demo

验证

  • 运行以下命令验证您是否创建了所需的命名空间:

    $ oc get ns <namespace_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <namespace_name > 替换为您要使用的命名空间名称。在以下示例中使用了 ai-demo

    输出示例

    NAME                STATUS  AGE
    ai-demo   Active  1h
    Copy to Clipboard Toggle word wrap

1.5. 将您的 AI 模型打包到 OCI 镜像中

您可以将模型打包成 OCI 镜像,并使用 ModelCar 方法来帮助设置离线环境。使用 ModelCar 方法时,您的模型可以像任何其他容器镜像一样嵌入。

注意

如果您已经有 S3 兼容对象存储或配置的持久性卷声明,您可以将 AI 模型上传到这些资源,但只有 ModelCar 方法经过测试并被支持。

先决条件

  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。
  • podman 已安装。
  • 您的模型可以使用。
  • 您可以了解以下关于构建适合 vLLM 模型服务器的 OCI 镜像的"如何构建 ModelCar 容器"部分中的概念,并在 OpenShift AI 中构建和部署 ModelCar 容器

    注意

    确切的目录结构取决于模型服务器。以下示例使用一个与 OpenVINO Model Server OVMS 兼容的 ResNet-50 模型的 Containerfile。OVMS 通常不需要额外的硬件加速器。

流程

  1. 使用兼容模型和模型服务器准备 Containerfile。

    带有与 OVMS 搭配使用的 ResNet-50 模型的 Containerfile 示例

    FROM registry.access.redhat.com/ubi9/ubi-minimal:latest
    RUN microdnf install -y wget && microdnf clean all
    RUN mkdir -p /models/1 && chmod -R 755 /models/1
    RUN wget -q -P /models/1 \
      https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.bin \
      https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.xml
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,将 IMAGE_REF 环境变量设置为简化您的过程:

    $ IMAGE_REF=<ovms-resnet50:test> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <ovms-resnet50:test > 替换为镜像引用的名称。在本例中,使用 &lt ;repo:tag& gt; 格式。您的镜像引用名称特定于您的用例。
  3. 运行以下命令来构建 Containerfile:

    $ sudo podman build -t $IMAGE_REF 
    1
    Copy to Clipboard Toggle word wrap
    1
    由于 CRI-O 和 Podman 共享存储,需要使用 sudo 使镜像成为根容器存储的一部分,并可供 MicroShift 使用。

    输出示例

    STEP 1/4: FROM registry.access.redhat.com/ubi9/ubi-minimal:latest
    Trying to pull registry.access.redhat.com/ubi9/ubi-minimal:latest...
    Getting image source signatures
    Checking if image destination supports signatures
    Copying blob 533b69cfd644 done   |
    Copying blob 863e9a7e2102 done   |
    Copying config 098048e6f9 done   |
    Writing manifest to image destination
    Storing signatures
    STEP 2/4: RUN microdnf install -y wget && microdnf clean all
    << SNIP >>
    --> 4c74352ad42e
    STEP 3/4: RUN mkdir -p /models/1 && chmod -R 755 /models/1
    --> bfd31acb1e81
    STEP 4/4: RUN wget -q -P /models/1   https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.bin   https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.xml
    COMMIT ovms-resnet50:test
    --> 375b265c1c4b
    Successfully tagged localhost/ovms-resnet50:test
    375b265c1c4bc6f0a059c8739fb2b3a46e1b563728f6d9c51f26f29bb2c87
    Copy to Clipboard Toggle word wrap

  4. 可选:运行以下命令将 Containerfile 推送到 registry 中:

    $ sudo podman push $IMAGE_REF
    Copy to Clipboard Toggle word wrap
    重要

    对于离线用例,请包括除 latest 以外的标签。如果使用 latest 标签,则获取和设置模型的容器将被配置为 imagePullPolicy: 参数,并且忽略本地镜像。如果您使用除 latest 之外的任何其他标签,则 imagePullPolicy: 参数将设置为 IfNotPresent

验证

  • 运行以下命令验证镜像是否存在:

    $ sudo podman images ovms-resnet50
    Copy to Clipboard Toggle word wrap

    输出示例

    REPOSITORY                TAG   IMAGE ID        CREATED         SIZE
    localhost/ovms-resnet50   test  375b265c1c4b    3 minutes ago   136 MB
    Copy to Clipboard Toggle word wrap

后续步骤

  • 配置模型运行时。
  • 确认您的 AI 模型已准备好推断。
  • 向模型服务器发出请求。

1.6. 在 MicroShift 上提供 AI 模型

您可以通过使用 ServingRuntimeInferenceService 自定义资源(CR)配置模型,在 MicroShift 中提供 Red Hat OpenShift AI Self-Managed single-model 服务平台的模型。

MicroShift 中 AI 模型的模型保留运行时
模型运行时是部署和管理 AI 模型的环境,提供与指定的模型服务器和它支持的模型框架的集成。创建模型运行时意味着配置为 AI 模型选择正确模型格式的对象,并提供查询,以及其他特定于您的部署的详细功能。
ServingRuntime 自定义资源
ServingRuntime CR 是一个 YAML 文件,它为 pod 定义模板,可动态加载和卸载 AI 模型格式,并公开服务端点,以通过 API 查询模型。每个 ServingRuntime CR 都包含运行 AI 模型所需的信息,包括运行时的容器镜像以及模型格式列表。模型服务运行时的其他配置设置可使用容器规格中定义的环境变量来设置。
InferenceService 自定义资源
InferenceService CR 是一个 YAML 文件,它创建服务器或推测服务来处理 inference 查询,将它们传递给模型,然后返回 inference 输出。在 MicroShift 中,输出在 CLI 中返回。这个 inference 服务配置文件也可以包括很多其他选项,如指定硬件加速器。
重要

作为单节点 Kubernetes 发行版本,MicroShift 不支持多型号部署。您必须使用单模式服务平台。在每个 MicroShift 部署中,您可以使用一个 AI 模型,但可能使用多个模型运行时。

用于配置模型运行时的工作流
  • 选择支持 AI 模型格式的 model-serving 运行时。
  • 在工作负载命名空间中创建 ServingRuntime CR。
  • 如果 MicroShift 集群已在运行,您可以将所需的 ServingRuntime CR 导出至文件并编辑该文件。
  • 如果 MicroShift 集群没有运行,或者要手动准备清单,您可以使用磁盘上的原始定义,该定义是 microshift-ai-model-serving RPM 的一部分。
  • 在工作负载命名空间中创建 InferenceService CR。

支持以下 Red Hat OpenShift AI Self-Managed 自定义资源定义(CRD):

  • InferenceServices
  • TrainedModels
  • ServingRuntimes
  • InferenceGraphs
  • ClusterStorageContainers
  • ClusterLocalModels
  • LocalModelNodeGroups

以下 Red Hat OpenShift AI Self-Managed model-serving 运行时是为 MicroShift 部署进行验证:

  • vLLM ServingRuntime for KServe
  • OpenVINO Model Server

    重要

    OpenVINO 模型服务器不支持 IPv6 网络协议。在使用 检查每个模型服务器以确保它支持网络配置之前。

以下运行时可用于使用 MicroShift 进行开发目的:

  • Caikit 文本 Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe
  • Caikit Standalone ServingRuntime for KServe
  • 文本 Generation Inference Server (TGIS) Standalone ServingRuntime for KServe
  • vLLM ServingRuntime,带有对 KServe 的 Gaudi 加速器的支持
  • 用于 KServe 的 vLLM ROCm ServingRuntime
  • 创建和测试的自定义运行时

1.7. 创建用于 MicroShift 的 ServingRuntime CR

根据已安装的清单和发行信息创建 ServingRuntime 自定义资源(CR)。包括的步骤是重新使用包括的 microshift-ai-model-serving 清单文件的示例,以便在工作负载命名空间中重新创建 OpenVINO Model Server (OVMS)模型运行时。

注意

此方法不需要实时集群,因此它可能是 CI/CD 自动化的一部分。

先决条件

  • microshift-ai-model-servingmicroshift-ai-model-serving-release-info RPM 都已安装。
  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。

流程

  1. 运行以下命令,从 MicroShift 发行版本信息文件中提取要使用的 ServingRuntime CR 的镜像引用:

    $ OVMS_IMAGE="$(jq -r '.images | with_entries(select(.key == "ovms-image")) | .[]' /usr/share/microshift/release/release-ai-model-serving-"$(uname -i)".json)" 
    1
    Copy to Clipboard Toggle word wrap
    1
    在本例中,提取 OVMS 模型运行时的镜像引用。
  2. 运行以下命令复制原始 ServingRuntime YAML 文件:

    $ cp /usr/lib/microshift/manifests.d/050-microshift-ai-model-serving-runtimes/ovms-kserve.yaml ./ovms-kserve.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,将实际镜像引用添加到 ServingRuntime YAML 的 image: parameter 字段值:

    $ sed -i "s,image: ovms-image,image: ${OVMS_IMAGE}," ./ovms-kserve.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,使用 YAML 文件在自定义命名空间中创建 ServingRuntime 对象:

    $ oc create -n <ai_demo> -f ./ovms-kserve.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <ai_demo > 替换为您的命名空间的名称。
重要

如果 ServingRuntime CR 是新清单的一部分,请在 kustomization.yaml 文件中设置命名空间,例如:

Kustomize 清单命名空间值示例

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: ai-demo
resources:
  - ovms-kserve.yaml
#...
Copy to Clipboard Toggle word wrap

后续步骤

  • 创建 InferenceService 对象。
  • 验证您的模型是否已准备好推断。
  • 查询模型。
  • 可选:检查模型指标。

1.8. 创建 InferenceService 自定义资源

创建 InferenceService 自定义资源(CR)来指示 KServe 如何创建用于部署服务您的 AI 模型。KServe 根据 InferenceService CR 中指定的 modelFormat 值使用 ServingRuntime

先决条件

  • 已配置了 ServingRuntimes CR。
  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。

流程

  1. 创建 InferenceService CR。

    带有 openvino_ir 模型格式的 InferenceService 对象示例

    apiVersion: serving.kserve.io/v1beta1
    kind: InferenceService
    metadata:
      name: ovms-resnet50
    spec:
      predictor:
        model:
          protocolVersion: v2
          modelFormat:
            name: openvino_ir
          storageUri: "oci://localhost/ovms-resnet50:test"
          args:
          - --layout=NHWC:NCHW 
    1
    Copy to Clipboard Toggle word wrap

    1
    一个额外的参数,使 OpenVINO Model Server (OVMS)接受与最初导出模型不同的布局中的请求输入数据。额外的参数传递给 OVMS 容器。
  2. InferenceService 示例保存到文件中,然后运行以下命令在集群中创建它:

    $ oc create -n <ai_demo> -f ./FILE.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <ai_demo > 替换为您的命名空间名称。

    输出示例

    inferenceservice.serving.kserve.io/ovms-resnet50 created
    Copy to Clipboard Toggle word wrap

    注意

    部署和 pod 应该出现在指定的命名空间中。根据 ServingRuntime CR 中指定的镜像大小以及 ModelCar OCI 镜像的大小,pod 可能需要几分钟才能就绪。

后续步骤

  • 验证模型运行时是否已就绪。

1.8.1. 使用 Open Telemetry 导出模型-服务器指标

如果为 MicroShift 安装 microshift-observability RPM,您可以使用 Open Telemetry 导出 model-server 指标。

注意

您还可以通过在 /metrics 端点上发出请求来获取模型服务器的 Prometheus-format 指标。如需更多信息,请参阅"获得 model-server 指标"。

先决条件

  • 已配置了 ServingRuntimes CR。
  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。
  • 已安装 microshift-observability RPM。
  • 您的 MicroShift Open Telemetry 配置包含 Prometheus Receiver。如需更多信息,请参阅 Prometheus Receiver

流程

  • 在您的 InferenceService 自定义资源中添加以下 Open Telemetry 注解:

    使用 Open Telemetry 的 InferenceService 对象示例

    apiVersion: serving.kserve.io/v1beta1
    kind: InferenceService
    metadata:
      name: ovms-resnet50
    #...
      annotations:
        prometheus.io/scrape: "true"
    #...
    Copy to Clipboard Toggle word wrap

1.8.2. 更多 InferenceService CR 选项

inference 服务 YAML 文件可以包含多个不同的选项。例如,您可以包含首先传递给部署的 resources 部分,然后传递给 pod,以便模型服务器通过设备插件访问硬件。

InferenceService CR 中的 NVIDIA 设备 资源 片断示例

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: is-name
spec:
  predictor:
    model:
      resources:
        limits:
          nvidia.com/gpu: 1
        requests:
          nvidia.com/gpu: 1
#...
Copy to Clipboard Toggle word wrap

有关完整的 InferenceService 规格,请参阅 Control Plane API 参考 (KServe 文档)。

1.9. 验证模型运行时是否已就绪

通过检查下游生成活动是否已完成,验证您的模型运行时是否可供使用。

先决条件

  • 已配置了 ServingRuntimes CR。
  • 您创建了 InferenceService CR。
  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。

流程

  1. 运行以下命令,检查 AI 模型是否在自定义命名空间中部署:

    $ oc get -n ai-demo deployment
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
    ovms-resnet50-predictor   1/1     1            1           72s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令确认您的部署正在进行:

    $ oc rollout status -n ai-demo deployment ovms-resnet50-predictor
    Copy to Clipboard Toggle word wrap

    输出示例

    deployment "ovms-resnet50-predictor" successfully rolled out
    Copy to Clipboard Toggle word wrap

  3. 运行以下命令,检查 AI 模型工作负载 pod 是否在自定义命名空间中部署:

    $ oc get -n ai-demo pod
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                       READY   STATUS    RESTARTS      AGE
    ovms-resnet50-predictor-6fdb566b7f-bc9k5   2/2     Running   1 (72s ago)   74s
    Copy to Clipboard Toggle word wrap

  4. 运行以下命令,检查创建的服务 KServe:

    $ oc get svc -n ai-demo
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    ovms-resnet50-predictor   ClusterIP   None         <none>        80/TCP    119s
    Copy to Clipboard Toggle word wrap

后续步骤

  • 创建一个 Route 对象,以便应用程序可以访问 MicroShift 集群。

其他资源

1.10. 在 MicroShift 中创建用于 AI 查询的路由

创建一个路由,以便您的 AI 模型可以接收查询并给出输出。您可以使用 oc expose svc 命令,或者在 YAML 文件中创建定义并应用它。

先决条件

  • 有对机器的 root 用户访问权限。
  • 已安装 OpenShift CLI (oc)。

流程

  • 使用以下命令创建路由:

    $ oc expose svc -n ai-demo ovms-resnet50-predictor
    Copy to Clipboard Toggle word wrap

    输出示例

    route.route.openshift.io/ovms-resnet50-predictor exposed
    Copy to Clipboard Toggle word wrap

验证

  • 运行以下命令验证您创建的路由是否存在:

    $ oc get route -n ai-demo
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                      HOST                                               ADMITTED   SERVICE                   TLS
    ovms-resnet50-predictor   ovms-resnet50-predictor-ai-demo.apps.example.com   True       ovms-resnet50-predictor
    Copy to Clipboard Toggle word wrap

其他资源

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

1.12. 覆盖 KServe 配置

如果要覆盖 KServe 设置来自定义模型服务环境,您可以按照操作系统的一般步骤操作。

选项 1
  1. redhat-ods-applications 命名空间中复制现有 ConfigMap 文件 inferenceservice-config
  2. 编辑您要更改的设置。
  3. 覆盖现有的 ConfigMap 对象。
  4. 通过删除 pod 或将 Deployment pod 参数缩减为 0 来重新启动 KServe,然后备份至 1
选项 2
  1. 复制 ConfigMap 文件 /usr/lib/microshift/manifests.d/010-microshift-ai-model-serving-kserve/inferenceservice-config-microshift-patch.yaml
  2. 编辑您要更改的设置。
  3. 应用 ConfigMap 对象。
  4. 通过删除 pod 或将 Deployment pod 参数缩减为 0 来重新启动 KServe,然后备份至 1
对于 RHEL for Edge 和 RHEL 系统的镜像模式
  1. 根据 /usr/lib/microshift/manifests.d/010-microshift-ai-model-serving-kserve/inferenceservice-config-microshift-patch.yamlinferenceservice-config 文件,使用 ConfigMap 文件创建新清单。
  2. 确保新清单放置在 /usr/lib/microshift/manifests.d/ 目录中。建议使用前缀 011 的星级,以便在 /usr/lib/microshift/manifests.d/010-microshift-ai-model-serving-kserve/ 目录内容后应用您的清单。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat