使用 AI 模型
第 1 章 将 Red Hat OpenShift AI 与 MicroShift 搭配使用 复制链接链接已复制到粘贴板!
了解如何在 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。
-
ClusterServingRuntimesCRD 不支持 Red Hat OpenShift AI Self-Managed,这意味着您必须将microshift-ai-model-servingRPM 中提供的ServingRuntimeCR 复制到您的工作负载命名空间中。 - 要在 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-servingRPM 软件包。 - 如果您要在 MicroShift 运行时添加 RPM,请重新启动 MicroShift。
-
安装
- 准备部署
- 将您的 AI 模型打包到 OCI 镜像中,否则称为 ModelCar 格式。如果您已经设置了 S3 兼容存储或持久性卷声明,您可以跳过这一步,但对 MicroShift 测试并支持 ModelCar 格式。
选择一个模型运行时,该运行时充当您的模型服务器。使用服务运行时和 inference 服务配置运行时。
-
将
ServingRuntime自定义资源(CR)从默认的redhat-ods-applications命名空间复制到您自己的命名空间中。 -
创建
InferenceServiceCR。
-
将
-
可选:创建一个
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 对象的清单。
流程
运行以下命令安装 MicroShift AI-model-serving RPM 软件包:
sudo dnf install microshift-ai-model-serving
$ sudo dnf install microshift-ai-model-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作为 root 用户,输入以下命令重启 MicroShift 服务:
sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:运行以下命令来安装发行版本信息软件包:
sudo dnf install microshift-ai-model-serving-release-info
$ sudo dnf install microshift-ai-model-serving-release-info1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 发行信息软件包包含一个 JSON 文件,其中包含镜像引用,有助于在 bootc 镜像构建过程中将
ServingRuntime的副本部署到命名空间中。
验证
输入以下命令验证
kservepod 是否在redhat-ods-applications命名空间中运行:oc get pods -n redhat-ods-applications
$ oc get pods -n redhat-ods-applicationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE kserve-controller-manager-7fc9fc688-kttmm 1/1 Running 0 1h
NAME READY STATUS RESTARTS AGE kserve-controller-manager-7fc9fc688-kttmm 1/1 Running 0 1hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 为您的 AI 模型创建一个命名空间。
- 将您的模型打包成 OCI 镜像。
- 配置模型运行时。
- 验证您的模型是否已准备好推断。
- 向模型服务器发出请求。
1.4. 在 MicroShift 上为您的 AI 模型创建命名空间 复制链接链接已复制到粘贴板!
为您的 AI 模型和所有其他资源创建一个命名空间。
先决条件
- 有对机器的 root 用户访问权限。
-
已安装 OpenShift CLI (
oc)。
流程
运行以下命令来创建新命名空间:
oc create ns <namespace_name>
$ oc create ns <namespace_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace_name> 替换为您要使用的命名空间名称。在以下示例中使用了ai-demo。
验证
运行以下命令验证您是否创建了所需的命名空间:
oc get ns <namespace_name>
$ oc get ns <namespace_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace_name> 替换为您要使用的命名空间名称。在以下示例中使用了ai-demo。
输出示例
NAME STATUS AGE ai-demo Active 1h
NAME STATUS AGE ai-demo Active 1hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 通常不需要额外的硬件加速器。
流程
使用兼容模型和模型服务器准备 Containerfile。
带有与 OVMS 搭配使用的 ResNet-50 模型的 Containerfile 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将
IMAGE_REF环境变量设置为简化您的过程:IMAGE_REF=<ovms-resnet50:test>
$ IMAGE_REF=<ovms-resnet50:test>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<ovms-resnet50:test> 替换为镜像引用的名称。在本例中,使用 <repo:tag> 格式。您的镜像引用名称特定于您的用例。
运行以下命令来构建 Containerfile:
sudo podman build -t $IMAGE_REF
$ sudo podman build -t $IMAGE_REF1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 由于 CRI-O 和 Podman 共享存储,需要使用
sudo使镜像成为根容器存储的一部分,并可供 MicroShift 使用。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:运行以下命令将 Containerfile 推送到 registry 中:
sudo podman push $IMAGE_REF
$ sudo podman push $IMAGE_REFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要对于离线用例,请包括除
latest以外的标签。如果使用latest标签,则获取和设置模型的容器将被配置为imagePullPolicy:参数,并且忽略本地镜像。如果您使用除latest之外的任何其他标签,则imagePullPolicy:参数将设置为IfNotPresent。
验证
运行以下命令验证镜像是否存在:
sudo podman images ovms-resnet50
$ sudo podman images ovms-resnet50Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ovms-resnet50 test 375b265c1c4b 3 minutes ago 136 MB
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ovms-resnet50 test 375b265c1c4b 3 minutes ago 136 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 配置模型运行时。
- 确认您的 AI 模型已准备好推断。
- 向模型服务器发出请求。
1.6. 在 MicroShift 上提供 AI 模型 复制链接链接已复制到粘贴板!
您可以通过使用 ServingRuntime 和 InferenceService 自定义资源(CR)配置模型,在 MicroShift 中提供 Red Hat OpenShift AI Self-Managed single-model 服务平台的模型。
- MicroShift 中 AI 模型的模型保留运行时
- 模型运行时是部署和管理 AI 模型的环境,提供与指定的模型服务器和它支持的模型框架的集成。创建模型运行时意味着配置为 AI 模型选择正确模型格式的对象,并提供查询,以及其他特定于您的部署的详细功能。
ServingRuntime自定义资源-
ServingRuntimeCR 是一个 YAML 文件,它为 pod 定义模板,可动态加载和卸载 AI 模型格式,并公开服务端点,以通过 API 查询模型。每个ServingRuntimeCR 都包含运行 AI 模型所需的信息,包括运行时的容器镜像以及模型格式列表。模型服务运行时的其他配置设置可使用容器规格中定义的环境变量来设置。 InferenceService自定义资源-
InferenceServiceCR 是一个 YAML 文件,它创建服务器或推测服务来处理 inference 查询,将它们传递给模型,然后返回 inference 输出。在 MicroShift 中,输出在 CLI 中返回。这个 inference 服务配置文件也可以包括很多其他选项,如指定硬件加速器。
作为单节点 Kubernetes 发行版本,MicroShift 不支持多型号部署。您必须使用单模式服务平台。在每个 MicroShift 部署中,您可以使用一个 AI 模型,但可能使用多个模型运行时。
- 用于配置模型运行时的工作流
- 选择支持 AI 模型格式的 model-serving 运行时。
-
在工作负载命名空间中创建
ServingRuntimeCR。 -
如果 MicroShift 集群已在运行,您可以将所需的
ServingRuntimeCR 导出至文件并编辑该文件。 -
如果 MicroShift 集群没有运行,或者要手动准备清单,您可以使用磁盘上的原始定义,该定义是
microshift-ai-model-servingRPM 的一部分。 -
在工作负载命名空间中创建
InferenceServiceCR。
1.6.1. 支持的 Red Hat OpenShift AI Self-Managed 自定义资源定义 复制链接链接已复制到粘贴板!
支持以下 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-serving和microshift-ai-model-serving-release-infoRPM 都已安装。 - 有对机器的 root 用户访问权限。
-
已安装 OpenShift CLI (
oc)。
流程
运行以下命令,从 MicroShift 发行版本信息文件中提取要使用的
ServingRuntimeCR 的镜像引用:OVMS_IMAGE="$(jq -r '.images | with_entries(select(.key == "ovms-image")) | .[]' /usr/share/microshift/release/release-ai-model-serving-"$(uname -i)".json)"
$ 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 Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,提取 OVMS 模型运行时的镜像引用。
运行以下命令复制原始
ServingRuntimeYAML 文件:cp /usr/lib/microshift/manifests.d/050-microshift-ai-model-serving-runtimes/ovms-kserve.yaml ./ovms-kserve.yaml
$ cp /usr/lib/microshift/manifests.d/050-microshift-ai-model-serving-runtimes/ovms-kserve.yaml ./ovms-kserve.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将实际镜像引用添加到
ServingRuntimeYAML 的image:parameter 字段值:sed -i "s,image: ovms-image,image: ${OVMS_IMAGE}," ./ovms-kserve.yaml$ sed -i "s,image: ovms-image,image: ${OVMS_IMAGE}," ./ovms-kserve.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用 YAML 文件在自定义命名空间中创建
ServingRuntime对象:oc create -n <ai_demo> -f ./ovms-kserve.yaml
$ oc create -n <ai_demo> -f ./ovms-kserve.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<ai_demo> 替换为您的命名空间的名称。
如果 ServingRuntime CR 是新清单的一部分,请在 kustomization.yaml 文件中设置命名空间,例如:
Kustomize 清单命名空间值示例
后续步骤
-
创建
InferenceService对象。 - 验证您的模型是否已准备好推断。
- 查询模型。
- 可选:检查模型指标。
1.8. 创建 InferenceService 自定义资源 复制链接链接已复制到粘贴板!
创建 InferenceService 自定义资源(CR)来指示 KServe 如何创建用于部署服务您的 AI 模型。KServe 根据 InferenceService CR 中指定的 modelFormat 值使用 ServingRuntime。
先决条件
-
已配置了
ServingRuntimesCR。 - 有对机器的 root 用户访问权限。
-
已安装 OpenShift CLI (
oc)。
流程
创建
InferenceServiceCR。带有
openvino_ir模型格式的InferenceService对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 一个额外的参数,使 OpenVINO Model Server (OVMS)接受与最初导出模型不同的布局中的请求输入数据。额外的参数传递给 OVMS 容器。
将
InferenceService示例保存到文件中,然后运行以下命令在集群中创建它:oc create -n <ai_demo> -f ./FILE.yaml
$ oc create -n <ai_demo> -f ./FILE.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 <ai_demo > 替换为您的命名空间名称。
输出示例
inferenceservice.serving.kserve.io/ovms-resnet50 created
inferenceservice.serving.kserve.io/ovms-resnet50 createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意部署和 pod 应该出现在指定的命名空间中。根据
ServingRuntimeCR 中指定的镜像大小以及 ModelCar OCI 镜像的大小,pod 可能需要几分钟才能就绪。
后续步骤
- 验证模型运行时是否已就绪。
1.8.1. 使用 Open Telemetry 导出模型-服务器指标 复制链接链接已复制到粘贴板!
如果为 MicroShift 安装 microshift-observability RPM,您可以使用 Open Telemetry 导出 model-server 指标。
您还可以通过在 /metrics 端点上发出请求来获取模型服务器的 Prometheus-format 指标。如需更多信息,请参阅"获得 model-server 指标"。
先决条件
-
已配置了
ServingRuntimesCR。 - 有对机器的 root 用户访问权限。
-
已安装 OpenShift CLI (
oc)。 -
已安装
microshift-observabilityRPM。 - 您的 MicroShift Open Telemetry 配置包含 Prometheus Receiver。如需更多信息,请参阅 Prometheus Receiver。
流程
在您的
InferenceService自定义资源中添加以下 Open Telemetry 注解:使用 Open Telemetry 的
InferenceService对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.8.2. 更多 InferenceService CR 选项 复制链接链接已复制到粘贴板!
inference 服务 YAML 文件可以包含多个不同的选项。例如,您可以包含首先传递给部署的 resources 部分,然后传递给 pod,以便模型服务器通过设备插件访问硬件。
InferenceService CR 中的 NVIDIA 设备 资源 片断示例
有关完整的 InferenceService 规格,请参阅 Control Plane API 参考 (KServe 文档)。
1.9. 验证模型运行时是否已就绪 复制链接链接已复制到粘贴板!
通过检查下游生成活动是否已完成,验证您的模型运行时是否可供使用。
先决条件
-
已配置了
ServingRuntimesCR。 -
您创建了
InferenceServiceCR。 - 有对机器的 root 用户访问权限。
-
已安装 OpenShift CLI (
oc)。
流程
运行以下命令,检查 AI 模型是否在自定义命名空间中部署:
oc get -n ai-demo deployment
$ oc get -n ai-demo deploymentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE ovms-resnet50-predictor 1/1 1 1 72s
NAME READY UP-TO-DATE AVAILABLE AGE ovms-resnet50-predictor 1/1 1 1 72sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令确认您的部署正在进行:
oc rollout status -n ai-demo deployment ovms-resnet50-predictor
$ oc rollout status -n ai-demo deployment ovms-resnet50-predictorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
deployment "ovms-resnet50-predictor" successfully rolled out
deployment "ovms-resnet50-predictor" successfully rolled outCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查 AI 模型工作负载 pod 是否在自定义命名空间中部署:
oc get -n ai-demo pod
$ oc get -n ai-demo podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE ovms-resnet50-predictor-6fdb566b7f-bc9k5 2/2 Running 1 (72s ago) 74s
NAME READY STATUS RESTARTS AGE ovms-resnet50-predictor-6fdb566b7f-bc9k5 2/2 Running 1 (72s ago) 74sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查创建的服务 KServe:
oc get svc -n ai-demo
$ oc get svc -n ai-demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ovms-resnet50-predictor ClusterIP None <none> 80/TCP 119s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ovms-resnet50-predictor ClusterIP None <none> 80/TCP 119sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
-
创建一个
Route对象,以便应用程序可以访问 MicroShift 集群。
其他资源
- InferenceService (Red Hat OpenShift AI 文档)
1.10. 在 MicroShift 中创建用于 AI 查询的路由 复制链接链接已复制到粘贴板!
创建一个路由,以便您的 AI 模型可以接收查询并给出输出。您可以使用 oc expose svc 命令,或者在 YAML 文件中创建定义并应用它。
先决条件
- 有对机器的 root 用户访问权限。
-
已安装 OpenShift CLI (
oc)。
流程
使用以下命令创建路由:
oc expose svc -n ai-demo ovms-resnet50-predictor
$ oc expose svc -n ai-demo ovms-resnet50-predictorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
route.route.openshift.io/ovms-resnet50-predictor exposed
route.route.openshift.io/ovms-resnet50-predictor exposedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证您创建的路由是否存在:
oc get route -n ai-demo
$ oc get route -n ai-demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME HOST ADMITTED SERVICE TLS ovms-resnet50-predictor ovms-resnet50-predictor-ai-demo.apps.example.com True ovms-resnet50-predictor
NAME HOST ADMITTED SERVICE TLS ovms-resnet50-predictor ovms-resnet50-predictor-ai-demo.apps.example.com True ovms-resnet50-predictorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
1.11. 关于查询您的 AI 模型 复制链接链接已复制到粘贴板!
通过 API 查询您的模型也称为模型推断。Model inferencing 最常用于检索信息、自动化任务、进行预测、提供数据分析或执行操作。
通常,必须使用与正在使用的 AI 模型的格式来构建查询。模型服务运行时格式查询会自动进行。该模型根据底层培训和数据处理查询,然后提供一个输出。输出应该与模型本身的目的一致,无论是要提供答案、进行预测或执行任务。
以下示例概述了确保您的模型准备推断出来的常规步骤,以及在服务运行时查询输出中可能预期的内容。
1.11.1. 验证您的 AI 模型是否可以访问 复制链接链接已复制到粘贴板!
在通过 API 查询模型前,您可以检查该模型可以访问并准备好根据连接的数据提供答案。以下示例继续使用 OpenVINO Model Server。
先决条件
- 您已配置了 AI 模型-serving 运行时。
- 将 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
- 除了使用
"${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 集群正在运行。
-
您有
xxd工具,它是vim-common软件包的一部分。 - 已配置了模型运行时。
- 将 AI 模型上传到 MicroShift。
流程
运行以下命令,从 OpenVINO Model Server 示例下载 bee 的镜像:
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 模型服务器发出 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$ 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.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 示例中省略了
.outputs[0].data的内容,如 brevity。
验证
要确定模型的预测,请使用以下 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. 获取 model-server 指标 复制链接链接已复制到粘贴板!
在进行查询后,您可以获取模型服务器的指标来识别瓶颈、优化资源分配并确保高效的基础架构利用率。
您还可以为 MicroShift 配置 Open Telemetry 来获取 model-server 指标。如需更多信息,请参阅"将 Open Telemetry 添加到 InferenceService 自定义资源"。
先决条件
- MicroShift 集群正在运行。
- 有足够的查询来提供您要查看的指标数据。
流程
运行以下命令,在
/metrics端点上发出请求来获取模型服务器的 Prometheus-format 指标: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 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# 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
1.12. 覆盖 KServe 配置 复制链接链接已复制到粘贴板!
如果要覆盖 KServe 设置来自定义模型服务环境,您可以按照操作系统的一般步骤操作。
- 选项 1
-
在
redhat-ods-applications命名空间中复制现有ConfigMap文件inferenceservice-config。 - 编辑您要更改的设置。
-
覆盖现有的
ConfigMap对象。 -
通过删除 pod 或将
Deploymentpod 参数缩减为0来重新启动 KServe,然后备份至1。
-
在
- 选项 2
-
复制
ConfigMap文件/usr/lib/microshift/manifests.d/010-microshift-ai-model-serving-kserve/inferenceservice-config-microshift-patch.yaml。 - 编辑您要更改的设置。
-
应用
ConfigMap对象。 -
通过删除 pod 或将
Deploymentpod 参数缩减为0来重新启动 KServe,然后备份至1。
-
复制
- 对于 RHEL for Edge 和 RHEL 系统的镜像模式
-
根据
/usr/lib/microshift/manifests.d/010-microshift-ai-model-serving-kserve/inferenceservice-config-microshift-patch.yaml或inferenceservice-config文件,使用ConfigMap文件创建新清单。 -
确保新清单放置在
/usr/lib/microshift/manifests.d/目录中。建议使用前缀011的星级,以便在/usr/lib/microshift/manifests.d/010-microshift-ai-model-serving-kserve/目录内容后应用您的清单。
-
根据