服务模型
Red Hat OpenShift AI Self-Managed 中的服务模型
摘要
第 1 章 关于模型服务 复制链接链接已复制到粘贴板!
在 Red Hat OpenShift AI 上提供受培训的模型意味着在 OpenShift 集群上部署模型进行测试,然后将它们集成到智能应用程序中。部署模型使其可作为服务使用 API 访问。这可让您根据通过 API 调用提供的数据输入返回预测。此过程称为模型 推断。当您为 OpenShift AI 提供模型时,仪表板中会显示您可以访问部署的模型的 inference 端点。
OpenShift AI 提供以下模型服务平台:
第 2 章 提供中小型和中型模型 复制链接链接已复制到粘贴板!
为了部署小型和中型模型,OpenShift AI 包含一个基于 ModelMesh 组件的 多模式服务平台。在多型号服务平台上,可以从同一模型服务器部署多个模型并共享服务器资源。
2.1. 配置模型服务器 复制链接链接已复制到粘贴板!
2.1.1. 启用多模式服务平台 复制链接链接已复制到粘贴板!
要使用多型号服务平台,您必须首先启用平台。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 您的集群管理员 还没有 编辑 OpenShift AI 仪表板配置,以禁用选择使用 ModelMesh 组件的多型号服务平台的功能。如需更多信息,请参阅 Dashboard 配置选项。
流程
- 在 OpenShift AI 仪表板的左侧菜单中,点 Settings → Cluster settings。
- 找到 Model serving platform 部分。
- 选择 Multi-model serving 平台 复选框。
- 点 Save Changes。
2.1.2. 为多模式服务平台添加自定义模型运行时 复制链接链接已复制到粘贴板!
模型运行时增加了对指定模型框架和这些框架支持的模型格式的支持。默认情况下,多型号服务平台包括 OpenVINO 模型服务器运行时。如果默认运行时不满足您的需要,您还可以添加自己的自定义运行时,如支持特定的模型格式。
作为管理员,您可以使用 Red Hat OpenShift AI 仪表板来添加和启用自定义模型运行时。然后,您可以在为多型号服务平台创建新模型服务器时选择自定义运行时。
红帽不提供对自定义运行时的支持。您需要确保获得许可来使用您添加的任何自定义运行时,以及正确配置和维护它们。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 您熟悉如何在 项目 中添加模型服务器。添加自定义模型运行时后,您必须配置新的模型服务器以使用运行时。
您已查看了 kserve/modelmesh-serving 存储库中的运行时示例。您可以将这些示例用作起点。但是,每个运行时都需要一些进一步的修改,然后才能在 OpenShift AI 中部署它。以下流程描述了所需的修改。
注意OpenShift AI 默认包含 OpenVINO 模型服务器运行时。您不需要将此运行时添加到 OpenShift AI。
流程
在 OpenShift AI 仪表板中点 Settings > Serving runtime。
Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。
要添加自定义运行时,请选择以下选项之一:
- 要使用现有运行时(如 OpenVINO Model Server runtime)启动,请点现有运行时旁的操作菜单(alsa),然后点 Duplicate。
- 要添加新的自定义运行时,请点 Add serving runtime。
在 Select the model service platform this runtime support 列表中,选择 Multi-model serving platform。
注意多型号服务平台只支持 REST 协议。因此,您无法更改 此运行时支持的 Select the API 协议中的默认值。
可选:如果您启动一个新的运行时(而不是复制现有运行时),请选择以下选项之一来添加代码:
上传 YAML 文件
- 点 Upload files。
在文件浏览器中,选择计算机上的 YAML 文件。此文件可能是您从 kserve/modelmesh-serving 存储库下载的示例运行时之一。
嵌入的 YAML 编辑器将打开,并显示您上传的文件内容。
在编辑器中直接输入 YAML 代码
- 点 Start from scratch。
- 在嵌入式编辑器中直接输入或粘贴 YAML 代码。您粘贴的 YAML 可能会从 kserve/modelmesh-serving 存储库中的一个示例运行时复制。
可选:如果您要在 kserve/modelmesh-serving 仓库中添加其中一个示例运行时,请执行以下修改:
-
在 YAML 编辑器中,找到运行时的
kind字段。将此字段的值更新为ServingRuntime。 -
在 kserve/modelmesh-serving 存储库中的 kustomization.yaml 文件中,记录您要添加的运行时的
newName和newTag值。您将在后续步骤中指定这些值。 -
在自定义运行时的 YAML 编辑器中,找到
containers.image字段。 根据之前在 kustomization.yaml 文件中记录的值,以
newName:newTag格式更新containers.image字段的值。此时会显示一些示例。- NVIDIA Triton Inference Server
-
image: nvcr.io/nvidia/tritonserver:23.04-py3 - Seldon Python MLServer
-
image: seldonio/mlserver:1.3.2 - TorchServe
-
image: pytorch/torchserve:0.7.1-cpu
-
在 YAML 编辑器中,找到运行时的
-
在
metadata.name字段中,确保您添加的运行时值是唯一的(即,该值与您已添加的运行时不匹配)。 可选: 要为要添加的运行时配置自定义显示名称,请添加
metadata.annotations.openshift.io/display-name字段并指定值,如下例所示:apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: mlserver-0.x annotations: openshift.io/display-name: MLServer注意如果没有为您的运行时配置自定义显示名称,OpenShift AI 会显示
metadata.name字段的值。点击 Add。
Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的运行时会自动启用。
- 可选: 要编辑自定义运行时,点操作菜单(需要)并选择 Edit。
验证
- 您添加的自定义模型运行时显示在 Serving 运行时 页面中的 enabled 状态。
2.1.3. 为多model服务平台添加经过测试和验证的模型运行时 复制链接链接已复制到粘贴板!
除了预安装和自定义模型服务运行时外,您还可以使用红帽经过测试和验证的模型运行时,如 NVIDIA Triton Inference Server 来支持您的需要。有关红帽经过测试和验证的运行时的更多信息,请参阅 Red Hat OpenShift AI 测试和验证的运行时。
您可以使用 Red Hat OpenShift AI 仪表板来添加和启用 NVIDIA Triton Inference Server 运行时,然后在为多模型服务平台创建新模型服务器时选择运行时。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 您熟悉如何在 项目 中添加模型服务器。添加经过测试和验证的模型运行时后,您必须配置新的模型服务器来使用运行时。
流程
在 OpenShift AI 仪表板中点 Settings > Serving runtime。
Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。
- 要添加经过测试和验证的运行时,请点 Add serving runtime。
在 Select the model service platform this runtime support 列表中,选择 Multi-model serving platform。
注意多型号服务平台只支持 REST 协议。因此,您无法更改 此运行时支持的 Select the API 协议中的默认值。
- 点 Start from scratch。
在嵌入的编辑器中直接输入或粘贴以下 YAML 代码。
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: annotations: enable-route: "true" name: modelmesh-triton labels: opendatahub.io/dashboard: "true" spec: annotations: opendatahub.io/modelServingSupport: '["multi"x`x`]' prometheus.kserve.io/path: /metrics prometheus.kserve.io/port: "8002" builtInAdapter: env: - name: CONTAINER_MEM_REQ_BYTES value: "268435456" - name: USE_EMBEDDED_PULLER value: "true" memBufferBytes: 134217728 modelLoadingTimeoutMillis: 90000 runtimeManagementPort: 8001 serverType: triton containers: - args: - -c - 'mkdir -p /models/_triton_models; chmod 777 /models/_triton_models; exec tritonserver "--model-repository=/models/_triton_models" "--model-control-mode=explicit" "--strict-model-config=false" "--strict-readiness=false" "--allow-http=true" "--allow-grpc=true" ' command: - /bin/sh image: nvcr.io/nvidia/tritonserver@sha256:xxxxx name: triton resources: limits: cpu: "1" memory: 2Gi requests: cpu: "1" memory: 2Gi grpcDataEndpoint: port:8001 grpcEndpoint: port:8085 multiModel: true protocolVersions: - grpc-v2 - v2 supportedModelFormats: - autoSelect: true name: onnx version: "1" - autoSelect: true name: pytorch version: "1" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: tensorrt version: "7" - autoSelect: false name: xgboost version: "1" - autoSelect: true name: python version: "1"-
在
metadata.name字段中,确保您添加的运行时值与您已添加的运行时不匹配。 可选: 要为您添加的运行时使用自定义显示名称,请添加
metadata.annotations.openshift.io/display-name字段并指定一个值,如下例所示:apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: modelmesh-triton annotations: openshift.io/display-name: Triton ServingRuntime注意如果没有为您的运行时配置自定义显示名称,OpenShift AI 会显示
metadata.name字段的值。点 Create。
Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的运行时会自动启用。
- 可选: 要编辑运行时,请点击操作菜单(WWN)并选择 Edit。
验证
- 您添加的 model-serving 运行时显示在 Serving 运行时 页面中的 enabled 状态。
2.1.4. 为多模式服务平台添加模型服务器 复制链接链接已复制到粘贴板!
当您启用了多型号服务平台时,您必须配置模型服务器来部署模型。如果您需要额外的计算能力以用于大型数据集,可以为模型服务器分配加速器。
在 OpenShift AI 2.16 中,红帽支持用于模型服务的 NVIDIA 和 AMD GPU 加速器。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 您已创建了可添加模型服务器的数据科学项目。
- 您已启用了多型号服务平台。
- 如果要将自定义模型运行时用于模型服务器,您添加了并启用运行时。请参阅 添加自定义模型运行时。
- 如果要将图形处理单元(GPU)与模型服务器搭配使用,在 OpenShift AI 中启用了 GPU 支持。如果使用 NVIDIA GPU,请参阅启用 NVIDIA GPU。如果使用 AMD GPU,请参阅 AMD GPU 集成。
流程
在 OpenShift AI 仪表板的左侧菜单中,单击 Data Science Projects。
Data Science Projects 页面将打开。
点您要为其配置模型服务器的项目名称。
此时会打开项目详情页面。
- 点 Models 选项卡。
执行以下操作之一:
- 如果您看到 Multi-model 服务平台 标题,点标题上的 Add model server。
- 如果没有看到任何标题,请点击 Add model server 按钮。
此时会打开 Add model server 对话框。
- 在 Model server name 字段中输入模型服务器的唯一名称。
从 Serving runtime 列表中,选择一个在 OpenShift AI 部署中安装并启用的模型运行时。
注意如果您在模型服务器中使用 自定义 模型运行时并希望使用 GPU,您必须确保您的自定义运行时支持 GPU,并被适当配置为使用它们。
- 在 Number of model replicas to deploy 字段中,指定一个值。
- 在 Model server size 列表中选择一个值。
可选:如果您在上一步中选择了 Custom,请在 Model server size 部分中配置以下设置以自定义模型服务器:
- 在 CPU 请求 字段中,指定要与模型服务器一起使用的 CPU 数量。使用此字段旁边的列表来指定内核或 millicores 的值。
- 在 CPU limit 字段中,指定用于模型服务器的最大 CPU 数量。使用此字段旁边的列表来指定内核或 millicores 的值。
- 在 Memory requested 字段中,以 KB (Gi)为单位为模型服务器指定请求的内存。
- 在 Memory limit 字段中,以 KB (Gi)为单位为模型服务器指定最大内存限值。
可选:在 Accelerator 列表中选择一个加速器。
- 如果您在上一步中选择了加速器,请指定要使用的加速器数量。
- 可选:在 Model route 部分中,选择 Make deployed model available via an external route 复选框,使部署的模型可供外部客户端使用。
可选:在 Token authorization 部分,选择 Require token authentication 复选框,以为您的模型服务器进行令牌身份验证。要完成配置令牌身份验证,请执行以下操作:
- 在 Service account name 字段中输入要为其生成令牌的服务帐户名称。配置模型服务器时,生成的令牌会被创建并显示在 Token secret 字段中。
- 要添加额外服务帐户,请点 Add a service account 并输入另一个服务帐户名称。
点击 Add。
- 您配置的模型服务器会出现在项目的 Models 选项卡中,位于 Models 和 model servers 列表中。
- 可选: 要更新模型服务器,请点击模型服务器旁边的操作菜单(alsa),然后选择 Edit model server。
2.1.5. 删除模型服务器 复制链接链接已复制到粘贴板!
当您不再需要模型服务器到主机模型时,您可以从您的数据科学项目中删除它。
当您删除模型服务器时,您也会删除托管在该模型服务器上的模型。因此,应用程序不再使用模型。
先决条件
- 您已创建了数据科学项目和关联的模型服务器。
- 您已通知用户访问模型将不再可用的应用程序。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。
流程
在 OpenShift AI 仪表板中,点 Data Science Projects。
Data Science Projects 页面将打开。
点您要从中删除模型服务器的项目名称。
此时会打开项目详情页面。
- 点 Models 选项卡。
点您要删除模型服务器的项目旁边的操作菜单(autotune),然后点 Delete model server。
此时会打开 Delete model server 对话框。
- 在文本字段中输入模型服务器的名称,以确认您想要删除它。
- 点 Delete model server。
验证
- 您删除的模型服务器不再显示在项目的 Models 选项卡中。
2.2. 使用部署的模型 复制链接链接已复制到粘贴板!
2.2.1. 使用多模式服务平台部署模型 复制链接链接已复制到粘贴板!
您可以在 OpenShift AI 上部署受培训的模型,以便测试并实施它们到智能应用程序中。部署模型使其可作为服务使用 API 访问。这可让您根据数据输入返回预测。
当您启用了多模式服务平台时,您可以在平台上部署模型。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users)的一部分。 - 您已启用了多型号服务平台。
- 您已创建了数据科学项目并添加了模型服务器。
- 您可以访问 S3 兼容对象存储。
- 对于您要部署的模型,您知道 S3 兼容对象存储桶中的关联文件夹路径。
流程
在 OpenShift AI 仪表板的左侧菜单中,单击 Data Science Projects。
Data Science Projects 页面将打开。
点击您要在其中部署模型的项目的名称。
此时会打开项目详情页面。
- 点 Models 选项卡。
- 单击 Deploy model。
配置部署模型的属性,如下所示:
- 在 Model name 字段中输入您要部署的模型的唯一名称。
从 Model 框架 列表中,为您的模型选择一个框架。
注意Model 框架 列表仅显示配置模型服务器时指定的模型运行时支持的框架。
要指定您要从 S3 兼容对象存储部署的模型位置,请执行以下一组操作:
使用现有连接
- 选择现有连接。
- 从 Name 列表中,选择一个您之前定义的连接。
- 在 Path 字段中输入在指定数据源中包含模型的文件夹路径。
使用新连接
- 要定义模型可访问的新连接,请选择 New connection。
在 Add connection modal 中,选择 Connection type。S3 兼容对象存储 和 URI 选项是预安装的连接类型。如果您的 OpenShift AI 管理员添加了其他选项,则可能会使用其他选项。
此时会打开 Add connection 表单,其中包含特定于您选择的连接类型的字段。
- 输入连接详情字段。
(可选)在 配置参数 部分中自定义运行时参数:
- 修改附加服务 运行时参数中的值,以定义部署模型的行为方式。
- 修改 附加环境变量中的值,以在模型环境中定义变量。
- 点 Deploy。
验证
- 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。
2.2.2. 查看部署的模型 复制链接链接已复制到粘贴板!
要分析您的工作结果,您可以在 Red Hat OpenShift AI 中查看已部署模型的列表。您还可以查看部署模型及其端点的当前状态。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。
流程
在 OpenShift AI 仪表板中点 Model Serving。
此时会打开 Deployed model 页面。
对于每个模型,页面会显示模型名称、部署模型的项目、模型使用的模型运行时以及部署状态等详情。
- 可选: 对于给定模型,点 Inference endpoint 列中的链接来查看部署模型的 inference 端点。
验证
- 在 Deployed models 页面中会显示之前部署的数据科学模型列表。
2.2.3. 更新已部署模型的部署属性 复制链接链接已复制到粘贴板!
您可以更新之前部署的模型的部署属性。例如,您可以更改模型的连接和名称。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 您已在 OpenShift AI 中部署了模型。
流程
在 OpenShift AI 仪表板中点 Model Serving。
此时会打开 Deployed model 页面。
点您要更新的部署属性旁的操作菜单 (⋮),然后点 Edit。
这会打开 Edit model 对话框。
更新模型的部署属性,如下所示:
- 在 Model name 字段中,为您的模型输入一个新的、唯一的名称。
- 在 Model servers 列表中,为您的模型选择一个模型服务器。
从 Model 框架 列表中,为您的模型选择一个框架。
注意Model 框架 列表仅显示配置模型服务器时指定的模型运行时支持的框架。
- (可选)通过指定现有连接或创建新连接来更新连接。
- 单击 重新部署。
验证
- 您更新的部署属性的模型会显示在仪表板的 Model Serving 页面中。
2.2.4. 删除部署的模型 复制链接链接已复制到粘贴板!
您可以删除之前部署的模型。这可让您删除不再需要的部署模型。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 您已部署了模型。
流程
在 OpenShift AI 仪表板中点 Model serving。
此时会打开 Deployed model 页面。
点您要删除的部署模型旁的操作菜单 (⋮),然后点 Delete。
此时会打开 Delete deployed model 对话框。
- 在文本字段中输入部署模型的名称,以确认您想要删除它。
- 点 Delete deployed model。
验证
- 您删除的模型不再显示在 Deployed models 页面中。
2.3. 为多模型服务平台配置监控 复制链接链接已复制到粘贴板!
多型号服务平台包括 ModelMesh 组件的模型和模型服务器指标。ModelMesh 生成自己的指标集合,不依赖于底层模型定义运行时来提供它们。ModelMesh 生成的指标集合包括模型请求率和时间的指标、模型加载和卸载率、时间和大小、内部排队延迟、容量和使用情况、缓存状态以及最早使用的模型。如需更多信息,请参阅 ModelMesh 指标。
配置监控后,您可以查看 ModelMesh 组件的指标。
先决条件
- 具有集群管理员特权。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI。
- 您熟悉为监控用户定义的工作流 创建配置映射。您将在此流程中执行类似的步骤。
- 您熟悉 为 OpenShift 中的用户定义的项目启用监控。您将在此流程中执行类似的步骤。
-
您已将
monitoring-rules-view角色分配给将监控指标的用户。https://docs.redhat.com/en/documentation/openshift_container_platform/4.17/html/monitoring/enabling-monitoring-for-user-defined-projects#granting-users-permission-to-monitor-user-defined-projects_enabling-monitoring-for-user-defined-projects
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>在名为
uwm-cm-conf.yaml的 YAML 文件中定义ConfigMap对象,其内容如下:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: logLevel: debug retention: 15duser-workload-monitoring-config对象配置监控用户定义的项目的组件。观察到保留时间被设置为推荐的值 15 天。应用配置以创建
user-workload-monitoring-config对象。$ oc apply -f uwm-cm-conf.yaml在名为
uwm-cm-enable.yaml的 YAML 文件中定义另一个ConfigMap对象,其内容如下:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: truecluster-monitoring-config对象为用户定义的项目启用监控。应用配置以创建
cluster-monitoring-config对象。$ oc apply -f uwm-cm-enable.yaml
2.4. 查看多model服务平台的模型运行时指标 复制链接链接已复制到粘贴板!
集群管理员为多模式服务平台配置了监控后,非管理员用户可以使用 OpenShift Web 控制台查看 ModelMesh 组件的模型运行时指标。
先决条件
- 集群管理员为多模式服务平台配置了监控。
-
您已分配了
monitoring-rules-view角色。如需更多信息,请参阅 授予用户权限来为用户定义的项目配置监控。 - 您熟悉如何在 OpenShift Web 控制台中监控项目指标。如需更多信息,请参阅监控项目指标。
流程
- 登录 OpenShift Web 控制台。
- 切换到 Developer 视角。
- 在左侧菜单中,点 Observe。
-
如监控 项目指标 中所述,使用 Web 控制台运行对
modelmesh的 metrics 的查询。
2.5. 监控模型性能 复制链接链接已复制到粘贴板!
在多型号服务平台中,您可以查看模型服务器上部署的所有模型的性能指标,以及模型服务器上部署的特定模型。
2.5.1. 查看模型服务器中所有模型的性能指标 复制链接链接已复制到粘贴板!
您可以监控模型服务器上部署的所有模型的以下指标:
- 每 5 分钟的 HTTP 请求 - 服务器上所有模型失败的 HTTP 请求数。
- 平均响应时间(ms) - 对于服务器上的所有模型,模型服务器响应请求的平均时间。
- CPU 使用率(%) - 服务器上所有模型目前使用的 CPU 容量百分比。
- 内存使用率(%) - 服务器上所有模型目前使用的系统内存的百分比。
您可以为这些指标指定时间范围和刷新间隔,例如,当峰值使用小时以及模型在指定时间执行的方式时。
先决条件
- 已安装 Red Hat OpenShift AI。
- 在安装 OpenShift AI 的 OpenShift 集群上,启用了用户工作负载监控。
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 您已在多模式服务平台上部署了模型。
流程
在 OpenShift AI 仪表板导航菜单中点 Data Science Projects。
Data Science Projects 页面将打开。
- 点击包含您要监控的数据科学模型的项目名称。
- 在项目详情页面中,点 Models 选项卡。
- 在您感兴趣的模型服务器所在的行中,点操作菜单(ProductShortName),然后选择 View model server metrics。
可选:在模型服务器的指标页面中设置以下选项:
- 时间范围 -指定跟踪指标的时长。您可以选择其中一个值:1 小时、24 小时、7 天和 30 天。
- 刷新 interval - 指定指标页面中图形的频率(显示最新的数据)。您可以选择以下值之一:15 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、2 小时和 1 天。
- 向下滚动,以每 5 分钟查看 HTTP 请求的数据图形、平均响应时间、CPU 利用率和内存使用率。
验证
在模型服务器的指标页面中,图形在性能指标上提供数据。
2.5.2. 查看已部署模型的 HTTP 请求指标 复制链接链接已复制到粘贴板!
您可以查看说明在多模式服务平台上部署的特定模型失败的 HTTP 请求或成功的图形。
先决条件
- 已安装 Red Hat OpenShift AI。
- 在安装 OpenShift AI 的 OpenShift 集群上,启用了用户工作负载监控。
以下仪表板配置选项被设置为默认值,如下所示:
disablePerformanceMetrics:false disableKServeMetrics:false如需更多信息,请参阅 Dashboard 配置选项。
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 您已在多模式服务平台上部署了模型。
流程
- 在 OpenShift AI 仪表板导航菜单中,选择 Model Serving。
- 在 Deployed model 页面中,选择您感兴趣的模型。
可选:在 Endpoint performance 选项卡中设置以下选项:
- 时间范围 -指定跟踪指标的时长。您可以选择其中一个值:1 小时、24 小时、7 天和 30 天。
- 刷新 interval - 指定指标页面中图形的频率(显示最新的数据)。您可以选择以下值之一:15 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、2 小时和 1 天。
验证
Endpoint performance 选项卡显示模型的 HTTP 指标图。
第 3 章 提供大型模型 复制链接链接已复制到粘贴板!
为了部署大型模型,如大型语言模型(LLMs),Red Hat OpenShift AI 包括一个 单一模型服务平台,它基于 KServe 组件。由于每个模型都是从其自己的模型服务器部署的,因此单一模型服务平台可帮助您部署、监控、扩展和维护需要增加资源的大型模型。
3.1. 关于单模式服务平台 复制链接链接已复制到粘贴板!
为了部署大型模型,如大型语言模型(LLMs),OpenShift AI 包含一个基于 KServe 组件的单模型服务平台。由于每个模型都部署在自己的模型服务器上,因此单一模式服务平台可帮助您部署、监控、扩展和维护需要增加资源的大型模型。
3.2. 组件 复制链接链接已复制到粘贴板!
- KServe :一种 Kubernetes 自定义资源定义(CRD),编配所有类型的模型的模型服务。KServe 包括实现给定模型服务器的加载的模型运行时。KServe 还处理部署对象、存储访问和网络设置的生命周期。
- Red Hat OpenShift Serverless :一个云原生开发模型,允许无服务器部署模型。OpenShift Serverless 基于开源 Knative 项目。
- Red Hat OpenShift Service Mesh :一个服务网格网络层,用于管理流量流并强制实施访问策略。OpenShift Service Mesh 基于开源 Istio 项目。
3.3. 安装选项 复制链接链接已复制到粘贴板!
要安装 single-model 服务平台,您可以使用以下选项:
- 自动安装
如果您还没有在 OpenShift 集群上创建
ServiceMeshControlPlane或KNativeServing资源,您可以将 Red Hat OpenShift AI Operator 配置为安装 KServe 并配置其依赖项。有关自动安装的更多信息,请参阅配置 KServe 的自动安装。
- 手动安装
如果您已在 OpenShift 集群上创建了
ServiceMeshControlPlane或KNativeServing资源,则无法 配置 Red Hat OpenShift AI Operator 来安装 KServe 并配置其依赖项。在这种情况下,您必须手动安装 KServe。有关手动安装的更多信息,请参阅 手动安装 KServe。
3.4. 授权 复制链接链接已复制到粘贴板!
您可以将 Authorino 添加为 single-model 服务平台的授权供应商。通过添加授权供应商,您可以为平台上部署的模型启用令牌授权,这样可确保只有授权方能够对模型发出推测请求。
要将 Authorino 添加为 single-model 服务平台上的授权供应商,您可以使用以下选项:
- 如果集群中可以自动安装 single-model 服务平台,您可以包括 Authorino 作为自动安装过程的一部分。
- 如果需要手动安装单型号服务平台,还必须手动配置 Authorino。
有关为单模式服务平台选择安装选项的指导,请参阅安装选项。???
3.5. 监控 复制链接链接已复制到粘贴板!
您可以为单模型服务平台配置监控,并使用 Prometheus 提取每个预安装的模型运行时的指标。
3.6. model-serving 运行时 复制链接链接已复制到粘贴板!
您可以使用模型服务运行时在单模式服务平台上提供模型。模型服务运行时的配置由 ServingRuntime 和 InferenceService 自定义资源定义(CRD)定义。
3.6.1. ServingRuntime 复制链接链接已复制到粘贴板!
ServingRuntime CRD 创建一个服务运行时,这是一个用于部署和管理模型的环境。它为不同格式动态加载和卸载模型的 pod 创建模板,并公开服务端点以推断请求。
以下 YAML 配置是 KServe model-serving 运行时的 vLLM ServingRuntime 示例。配置包括各种标志、环境变量和命令行参数。
apiVersion: serving.kserve.io/v1alpha1
kind: ServingRuntime
metadata:
annotations:
opendatahub.io/recommended-accelerators: '["nvidia.com/gpu"]'
openshift.io/display-name: vLLM ServingRuntime for KServe
labels:
opendatahub.io/dashboard: "true"
name: vllm-runtime
spec:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: "8080"
containers :
- args:
- --port=8080
- --model=/mnt/models
- --served-model-name={{.Name}}
command:
- python
- '-m'
- vllm.entrypoints.openai.api_server
env:
- name: HF_HOME
value: /tmp/hf_home
image:
quay.io/modh/vllm@sha256:8a3dd8ad6e15fe7b8e5e471037519719d4d8ad3db9d69389f2beded36a6f5b21
name: kserve-container
ports:
- containerPort: 8080
protocol: TCP
multiModel: false
supportedModelFormats:
- autoSelect: true
name: vLLM
- 1
- 建议与运行时搭配使用的加速器。
- 2
- 显示服务运行时的名称。
- 3
- Prometheus 用来提取用于监控指标的端点。
- 4
- Prometheus 用来提取用于监控指标的端口。
- 5
- 模型文件存储在运行时容器中的路径。
- 6
- 将运行时容器规格中的
{{.Name}}模板变量指定的模型名称传递给运行时环境。{{.Name}}变量映射到InferenceService元数据对象的spec.predictor.name字段。 - 7
- 启动运行时容器的 entrypoint 命令。
- 8
- 服务运行时使用的运行时容器镜像。此镜像根据所使用的加速器类型而有所不同。
- 9
- 指定运行时用于单模式服务。
- 10
- 指定运行时支持的模型格式。
3.6.2. InferenceService 复制链接链接已复制到粘贴板!
InferenceService CRD 创建一个服务器或推测服务,该进程会查询,将其传递给模型,然后返回 inference 输出。
inference 服务还执行以下操作:
- 指定模型的位置和格式。
- 指定用于服务模型的服务运行时。
- 为 gRPC 或 REST inference 启用 passthrough 路由。
- 为部署的模型定义 HTTP 或 gRPC 端点。
以下示例显示了部署带有 vLLM 运行时的 granite 模型时生成的 InferenceService YAML 配置文件:
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
annotations:
openshift.io/display-name: granite
serving.knative.openshift.io/enablePassthrough: 'true'
sidecar.istio.io/inject: 'true'
sidecar.istio.io/rewriteAppHTTPProbers: 'true'
name: granite
labels:
opendatahub.io/dashboard: 'true'
spec:
predictor:
maxReplicas: 1
minReplicas: 1
model:
modelFormat:
name: vLLM
name: ''
resources:
limits:
cpu: '6'
memory: 24Gi
nvidia.com/gpu: '1'
requests:
cpu: '1'
memory: 8Gi
nvidia.com/gpu: '1'
runtime: vLLM ServingRuntime for KServe
storage:
key: aws-connection-my-storage
path: models/granite-7b-instruct/
tolerations:
- effect: NoSchedule
key: nvidia.com/gpu
operator: Exists
3.7. 支持的模型保留运行时 复制链接链接已复制到粘贴板!
OpenShift AI 包含多个预安装的模型运行时。您可以使用预安装的模型服务运行时启动服务模型,而无需自行修改或定义运行时。您还可以添加自定义运行时来支持模型。
有关添加自定义运行时的帮助,请参阅为单模型服务平台添加自定义模型运行时。
| Name | 描述 | 导出模型格式 |
|---|---|---|
| Caikit 文本 Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe (1) | Caikit 格式的服务模型的复合运行时 | Caikit 文本生成 |
| Caikit Standalone ServingRuntime for KServe (2) | Caikit 嵌入了嵌入任务的 Caikit 服务模型的运行时 | Caikit Embeddings |
| OpenVINO Model Server | 为为 Intel 架构优化的服务模型提供可扩展的高性能运行时 | PyTorch, TensorFlow, OpenVINO IR, PaddlePaddle, XDPNet, Caffe, Kaldi |
| 文本 Generation Inference Server (TGIS) Standalone ServingRuntime for KServe (3) | 为支持 TGI 的模型提供服务的运行时 | PyTorch Model Formats |
| vLLM ServingRuntime for KServe | 用于大型语言模型的高吞吐量和内存效率推测和服务运行时 | |
| vLLM ServingRuntime,带有对 KServe 的 Gaudi 加速器的支持 | 支持 Intel Gaudi Accelerator 的高吞吐量和内存效率推测和服务运行时 | |
| 用于 KServe 的 vLLM ROCm ServingRuntime | 支持 AMD GPU 加速器的高吞吐量和内存效率推测和服务运行时 |
- 复合 Caikit-TGIS 运行时基于 Caikit 和 文本 Generation Inference Server (TGIS)。要使用此运行时,您必须将模型转换为 Caikit 格式。例如,请参阅 cai kit-tgis-serving 存储库中的 Hugging Face Hub 模型转换为 Caikit 格式。
- Caikit 独立运行时基于 Caikit NLP。要使用此运行时,您必须将模型转换为 Caikit 嵌入格式。例如,请参阅 嵌入模块的文本 测试。
- 文本 Generation Inference Server (TGIS) 基于 Hugging Face TGI 的早期分叉。红帽将继续开发独立 TGIS 运行时来支持 TGI 模型。如果模型在当前版本的 OpenShift AI 中不兼容,则可能会在以后的版本中添加支持。同时,您还可以添加自己的自定义运行时来支持 TGI 模型。如需更多信息,请参阅为单模型服务平台添加自定义模型运行时。
| Name | 默认协议 | 附加组件协议 | 模型网格支持 | 单节点 OpenShift 支持 | 部署模式 |
|---|---|---|---|---|---|
| Caikit 文本 Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe | REST | gRPC | 否 | 是 | raw 和 serverless |
| Caikit Standalone ServingRuntime for KServe | REST | gRPC | 否 | 是 | raw 和 serverless |
| OpenVINO Model Server | REST | None | 是 | 是 | raw 和 serverless |
| 文本 Generation Inference Server (TGIS) Standalone ServingRuntime for KServe | gRPC | None | 否 | 是 | raw 和 serverless |
| vLLM ServingRuntime for KServe | REST | None | 否 | 是 | raw 和 serverless |
| vLLM ServingRuntime,带有对 KServe 的 Gaudi 加速器的支持 | REST | None | 否 | 是 | raw 和 serverless |
| 用于 KServe 的 vLLM ROCm ServingRuntime | REST | None | 否 | 是 | raw 和 serverless |
3.8. 测试和验证的模型保留运行时 复制链接链接已复制到粘贴板!
测试和验证的运行时是社区版本,针对特定的 OpenShift AI 版本进行测试和验证。
每次有新版本的 OpenShift AI 时,红帽都会测试经过测试和验证的运行时的当前版本。如果在 OpenShift AI 发行周期中发布经过测试和验证的运行时的新版本,它将在以后的发行版本中进行测试和验证。
OpenShift AI 发行注记 中提供了经过测试和验证的运行时和兼容版本的列表。
红帽不支持经过测试和验证的运行时。您需要确保已授权使用您添加的任何经过测试和验证的运行时,以及正确配置和维护它们。
如需更多信息,请参阅 OpenShift AI 中的测试和验证运行时。
| Name | 描述 | 导出模型格式 |
|---|---|---|
| NVIDIA Triton Inference Server | 为应用程序快速、可扩展的 AI 为开源服务软件提供服务。 | TensorRT, TensorFlow, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL 等 |
| Name | 默认协议 | 附加组件协议 | 模型网格支持 | 单节点 OpenShift 支持 | 部署模式 |
|---|---|---|---|---|---|
| NVIDIA Triton Inference Server | gRPC | REST | 是 | 是 | raw 和 serverless |
3.9. inference 端点 复制链接链接已复制到粘贴板!
这些示例演示了如何使用 inference 端点来查询模型。
如果您在部署模型时启用了令牌授权,请添加 Authorization 标头并指定令牌值。
3.9.1. Caikit TGIS ServingRuntime for KServe 复制链接链接已复制到粘贴板!
-
:443/api/v1/task/text-generation -
:443/api/v1/task/server-streaming-text-generation
示例命令
curl --json '{"model_id": "<model_name__>", "inputs": "<text>"}' https://<inference_endpoint_url>:443/api/v1/task/server-streaming-text-generation -H 'Authorization: Bearer <token>'
3.9.2. Caikit Standalone ServingRuntime for KServe 复制链接链接已复制到粘贴板!
如果您为多个模型提供服务,您可以查询 /info/models 或 :443 caikit.runtime.info.InfoService/GetModelsInfo 来查看服务模型列表。
REST 端点
-
/api/v1/task/embedding -
/api/v1/task/embedding-tasks -
/api/v1/task/sentence-similarity -
/api/v1/task/sentence-similarity-tasks -
/api/v1/task/rerank -
/api/v1/task/rerank-tasks -
/info/models -
/info/version -
/info/runtime
gRPC 端点
-
:443 caikit.runtime.Nlp.NlpService/EmbeddingTaskPredict -
:443 caikit.runtime.Nlp.NlpService/EmbeddingTasksPredict -
:443 caikit.runtime.Nlp.NlpService/SentenceSimilarityTaskPredict -
:443 caikit.runtime.Nlp.NlpService/SentenceSimilarityTasksPredict -
:443 caikit.runtime.Nlp.NlpService/RerankTaskPredict -
:443 caikit.runtime.Nlp.NlpService/RerankTasksPredict -
:443 caikit.runtime.info.InfoService/GetModelsInfo -
:443 caikit.runtime.info.InfoService/GetRuntimeInfo
默认情况下,Caikit 独立运行时会公开 REST 端点。要使用 gRPC 协议,请手动部署自定义 Caikit Standalone ServingRuntime。如需更多信息,请参阅为单模型服务平台添加自定义模型运行时。
caikit-tgis-serving GitHub 存储库中提供了一个示例清单。
REST
curl -H 'Content-Type: application/json' -d '{"inputs": "<text>", "model_id": "<model_id>"}' <inference_endpoint_url>/api/v1/task/embedding -H 'Authorization: Bearer <token>'
gRPC
grpcurl -d '{"text": "<text>"}' -H \"mm-model-id: <model_id>\" <inference_endpoint_url>:443 caikit.runtime.Nlp.NlpService/EmbeddingTaskPredict -H 'Authorization: Bearer <token>'
3.9.3. TGIS Standalone ServingRuntime for KServe 复制链接链接已复制到粘贴板!
-
:443 fmaas.GenerationService/Generate :443 fmaas.GenerationService/GenerateStream注意要查询 TGIS 独立运行时的端点,还必须在 OpenShift AI
text-generation-inference存储库的 proto 目录中下载文件。
示例命令
grpcurl -proto text-generation-inference/proto/generation.proto -d '{"requests": [{"text":"<text>"}]}' -H 'Authorization: Bearer <token>' -insecure <inference_endpoint_url>:443 fmaas.GenerationService/Generate
3.9.4. OpenVINO Model Server 复制链接链接已复制到粘贴板!
-
/v2/models/<model-name>/infer
示例命令
curl -ks <inference_endpoint_url>/v2/models/<model_name>/infer -d '{ "model_name": "<model_name>", "inputs": [{ "name": "<name_of_model_input>", "shape": [<shape>], "datatype": "<data_type>", "data": [<data>] }]}' -H 'Authorization: Bearer <token>'
3.9.5. vLLM ServingRuntime for KServe 复制链接链接已复制到粘贴板!
-
:443/version -
:443/docs -
:443/v1/models -
:443/v1/chat/completions -
:443/v1/completions -
:443/v1/embeddings -
:443/tokenize :443/detokenize注意- vLLM 运行时与 OpenAI REST API 兼容。有关 vLLM 运行时支持的模型列表,请参阅支持的模型。
- 要在 vLLM 中使用 embeddings inference 端点,您必须使用 vLLM 支持的嵌入式模型。您不能将 embeddings 端点与 generative 模型搭配使用。如需更多信息,请参阅 vLLM 中支持的嵌入模型。
从 vLLM v0.5.5 开始,您必须在使用
/v1/chat/completions端点查询模型时提供 chat 模板。如果您的模型不包含预定义的 chat 模板,您可以使用chat-template命令行参数在自定义 vLLM 运行时中指定 chat 模板,如示例所示。将<CHAT_TEMPLATE> 替换为模板的路径。containers: - args: - --chat-template=<CHAT_TEMPLATE>您可以在此处使用
.jinja文件提供的 chat 模板,或者使用/apps/data/template下的 vLLM 镜像。https://github.com/opendatahub-io/vllm/tree/main/examples如需更多信息,请参阅 Chat 模板。
如所示的路径所示,single-model 服务平台使用 OpenShift 路由器的 HTTPS 端口(通常是端口 443)来提供外部 API 请求。
示例命令
curl -v https://<inference_endpoint_url>:443/v1/chat/completions -H "Content-Type: application/json" -d '{ "messages": [{ "role": "<role>", "content": "<content>" }] -H 'Authorization: Bearer <token>'
3.9.6. vLLM ServingRuntime,带有对 KServe 的 Gaudi 加速器的支持 复制链接链接已复制到粘贴板!
3.9.7. 用于 KServe 的 vLLM ROCm ServingRuntime 复制链接链接已复制到粘贴板!
3.9.8. NVIDIA Triton Inference Server 复制链接链接已复制到粘贴板!
REST 端点
-
v2/models/[/versions/<model_version>]/infer -
v2/models/<model_name>[/versions/<model_version>] -
v2/health/ready -
v2/health/live -
v2/models/<model_name>[/versions/]/ready -
v2
ModelMesh 不支持以下 REST 端点:
-
v2/health/live -
v2/health/ready -
v2/models/<model_name>[/versions/]/ready
示例命令
curl -ks <inference_endpoint_url>/v2/models/<model_name>/infer -d '{ "model_name": "<model_name>", "inputs": [{ "name": "<name_of_model_input>", "shape": [<shape>], "datatype": "<data_type>", "data": [<data>] }]}' -H 'Authorization: Bearer <token>'
gRPC 端点
-
:443 inference.GRPCInferenceService/ModelInfer -
:443 inference.GRPCInferenceService/ModelReady -
:443 inference.GRPCInferenceService/ModelMetadata -
:443 inference.GRPCInferenceService/ServerReady -
:443 inference.GRPCInferenceService/ServerLive -
:443 inference.GRPCInferenceService/ServerMetadata
示例命令
grpcurl -cacert ./openshift_ca_istio_knative.crt -proto ./grpc_predict_v2.proto -d @ -H "Authorization: Bearer <token>" <inference_endpoint_url>:443 inference.GRPCInferenceService/ModelMetadata
3.10. 关于 KServe 部署模式 复制链接链接已复制到粘贴板!
默认情况下,您可以使用 Red Hat OpenShift Serverless 在单型号服务平台上部署模型,这是允许无服务器部署模型的云原生开发模型。OpenShift Serverless 基于开源 Knative 项目。另外,无服务器模式依赖于 Red Hat OpenShift Serverless Operator。
另外,您可以使用原始部署模式,它不依赖于 Red Hat OpenShift Serverless Operator。使用原始部署模式,您可以使用 Kubernetes 资源部署模型,如 Deployment、Service、Ingress 和 Horizontal Pod Autoscaler。
使用 KServe 原始部署模式部署机器学习模型是一个有限可用性功能。有限的可用性意味着您只能通过 Red Hat AI 事业部的特定批准方式安装和接收对该功能的支持。如果没有这样的批准,则不支持该功能。另外,这个功能只在单一节点 OpenShift 的自助管理部署中被支持。
使用每个部署模式都有优点和缺点:
3.10.1. Serverless 模式 复制链接链接已复制到粘贴板!
优点:
根据请求卷启用自动扩展:
- 在接收传入请求时,资源会自动扩展。
- 在高峰时间优化资源使用并保持性能。
支持使用 Knative 缩减到零和从零缩减:
- 当没有传入请求时,允许资源完全缩减。
- 通过不运行空闲资源来节约成本。
缺点:
具有自定义限制:
- Serverless 仅限于 Knative,比如在挂载多个卷时。
依赖于 Knative 进行扩展:
- 与传统的扩展方法相比,设置和管理增加了额外的复杂性。
3.10.2. 原始部署模式 复制链接链接已复制到粘贴板!
优点:
使用 Kubernetes 资源启用部署,如
Deployment、Service、Ingress和Horizontal Pod Autoscaler:- 提供对 Kubernetes 资源的完整控制,允许详细自定义和配置部署设置。
解锁 Knative 限制,如无法挂载多个卷:
- 对于需要复杂配置或多个存储挂载的应用程序有用。
缺点:
不支持自动扩展:
- 不支持在空闲时自动缩放为零资源。
- 可能会导致流量低期间成本更高。
- 需要手动管理缩放。
3.11. 使用 KServe 原始部署模式在单一节点 OpenShift 上部署模型 复制链接链接已复制到粘贴板!
您可以通过在单一节点 OpenShift 中使用 KServe 原始部署模式来部署机器学习模型。原始部署模式与 Knative 相比提供多个优点,比如挂载多个卷。
在单一节点 OpenShift 上使用 KServe 原始部署模式部署机器学习模型是一个有限可用性功能。有限的可用性意味着您只能通过 Red Hat AI 事业部的特定批准方式安装和接收对该功能的支持。如果没有这样的批准,则不支持该功能。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
- 具有集群管理员特权。
- 您已创建了一个具有至少 4 个 CPU 和 16 GB 内存的节点。
- 已安装 Red Hat OpenShift AI (RHOAI) Operator。
- 已安装 OpenShift 命令行界面(CLI)。有关安装 OpenShift 命令行界面(CLI)的更多信息,请参阅开始使用 OpenShift CLI。
- 已安装 KServe。
- 您可以访问 S3 兼容对象存储。
- 对于您要部署的模型,您知道 S3 兼容对象存储桶中的关联文件夹路径。
- 要使用 Caikit-TGIS 运行时,您需要将模型转换为 Caikit 格式。例如,请参阅 cai kit-tgis-serving 存储库中的 Hugging Face Hub 模型转换为 Caikit 格式。
- 如果要将图形处理单元(GPU)与模型服务器搭配使用,在 OpenShift AI 中启用了 GPU 支持。如果使用 NVIDIA GPU,请参阅启用 NVIDIA GPU。如果使用 AMD GPU,请参阅 AMD GPU 集成。
- 要使用 vLLM 运行时,已在 OpenShift AI 中启用 GPU 支持,并在集群中安装并配置了 Node Feature Discovery operator。如需更多信息,请参阅安装 Node Feature Discovery operator 和 启用 NVIDIA GPU。
流程
打开终端窗口并以集群管理员身份登录到 OpenShift 集群:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>默认情况下,OpenShift 使用服务网格进行网络流量管理。因为 KServe 原始部署模式不需要服务网格,所以禁用 Red Hat OpenShift Service Mesh:
输入以下命令禁用 Red Hat OpenShift Service Mesh:
$ oc edit dsci -n redhat-ods-operator在 YAML 编辑器中,将
serviceMesh组件的managementState值更改为Removed,如下所示:spec: components: serviceMesh: managementState: Removed- 保存更改。
创建一个项目:
$ oc new-project <project_name> --description="<description>" --display-name="<display_name>"有关创建项目的详情,请参考使用项目。
创建数据科学项目:
- 在 Red Hat OpenShift web 控制台 Administrator 视图中,点 Operators → Installed Operators,然后点 Red Hat OpenShift AI Operator。
- 点 Data Science Cluster 选项卡。
- 点 Create DataScienceCluster 按钮。
- 在 Configure via 字段中,点 YAML 视图 单选按钮。
在 YAML 编辑器的
spec.components部分中,配置kserve组件,如下所示:kserve: defaultDeploymentMode: RawDeployment managementState: Managed serving: managementState: Removed name: knative-serving- 点 Create。
创建 secret 文件:
在命令行终端中,创建一个 YAML 文件来包含您的 secret 并添加以下 YAML 代码:
apiVersion: v1 kind: Secret metadata: annotations: serving.kserve.io/s3-endpoint: <AWS_ENDPOINT> serving.kserve.io/s3-usehttps: "1" serving.kserve.io/s3-region: <AWS_REGION> serving.kserve.io/s3-useanoncredential: "false" name: <Secret-name> stringData: AWS_ACCESS_KEY_ID: "<AWS_ACCESS_KEY_ID>" AWS_SECRET_ACCESS_KEY: "<AWS_SECRET_ACCESS_KEY>"重要如果要在断开连接的部署中部署机器学习模型,请将
service.kserve.io/s3-verifyssl: '0'添加到metadata.annotations部分。- 使用文件名 secret.yaml 保存文件。
应用 secret.yaml 文件:
$ oc apply -f secret.yaml -n <namespace>
创建服务帐户:
创建一个 YAML 文件来包含您的服务帐户并添加以下 YAML 代码:
apiVersion: v1 kind: ServiceAccount metadata: name: models-bucket-sa secrets: - name: s3creds有关服务帐户的详情,请参阅 了解并创建服务帐户。
- 使用文件名 serviceAccount.yaml 保存该文件。
应用 serviceAccount.yaml 文件:
$ oc apply -f serviceAccount.yaml -n <namespace>
为服务运行时创建 YAML 文件,以定义将为您的模型预测提供的容器镜像。以下是使用 OpenVino Model Server 的示例:
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: ovms-runtime spec: annotations: prometheus.io/path: /metrics prometheus.io/port: "8888" containers: - args: - --model_name={{.Name}} - --port=8001 - --rest_port=8888 - --model_path=/mnt/models - --file_system_poll_wait_seconds=0 - --grpc_bind_address=0.0.0.0 - --rest_bind_address=0.0.0.0 - --target_device=AUTO - --metrics_enable image: quay.io/modh/openvino_model_server@sha256:6c7795279f9075bebfcd9aecbb4a4ce4177eec41fb3f3e1f1079ce6309b7ae45 name: kserve-container ports: - containerPort: 8888 protocol: TCP multiModel: false protocolVersions: - v2 - grpc-v2 supportedModelFormats: - autoSelect: true name: openvino_ir version: opset13 - name: onnx version: "1" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: paddle version: "2" - autoSelect: true name: pytorch version: "2"- 如果您使用上面的 OpenVINO Model Server 示例,请确保插入 YAML 代码中任何占位符所需的正确值。
- 使用适当的文件名保存文件。
应用包含服务运行时的文件:
$ oc apply -f <serving run time file name> -n <namespace>
创建 InferenceService 自定义资源(CR)。创建一个 YAML 文件,使其包含 InferenceService CR。使用之前使用的 OpenVINO Model Server 示例,以下是对应的 YAML 代码:
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: annotations: serving.knative.openshift.io/enablePassthrough: "true" sidecar.istio.io/inject: "true" sidecar.istio.io/rewriteAppHTTPProbers: "true" serving.kserve.io/deploymentMode: RawDeployment name: <InferenceService-Name> spec: predictor: scaleMetric: minReplicas: 1 scaleTarget: canaryTrafficPercent: serviceAccountName: <serviceAccountName> model: env: [] volumeMounts: [] modelFormat: name: onnx runtime: ovms-runtime storageUri: s3://<bucket_name>/<model_directory_path> resources: requests: memory: 5Gi volumes: []在 YAML 代码中,确保正确设置以下值:
-
serving.kserve.io/deploymentMode必须包含RawDeployment值。 -
modelFormat必须包含模型格式的值,如onnx。 -
storageUri必须包含模型 s3 存储目录的值,如s3://<bucket_name>/<model_directory_path>。 -
运行时必须包含服务运行时的名称的值,如ovms-runtime。
-
- 使用适当的文件名保存文件。
应用包含您的 InferenceService CR 的文件:
$ oc apply -f <InferenceService CR file name> -n <namespace>
验证所有 pod 是否都在集群中运行:
$ oc get pods -n <namespace>输出示例:
NAME READY STATUS RESTARTS AGE <isvc_name>-predictor-xxxxx-2mr5l 1/1 Running 2 165m console-698d866b78-m87pm 1/1 Running 2 165m验证所有 pod 是否在运行后,将服务端口转发到本地机器:
$ oc -n <namespace> port-forward pod/<pod-name> <local_port>:<remote_port>确保将 <
namespace>,<pod-name> , <localport> (这是模型服务器端口,如_port> , <remote_8888)替换为适合您的部署的值。
验证
-
使用您首选的客户端库或工具将请求发送到
localhostinference URL。
3.12. 使用单模式服务平台部署模型 复制链接链接已复制到粘贴板!
在单型号服务平台上,每个模型都部署在自己的模型服务器上。这有助于您部署、监控、扩展和维护需要增加资源的大型模型。
3.12.1. 启用单模型服务平台 复制链接链接已复制到粘贴板!
安装 KServe 后,您可以使用 Red Hat OpenShift AI 仪表板启用 single-model 服务平台。您还可以使用仪表板为平台启用模型运行时。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 已安装 KServe。
- 集群管理员 还没有 编辑 OpenShift AI 仪表板配置,以禁用选择使用 KServe 组件的 single-model serving 平台。如需更多信息,请参阅 Dashboard 配置选项。
流程
启用 single-model 服务平台,如下所示:
- 在左侧菜单中,点击 Settings → Cluster settings。
- 找到 Model serving platform 部分。
- 要为项目启用单型号服务平台,请选择 Single-model serving 平台 复选框。
- 点 Save Changes。
为单模型服务平台启用预安装运行时,如下所示:
在 OpenShift AI 仪表板的左侧菜单中,点 Settings → Serving runtime。
Serving 运行时 页面会显示预安装的运行时以及您添加的任何自定义运行时。
有关预安装运行时的更多信息,请参阅支持的运行时。
将要使用的运行时设置为 Enabled。
单型号服务平台现在可用于模型部署。
3.12.2. 为单模型服务平台添加自定义模型运行时 复制链接链接已复制到粘贴板!
模型运行时增加了对指定模型框架和这些框架支持的模型格式的支持。您可以使用 OpenShift AI 中包含的 预安装运行时。如果默认运行时不满足您的需要,您还可以添加自己的自定义运行时。例如,如果 TGIS 运行时不支持 Hugging Face Text Generation Inference (TGI) 支持的模型格式,您可以创建自定义运行时来添加对模型的支持。
作为管理员,您可以使用 OpenShift AI 接口来添加和启用自定义模型运行时。然后,您可以在单模式服务平台上部署模型时选择自定义运行时。
红帽不提供对自定义运行时的支持。您需要确保获得许可来使用您添加的任何自定义运行时,以及正确配置和维护它们。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 您已构建自定义运行时,并将镜像添加到容器镜像存储库中,如 Quay。
流程
在 OpenShift AI 仪表板中点 Settings > Serving runtime。
Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。
要添加自定义运行时,请选择以下选项之一:
- 要开始使用现有运行时(例如,KServe 的 TGIS Standalone ServingRuntime),请点现有运行时旁的操作菜单(WWN),然后点击 Duplicate。
- 要添加新的自定义运行时,请点 Add serving runtime。
- 在 Select the model service platform this runtime support 列表中,选择 Single-model serving platform。
- 在 Select the API 协议中,这个运行时支持 列表,选择 REST 或 gRPC。
可选:如果您启动一个新的运行时(而不是复制现有运行时),请选择以下选项之一来添加代码:
上传 YAML 文件
- 点 Upload files。
在文件浏览器中,选择计算机上的 YAML 文件。
嵌入的 YAML 编辑器将打开,并显示您上传的文件内容。
在编辑器中直接输入 YAML 代码
- 点 Start from scratch。
- 在嵌入式编辑器中直接输入或粘贴 YAML 代码。
注意在很多情况下,创建自定义运行时需要在
ServingRuntime规格的env部分中添加新或自定义参数。点击 Add。
Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的自定义运行时会自动启用。显示您在创建运行时时指定的 API 协议。
- 可选: 要编辑自定义运行时,点操作菜单(需要)并选择 Edit。
验证
- 您添加的自定义模型运行时显示在 Serving 运行时 页面中的 enabled 状态。
3.12.3. 为单模式服务平台添加经过测试和验证的模型运行时 复制链接链接已复制到粘贴板!
除了预安装和自定义模型服务运行时外,您还可以使用红帽经过测试和验证的模型运行时,如 NVIDIA Triton Inference Server 来支持您的需要。有关红帽经过测试和验证的运行时的更多信息,请参阅 Red Hat OpenShift AI 测试和验证的运行时。
您可以使用 Red Hat OpenShift AI 仪表板为单模式服务平台添加并启用 NVIDIA Triton Inference Server 运行时。然后,您可以在单模式服务平台上部署模型时选择运行时。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
流程
在 OpenShift AI 仪表板中点 Settings > Serving runtime。
Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。
- 点 Add serving runtime。
- 在 Select the model service platform this runtime support 列表中,选择 Single-model serving platform。
- 在 Select the API 协议中,这个运行时支持 列表,选择 REST 或 gRPC。
点 Start from scratch。
如果您选择了 REST API 协议,请直接在嵌入的编辑器中输入或粘贴以下 YAML 代码。
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: triton-kserve-rest labels: opendatahub.io/dashboard: "true" spec: annotations: prometheus.kserve.io/path: /metrics prometheus.kserve.io/port: "8002" containers: - args: - tritonserver - --model-store=/mnt/models - --grpc-port=9000 - --http-port=8080 - --allow-grpc=true - --allow-http=true image: nvcr.io/nvidia/tritonserver@sha256:xxxxx name: kserve-container resources: limits: cpu: "1" memory: 2Gi requests: cpu: "1" memory: 2Gi ports: - containerPort: 8080 protocol: TCP protocolVersions: - v2 - grpc-v2 supportedModelFormats: - autoSelect: true name: tensorrt version: "8" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: onnx version: "1" - name: pytorch version: "1" - autoSelect: true name: triton version: "2" - autoSelect: true name: xgboost version: "1" - autoSelect: true name: python version: "1"如果您选择了 gRPC API 协议,请直接在嵌入的编辑器中输入或粘贴以下 YAML 代码。
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: triton-kserve-grpc labels: opendatahub.io/dashboard: "true" spec: annotations: prometheus.kserve.io/path: /metrics prometheus.kserve.io/port: "8002" containers: - args: - tritonserver - --model-store=/mnt/models - --grpc-port=9000 - --http-port=8080 - --allow-grpc=true - --allow-http=true image: nvcr.io/nvidia/tritonserver@sha256:xxxxx name: kserve-container ports: - containerPort: 9000 name: h2c protocol: TCP volumeMounts: - mountPath: /dev/shm name: shm resources: limits: cpu: "1" memory: 2Gi requests: cpu: "1" memory: 2Gi protocolVersions: - v2 - grpc-v2 supportedModelFormats: - autoSelect: true name: tensorrt version: "8" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: onnx version: "1" - name: pytorch version: "1" - autoSelect: true name: triton version: "2" - autoSelect: true name: xgboost version: "1" - autoSelect: true name: python version: "1" volumes: - emptyDir: null medium: Memory sizeLimit: 2Gi name: shm
-
在
metadata.name字段中,确保您添加的运行时值与您已添加的运行时不匹配。 可选: 要为您添加的运行时使用自定义显示名称,请添加
metadata.annotations.openshift.io/display-name字段并指定一个值,如下例所示:apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: kserve-triton annotations: openshift.io/display-name: Triton ServingRuntime注意如果没有为您的运行时配置自定义显示名称,OpenShift AI 会显示
metadata.name字段的值。点 Create。
Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的运行时会自动启用。显示您在创建运行时时指定的 API 协议。
- 可选: 要编辑运行时,请点击操作菜单(WWN)并选择 Edit。
验证
- 您添加的 model-serving 运行时显示在 Serving 运行时 页面中的 enabled 状态。
3.12.4. 在单模型服务平台上部署模型 复制链接链接已复制到粘贴板!
当您启用了单型号服务平台时,您可以启用预安装或自定义模型运行时,并开始在平台上部署模型。
文本 Generation Inference Server (TGIS) 基于 Hugging Face TGI 的早期分叉。红帽将继续开发独立 TGIS 运行时来支持 TGI 模型。如果模型无法在 OpenShift AI 的当前版本中工作,则未来版本可能会添加支持。同时,您还可以添加自己的自定义运行时来支持 TGI 模型。如需更多信息,请参阅为单模型服务平台添加自定义模型运行时。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 已安装 KServe。
- 您已启用了 single-model 服务平台。
- 要为部署的模型启用令牌授权和外部模型路由,您已添加了 Authorino 作为授权供应商。如需更多信息,请参阅为 单模式服务平台添加授权供应商。
- 您已创建了数据科学项目。
- 您可以访问 S3 兼容对象存储。
- 对于您要部署的模型,您知道 S3 兼容对象存储桶中的关联文件夹路径。
- 要使用 Caikit-TGIS 运行时,您需要将模型转换为 Caikit 格式。例如,请参阅 cai kit-tgis-serving 存储库中的 Hugging Face Hub 模型转换为 Caikit 格式。
- 如果要将图形处理单元(GPU)与模型服务器搭配使用,在 OpenShift AI 中启用了 GPU 支持。如果使用 NVIDIA GPU,请参阅启用 NVIDIA GPU。如果使用 AMD GPU,请参阅 AMD GPU 集成。
- 要使用 vLLM 运行时,已在 OpenShift AI 中启用 GPU 支持,并在集群中安装并配置了 Node Feature Discovery operator。如需更多信息,请参阅安装 Node Feature Discovery operator 和 启用 NVIDIA GPU
- 要将 vLLM ServingRuntime 与 Gaudi Accelerators 支持 KServe 运行时,启用了对 OpenShift AI 中的混合处理单元(HPU)的支持。这包括安装 Intel Gaudi AI Accelerator operator 并配置加速器配置集。如需更多信息,请参阅为 OpenShift 设置 Gaudi 和 使用加速器。
要将 vLLM ROCm ServingRuntime 用于 KServe 运行时,您可以在 OpenShift AI 中启用了对 AMD 图形处理单元(GPU)的支持。这包括安装 AMD GPU operator 和配置加速器配置集。如需更多信息,请参阅在 OpenShift 上部署 AMD GPU 操作器 和使用加速器。
注意在 OpenShift AI 2.16 中,红帽支持 NVIDIA GPU、Intel Gaudi 和 AMD GPU 加速器用于模型服务。
部署 RHEL AI 模型:
- 您已为 KServe 运行时启用了 vLLM ServingRuntime。
- 您已从红帽容器注册中心下载了模型,并将其上传到 S3 兼容对象存储。
流程
在左侧菜单中,单击 Data Science Projects。
Data Science Projects 页面将打开。
点击您要在其中部署模型的项目的名称。
此时会打开项目详情页面。
- 点 Models 选项卡。
执行以下操作之一:
- 如果您看到 Single-model 服务平台 标题,请点击 Deploy model on the 标题。
- 如果没有看到任何标题,请点击 Deploy model 按钮。
此时会打开 Deploy model 对话框。
- 在 Model deployment name 字段中输入您要部署的模型的唯一名称。
- 在 Serving runtime 字段中,选择一个已启用的运行时。
- 在 Model 框架(名称 - version) 列表中选择一个值。
- 在要部署的模型服务器副本的 Number of model server replicas 中,指定一个值。
- 在 Model server size 列表中选择一个值。
只有在集群中启用了加速器支持并创建了加速器配置集时,以下选项才可用:
- 从 Accelerator 列表中,选择一个加速器。
- 如果在上一步中选择了加速器,请在 Number of accelerators 字段中指定要使用的加速器数。
- 可选:在 Model route 部分中,选择 Make deployed model available via an external route 复选框,使部署的模型可供外部客户端使用。
要要求对部署的模型对 inference 请求进行令牌授权,请执行以下操作:
- 选择 Require token authorization。
- 在 Service account name 字段中,输入要为其生成令牌的服务帐户名称。
要指定模型的位置,请执行以下操作之一:
使用现有连接
- 选择现有连接。
- 从 Name 列表中,选择一个您之前定义的连接。
在 Path 字段中输入在指定数据源中包含模型的文件夹路径。
重要OpenVINO Model Server 运行时对指定模型路径有具体要求。如需更多信息,请参阅 OpenShift AI 发行注记中的已知问题 RHOAIENG-3025。
使用新连接
要定义模型可访问的新连接,请选择 New connection。
在 Add connection modal 中,选择 Connection type。S3 兼容对象存储 和 URI 选项是预安装的连接类型。如果您的 OpenShift AI 管理员添加了其他选项,则可能会使用其他选项。
此时会打开 Add connection 表单,其中包含特定于您选择的连接类型的字段。
填写连接详情字段。
重要如果您的连接类型是 S3 兼容对象存储,您必须提供包含您的数据文件的文件夹路径。OpenVINO Model Server 运行时对指定模型路径有具体要求。如需更多信息,请参阅 OpenShift AI 发行注记中的已知问题 RHOAIENG-3025。
(可选)在 配置参数 部分中自定义运行时参数:
- 修改附加服务 运行时参数中的值,以定义部署模型的行为方式。
修改 附加环境变量中的值,以在模型环境中定义变量。
Configuration parameters 部分显示预定义的服务运行时参数(若有可用)。
注意不要修改端口或模型服务运行时参数,因为它们需要设置特定的值。覆盖这些参数可能会导致部署失败。
- 点 Deploy。
验证
- 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。
3.12.5. 为 KServe 设置超时 复制链接链接已复制到粘贴板!
当部署大型模型或使用 KServe 的节点自动扩展时,操作可能会在部署模型前超时,因为 KNative Serving 集的默认 progress-deadline 为 10 分钟。
如果部署使用 KNative Serving 的 pod 需要的时间超过 10 分钟,则 pod 可能会自动标记为失败。如果您部署的大型模型需要超过 10 分钟才能从 S3 兼容对象存储中提取,或者使用节点自动扩展来减少 GPU 节点的消耗,会出现这种情况。
要解决这个问题,您可以在应用程序的 KServe InferenceService 中设置自定义 progress-deadline。
先决条件
- 具有 OpenShift 集群的命名空间编辑访问权限。
流程
- 以集群管理员身份登录 OpenShift 控制台。
- 选择部署模型的项目。
- 在 Administrator 视角中,点击 Home → Search。
-
从 资源 下拉菜单中,搜索
InferenceService。 在
spec.predictor.annotations下,使用新超时修改service.knative.dev/progress-deadline:apiVersion: serving.kserve.io/v1alpha1 kind: InferenceService metadata: name: my-inference-service spec: predictor: annotations: serving.knative.dev/progress-deadline: 30m注意确保在
spec.predictor.annotations级别上设置progress-deadline,以便 KServeInferenceService可以将progress-deadline复制到 KNative Service 对象。
3.12.6. 自定义部署模型运行时的参数 复制链接链接已复制到粘贴板!
除了默认的模型或增强现有模型部署外,您可能需要额外的参数。在这种情况下,您可以修改现有运行时的参数以满足您的部署需求。
自定义运行时的参数仅会影响所选模型部署。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 您已在单模式服务平台上部署了模型。
流程
在 OpenShift AI 仪表板中点左侧菜单中的 Model Serving。
此时会打开 Deployed model 页面。
点击您要自定义的型号名称旁的操作菜单(swig),然后选择 Edit。
Configuration parameters 部分显示预定义的服务运行时参数(若有可用)。
在 Configuration parameters 部分中自定义运行时参数:
- 修改附加服务 运行时参数中的值,以定义部署模型的行为方式。
修改 附加环境变量中的值,以在模型环境中定义变量。
注意不要修改端口或模型服务运行时参数,因为它们需要设置特定的值。覆盖这些参数可能会导致部署失败。
- 完成自定义运行时参数后,点 Redeploy 以保存和部署模型。
验证
- 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。
使用以下方法之一确认您设置的参数和变量出现在
spec.predictor.model.args和spec.predictor.model.env中:- 从 OpenShift 控制台检查 InferenceService YAML.
在 OpenShift CLI 中使用以下命令:
oc get -o json inferenceservice <inferenceservicename/modelname> -n <projectname>
3.12.7. 可自定义模型服务运行时参数 复制链接链接已复制到粘贴板!
您可以修改现有模型服务运行时的参数,以满足您的部署需求。
有关每个支持的服务运行时的参数的更多信息,请参阅下表:
| 服务运行时 | 资源 |
|---|---|
| NVIDIA Triton Inference Server | |
| Caikit 文本 Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe | |
| Caikit Standalone ServingRuntime for KServe | |
| OpenVINO Model Server | |
| 文本 Generation Inference Server (TGIS) Standalone ServingRuntime for KServe | |
| vLLM ServingRuntime for KServe |
3.12.8. 使用 OCI 容器进行模型存储 复制链接链接已复制到粘贴板!
作为在 S3 存储桶或 URI 中存储模型的替代选择,您可以将模型上传到开放容器项目(OCI)容器中。使用 OCI 容器进行模型存储可帮助您:
- 通过避免多次下载同一模型来减少启动时间。
- 通过减少本地下载的模型数量来减少磁盘空间使用量。
- 通过允许预抓取镜像来提高模型性能。
使用 OCI 容器进行模型存储涉及以下任务:
- 在 OCI 镜像中存储模型
- 从 OCI 镜像部署模型
Red Hat OpenShift AI 2.16 当前提供了将 OCI 容器用于模型存储作为技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
3.12.8.1. 在 OCI 镜像中存储模型 复制链接链接已复制到粘贴板!
您可以在 OCI 镜像中存储模型。以下流程使用 ONNX 格式存储 mobileNet v2-7 模型的示例。
先决条件
- 您有 ONNX 格式的模型。此流程中的示例使用 ONNX 格式的 mobileNet v2-7 模型。
- 已安装 Podman 工具。
流程
在本地机器的终端窗口中,创建一个临时目录来存储模型以及创建 OCI 镜像所需的支持文件:
cd $(mktemp -d)在临时目录中创建一个
models文件夹:mkdir -p models/1注意这个示例命令指定子目录
1,因为 OpenVINO 需要编号的子目录进行建模。如果不使用 OpenVINO,则不需要创建1子目录来使用 OCI 容器镜像。下载模型和支持文件:
DOWNLOAD_URL=https://github.com/onnx/models/raw/main/validated/vision/classification/mobilenet/model/mobilenetv2-7.onnx curl -L $DOWNLOAD_URL -O --output-dir models/1/使用
tree命令确认模型文件按预期位于目录结构中:treetree命令应该返回类似以下示例的目录结构:. ├── Containerfile └── models └── 1 └── mobilenetv2-7.onnx创建名为
Containerfile的 Docker 文件:注意-
指定提供 shell 的基础镜像。在以下示例中,
ubi9-micro是基础镜像。您不能指定不提供 shell 的空镜像,如scratch,因为 KServe 使用 shell 来确保模型文件可以被模型服务器访问。 - 更改复制的模型文件的所有权,并为 root 组授予读取权限,以确保模型服务器可以访问该文件。OpenShift 使用随机用户 ID 和 root 组 ID 运行容器。
FROM registry.access.redhat.com/ubi9/ubi-micro:latest COPY --chown=0:0 models /models RUN chmod -R a=rX /models # nobody user USER 65534-
指定提供 shell 的基础镜像。在以下示例中,
使用
podman build命令创建 OCI 容器镜像,并将其上传到 registry。以下命令使用 Quay 作为 registry。注意如果您的存储库是私有的,请确保已向 registry 进行身份验证,然后再上传容器镜像。
podman build --format=oci -t quay.io/<user_name>/<repository_name>:<tag_name> . podman push quay.io/<user_name>/<repository_name>:<tag_name>
3.12.8.2. 部署存储在 OCI 镜像中的模型 复制链接链接已复制到粘贴板!
您可以部署存储在 OCI 镜像中的模型。
以下流程使用 ONNX 格式部署 mobileNet v2-7 模型的示例,存储在 OpenVINO 模型服务器上的 OCI 镜像中。
默认情况下,在 KServe 中,模型在集群外公开,不受授权保护。
先决条件
- 您已将模型存储在 OCI 镜像中,如在 OCI 镜像中存储模型 中所述。
- 如果要部署存储在私有 OCI 存储库中的模型,您必须配置镜像 pull secret。有关创建镜像 pull secret 的更多信息,请参阅使用镜像 pull secret。
- 已登陆到 OpenShift 集群。
流程
创建一个项目来部署模型:
oc new-project oci-model-example使用 OpenShift AI Applications 项目
kserve-ovms模板来创建ServingRuntime资源,并在新项目中配置 OpenVINO 模型服务器:oc process -n redhat-ods-applications -o yaml kserve-ovms | oc apply -f -验证名为
kserve-ovms的ServingRuntime是否已创建:oc get servingruntimes该命令应该返回类似如下的输出:
NAME DISABLED MODELTYPE CONTAINERS AGE kserve-ovms openvino_ir kserve-container 1m根据模型是否存储于私有还是公共 OCI 存储库,创建
InferenceServiceYAML 资源:对于存储在公共 OCI 存储库中的模型,创建一个带有以下值的
InferenceServiceYAML 文件,将 <user_name>、<>、<repository_name>、<tag_nametag_name> 的值替换为特定于您的环境的值:apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: sample-isvc-using-oci spec: predictor: model: runtime: kserve-ovms # Ensure this matches the name of the ServingRuntime resource modelFormat: name: onnx storageUri: oci://quay.io/<user_name>/<repository_name>:<tag_name> resources: requests: memory: 500Mi cpu: 100m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it limits: memory: 4Gi cpu: 500m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it对于存储在私有 OCI 存储库中的模型,请创建一个
InferenceServiceYAML 文件,该文件在spec.predictor.imagePullSecrets字段中指定您的 pull secret,如下例所示:apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: sample-isvc-using-private-oci spec: predictor: model: runtime: kserve-ovms # Ensure this matches the name of the ServingRuntime resource modelFormat: name: onnx storageUri: oci://quay.io/<user_name>/<repository_name>:<tag_name> resources: requests: memory: 500Mi cpu: 100m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it limits: memory: 4Gi cpu: 500m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it imagePullSecrets: # Specify image pull secrets to use for fetching container images, including OCI model images - name: <pull-secret-name>创建
InferenceService资源后,KServe 会部署storageUri字段引用的 OCI 镜像中存储的模型。
验证
检查部署的状态:
oc get inferenceservice
该命令应返回包含信息的输出,如部署模型的 URL 及其就绪状态。
3.12.9. 在 vLLM 中使用加速器 复制链接链接已复制到粘贴板!
OpenShift AI 包含对 NVIDIA、AMD 和 Intel Gaudi 加速器的支持。OpenShift AI 还包括预安装的模型服务运行时,提供加速器支持。
3.12.9.1. NVIDIA GPU 复制链接链接已复制到粘贴板!
您可以使用 vLLM ServingRuntime for KServe 运行时提供 NVIDIA 图形处理单元(GPU)的模型。要使用运行时,您必须在 OpenShift AI 中启用 GPU 支持。这包括在集群中安装和配置 Node Feature Discovery Operator。如需更多信息,请参阅安装 Node Feature Discovery operator 和 启用 NVIDIA GPU。
3.12.9.2. Intel Gaudi Accelerators 复制链接链接已复制到粘贴板!
您可以使用 vLLM ServingRuntime 和 Gaudi 加速器支持 Intel Gaudi Accelerators 为 Intel Gaudi Accelerators 提供模型。要使用运行时,您必须在 OpenShift AI 中启用混合处理支持(HPU)支持。这包括安装 Intel Gaudi AI Accelerator operator 并配置加速器配置集。如需更多信息,请参阅为 OpenShift 设置 Gaudi 和 使用加速器配置集。
有关推荐的 vLLM 参数、环境变量、支持的配置等信息,请参阅 带有 Intel® Gaudi® AI Accelerators 的 vLLM。
3.12.9.3. AMD GPU 复制链接链接已复制到粘贴板!
您可以使用 vLLM ROCm ServingRuntime for KServe 运行时提供 AMD GPU 的模型。要使用运行时,您必须在 OpenShift AI 中为 AMD 图形处理单元(GPU)启用支持。这包括安装 AMD GPU operator 和配置加速器配置集。如需更多信息,请参阅在 OpenShift 上部署 AMD GPU Operator 和 使用加速器配置集。
3.12.10. 自定义 vLLM 模型运行时 复制链接链接已复制到粘贴板!
在某些情况下,您可能需要在 vLLM ServingRuntime for KServe 运行时添加额外的标志或环境变量来部署一系列 LLM。
以下流程描述了自定义 vLLM 模型运行时,以部署 Llama、Granite 或 Mistral 模型。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 对于 Llama 模型部署,您已将 meta-llama-3 模型下载到对象存储中。
- 对于 Granite 模型部署,您已将 granite-7b-instruct 或 granite-20B-code-instruct 模型下载到您的对象存储中。
- 对于 Mistral 模型部署,您已将 mistral-7B-Instruct-v0.3 模型下载到对象存储。
- 您已为 KServe 运行时启用了 vLLM ServingRuntime。
- 您已在 OpenShift AI 中启用了 GPU 支持,并在集群中安装并配置了 Node Feature Discovery operator。如需更多信息,请参阅安装 Node Feature Discovery operator 和 启用 NVIDIA GPU
流程
- 按照以下步骤部署模型,如 在单模式服务平台上部署模型 中所述。
- 在 Serving runtime 字段中,为 KServe 选择 vLLM ServingRuntime。
如果要部署 meta-llama-3 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:
–-distributed-executor-backend=mp1 --max-model-len=61442 如果您要部署 granite-7B-instruct 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:
--distributed-executor-backend=mp1 - 1
- 将后端设置为分布式模型 worker 的多处理
如果您要部署 granite-20B-code-instruct 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:
--distributed-executor-backend=mp1 –-tensor-parallel-size=42 --max-model-len=64483 如果您要部署 mistral-7B-Instruct-v0.3 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:
--distributed-executor-backend=mp1 --max-model-len=153442 - 点 Deploy。
验证
- 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。
对于 granite 模型,请使用以下示例命令验证对部署的模型的 API 请求:
curl -q -X 'POST' \ "https://<inference_endpoint_url>:443/v1/chat/completions" \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d "{ \"model\": \"<model_name>\", \"prompt\": \"<prompt>", \"max_tokens\": <max_tokens>, \"temperature\": <temperature> }"
3.13. 使用多个 GPU 节点部署模型 复制链接链接已复制到粘贴板!
在多个 GPU 节点间部署模型以处理大型模型,如大型语言模型(LLM)。
此流程演示了如何使用 vLLM 服务框架在多个 GPU 节点上提供 Red Hat OpenShift AI 的模型。多节点推断使用 vllm-multinode-runtime 自定义运行时。vllm-multinode-runtime 运行时使用与 VLLM ServingRuntime for KServe 运行时相同的镜像,同时还包括多GPU推断所需的信息。
目前,Red Hat OpenShift AI 作为技术预览功能通过多个 GPU 节点部署模型。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围
先决条件
- 具有集群管理员特权。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI。
您已为 GPU 类型启用了 Operator,如 Node Feature Discovery Operator、Nvidia GPU Operator。有关启用加速器的更多信息,请参阅启用加速器。
-
您使用 NVIDIA GPU (
nvidia.com/gpu)。 -
您已通过
ServingRuntime或InferenceService指定 GPU 类型。如果ServingRuntime中指定的 GPU 类型与InferenceService中设置的不同,则两个 GPU 类型都会分配给资源,并可能导致错误。
-
您使用 NVIDIA GPU (
- 您已在集群中启用了 KServe。
-
您设置中只有一个 head pod。不要在
InferenceService中使用min_replicas或max_replicas设置来调整副本数。创建其他 head pod 可能会导致它们排除在 Ray 集群中。 - 您已为 ReadWriteMany (RWX)访问模式设置并配置了持久性卷声明(PVC)。
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>选择或创建用于部署模型的命名空间。例如,您可以运行以下命令来创建
kserve-demo命名空间:oc new-project kserve-demo在目标命名空间中,为模型存储创建一个 PVC,并指定存储类的名称。存储类必须是文件存储。
注意如果您已经配置了 PVC,您可以跳过这一步。
kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: granite-8b-code-base-pvc spec: accessModes: - ReadWriteMany volumeMode: Filesystem resources: requests: storage: 50Gi storageClassName: __<fileStorageClassName>__将模型下载到 PVC。例如:
apiVersion: v1 kind: Pod metadata: name: download-granite-8b-code labels: name: download-granite-8b-code spec: volumes: - name: model-volume persistentVolumeClaim: claimName: granite-8b-code-claim restartPolicy: Never initContainers: - name: fix-volume-permissions image: quay.io/quay/busybox@sha256:xxxxx command: ["sh"] args: ["-c", "mkdir -p /mnt/models/granite-8b-code-base && chmod -R 777 /mnt/models"] volumeMounts: - mountPath: "/mnt/models/" name: model-volume containers: - resources: requests: memory: 40Gi name: download-model imagePullPolicy: IfNotPresent image: quay.io/modh/kserve-storage-initializer@sha256:xxxxx args: - 's3://$<bucket_name>/granite-8b-code-base/' - /mnt/models/granite-8b-code-base env: - name: AWS_ACCESS_KEY_ID value: <id> - name: AWS_SECRET_ACCESS_KEY value: <secret> - name: BUCKET_NAME value: <bucket_name> - name: S3_USE_HTTPS value: "1" - name: AWS_ENDPOINT_URL value: <AWS endpoint> - name: awsAnonymousCredential value: 'false' - name: AWS_DEFAULT_REGION value: <region> volumeMounts: - mountPath: "/mnt/models/" name: model-volume创建
vllm-multinode-runtime自定义运行时:oc process vllm-multinode-runtime-template -n redhat-ods-applications|oc apply -n kserve-demo -f -使用以下
InferenceService配置部署模型:apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: annotations: serving.kserve.io/deploymentMode: RawDeployment serving.kserve.io/autoscalerClass: external name: granite-8b-code-base-pvc spec: predictor: model: modelFormat: name: vLLM runtime: vllm-multinode-runtime storageUri: pvc://granite-8b-code-base-pvc/granite-8b-code-base workerSpec: {}以下配置可以添加到
InferenceService中:-
workerSpec.tensorParallelSize:确定每个节点使用多少个 GPU。head 和 worker 节点部署资源中的 GPU 类型计数会自动更新。确保workerSpec.tensorParallelSize的值至少为1。 -
workerSpec.pipelineParallelSize: 确定部署中涉及多少个节点。此变量代表节点总数,包括头和 worker 节点。确保workerSpec.pipelineParallelSize的值至少为2。
-
验证
要确认您已将环境设置为在多个 GPU 节点上部署模型,请检查 GPU 资源状态、InferenceService 状态、ray 集群状态,并将请求发送到模型。
检查 GPU 资源状态:
检索 head 和 worker 节点的 pod 名称:
# Get pod name podName=$(oc get pod -l app=isvc.granite-8b-code-base-pvc-predictor --no-headers|cut -d' ' -f1) workerPodName=$(oc get pod -l app=isvc.granite-8b-code-base-pvc-predictor-worker --no-headers|cut -d' ' -f1) oc wait --for=condition=ready pod/${podName} --timeout=300s # Check the GPU memory size for both the head and worker pods: echo "### HEAD NODE GPU Memory Size" kubectl exec $podName -- nvidia-smi echo "### Worker NODE GPU Memory Size" kubectl exec $workerPodName -- nvidia-smi响应示例
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 550.90.07 Driver Version: 550.90.07 CUDA Version: 12.4 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA A10G On | 00000000:00:1E.0 Off | 0 | | 0% 33C P0 71W / 300W |19031MiB / 23028MiB <1>| 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ ... +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 550.90.07 Driver Version: 550.90.07 CUDA Version: 12.4 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA A10G On | 00000000:00:1E.0 Off | 0 | | 0% 30C P0 69W / 300W |18959MiB / 23028MiB <2>| 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+通过检查 <1> 和 <2> 的值来确认模型是否已正确加载。如果模型没有加载,则这些字段的值为
0MiB。
使用以下命令验证您的
InferenceService的状态:注意在技术预览中,您只能使用端口转发来推断。
oc wait --for=condition=ready pod/${podName} -n $DEMO_NAMESPACE --timeout=300s export MODEL_NAME=granite-8b-code-base-pvc响应示例
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE granite-8b-code-base-pvc http://granite-8b-code-base-pvc.default.example.com向模型发送请求,以确认模型可用于推测:
oc wait --for=condition=ready pod/${podName} -n vllm-multinode --timeout=300s oc port-forward $podName 8080:8080 & curl http://localhost:8080/v1/completions \ -H "Content-Type: application/json" \ -d "{ 'model': "$MODEL_NAME", 'prompt': 'At what temperature does Nitrogen boil?', 'max_tokens': 100, 'temperature': 0 }"
3.14. 对在 single-model 服务平台上部署的模型发出推测请求 复制链接链接已复制到粘贴板!
当您使用单模式服务平台部署模型时,该模型可作为服务使用 API 请求来访问。这可让您根据数据输入返回预测。要使用 API 请求与部署的模型交互,您必须知道模型的 inference 端点。
另外,如果您通过启用令牌授权保护您的 inference 端点,您必须了解如何访问授权令牌,以便在您的 inference 请求中指定它。
3.14.1. 访问已部署模型的授权令牌 复制链接链接已复制到粘贴板!
如果您通过启用令牌授权来保护模型 inference 端点,您必须了解如何访问授权令牌,以便在您的推测请求中指定它。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 已使用单模式服务平台部署了模型。
流程
在 OpenShift AI 仪表板中,点 Data Science Projects。
Data Science Projects 页面将打开。
点包含部署模型的项目名称。
此时会打开项目详情页面。
- 点 Models 选项卡。
在 Models 和 model servers 列表中,展开您的模型部分。
您的授权令牌显示在 Token secret 字段中的 Token authorization 部分中。
-
可选: 要复制用于 inference 请求的授权令牌,请点击令牌值旁的 Copy 按钮(
)。
3.14.2. 访问已部署模型的 inference 端点 复制链接链接已复制到粘贴板!
要对部署的模型发出推测请求,您必须了解如何访问可用的 inference 端点。
有关与支持的运行时和示例命令一起使用的路径列表,请参阅 Inference 端点。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 已使用单模式服务平台部署了模型。
- 如果为部署的模型启用了令牌授权,则具有关联的令牌值。
流程
在 OpenShift AI 仪表板中点 Model Serving。
模型的 inference 端点显示在 Inference endpoint 字段中。
- 根据您要使用模型执行的操作(如果模型支持该操作),复制 inference 端点,然后在 URL 的末尾添加一个路径。
- 使用端点向部署的模型发出 API 请求。
3.15. 为单模型服务平台配置监控 复制链接链接已复制到粘贴板!
单型号服务平台包括 KServe 组件支持的运行时 的指标。KServe 不会生成自己的指标,并依赖于底层模型服务运行时来提供它们。已部署模型的可用指标集合取决于其模型的运行时。
除了 KServe 的运行时指标外,您还可以为 OpenShift Service Mesh 配置监控。OpenShift Service Mesh 指标可帮助您了解网格中组件之间的依赖项和流量流。
先决条件
- 具有集群管理员特权。
- 您已创建了 OpenShift Service Mesh 和 Knative Serving 实例并安装了 KServe。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI。
- 您熟悉为监控用户定义的工作流 创建配置映射。您将在此流程中执行类似的步骤。
- 您熟悉 为 OpenShift 中的用户定义的项目启用监控。您将在此流程中执行类似的步骤。
-
您已将
monitoring-rules-view角色分配给将监控指标的用户。https://docs.redhat.com/en/documentation/openshift_container_platform/4.17/html/monitoring/enabling-monitoring-for-user-defined-projects#granting-users-permission-to-monitor-user-defined-projects_enabling-monitoring-for-user-defined-projects
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>在名为
uwm-cm-conf.yaml的 YAML 文件中定义ConfigMap对象,其内容如下:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: logLevel: debug retention: 15duser-workload-monitoring-config对象配置监控用户定义的项目的组件。观察到保留时间被设置为推荐的值 15 天。应用配置以创建
user-workload-monitoring-config对象。$ oc apply -f uwm-cm-conf.yaml在名为
uwm-cm-enable.yaml的 YAML 文件中定义另一个ConfigMap对象,其内容如下:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: truecluster-monitoring-config对象为用户定义的项目启用监控。应用配置以创建
cluster-monitoring-config对象。$ oc apply -f uwm-cm-enable.yaml创建
ServiceMonitor和PodMonitor对象来监控服务网格 control plane 中的指标,如下所示:使用以下内容创建
istiod-monitor.yamlYAML 文件:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: istiod-monitor namespace: istio-system spec: targetLabels: - app selector: matchLabels: istio: pilot endpoints: - port: http-monitoring interval: 30s在指定的
istio-system命名空间中部署ServiceMonitorCR。$ oc apply -f istiod-monitor.yaml您会看到以下输出:
servicemonitor.monitoring.coreos.com/istiod-monitor created使用以下内容创建
istio-proxies-monitor.yamlYAML 文件:apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: istio-proxies-monitor namespace: istio-system spec: selector: matchExpressions: - key: istio-prometheus-ignore operator: DoesNotExist podMetricsEndpoints: - path: /stats/prometheus interval: 30s在指定的
istio-system命名空间中部署PodMonitorCR。$ oc apply -f istio-proxies-monitor.yaml您会看到以下输出:
podmonitor.monitoring.coreos.com/istio-proxies-monitor created
3.16. 查看单模型服务平台的模型运行时指标 复制链接链接已复制到粘贴板!
当集群管理员为单模式服务平台配置了监控时,非管理员用户可以使用 OpenShift Web 控制台查看 KServe 组件的模型运行时指标。
先决条件
- 集群管理员为单模式服务平台配置了监控。
-
您已分配了
monitoring-rules-view角色。如需更多信息,请参阅 授予用户权限来为用户定义的项目配置监控。 - 您熟悉如何在 OpenShift Web 控制台中监控项目指标。如需更多信息,请参阅监控项目指标。
流程
- 登录 OpenShift Web 控制台。
- 切换到 Developer 视角。
- 在左侧菜单中,点 Observe。
如监控 项目指标 中所述,使用 Web 控制台运行对模型运行时指标的查询。您还可以对与 OpenShift Service Mesh 相关的指标运行查询。此时会显示一些示例。
以下查询显示了使用 vLLM 运行时部署模型的时间段内成功推测请求数:
sum(increase(vllm:request_success_total{namespace=${namespace},model_name=${model_name}}[${rate_interval}]))注意某些 vLLM 指标仅在由部署的模型处理了一个 inference 请求后可用。要生成并查看这些指标,您必须首先对模型发出 inference 请求。
以下查询显示了使用独立 TGIS 运行时部署的模型的成功推测请求数:
sum(increase(tgi_request_success{namespace=${namespace}, pod=~${model_name}-predictor-.*}[${rate_interval}]))以下查询显示了使用 Caikit Standalone 运行时部署的模型的成功 inference 请求数量:
sum(increase(predict_rpc_count_total{namespace=${namespace},code=OK,model_id=${model_name}}[${rate_interval}]))以下查询显示了使用 OpenVINO Model Server 运行时部署的模型的成功 inference 请求数量:
sum(increase(ovms_requests_success{namespace=${namespace},name=${model_name}}[${rate_interval}]))
3.17. 监控模型性能 复制链接链接已复制到粘贴板!
在单型号服务平台中,您可以查看平台上部署的特定模型的性能指标。
3.17.1. 查看已部署模型的性能指标 复制链接链接已复制到粘贴板!
您可以监控以下指标,以了解在单型号服务平台上部署的特定模型:
- 请求数 - 特定模型失败的请求数。
- 平均响应时间(ms)- 对请求做出特定模型的平均时间。
- CPU 使用率(%) -特定模型当前使用的每个模型副本的 CPU 限值百分比。
- 内存使用率(%) -特定模型使用的每个模型副本的内存限值百分比。
您可以为这些指标指定时间范围和刷新间隔,例如,当峰值使用小时以及模型在指定时间执行的方式时。
先决条件
- 已安装 Red Hat OpenShift AI。
- 集群管理员为 OpenShift 集群上的用户定义的项目启用了用户工作负载监控(UWM)。如需更多信息,请参阅 为用户定义的项目启用监控,以及为 单模式服务平台配置监控。
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 以下仪表板配置选项被设置为默认值,如下所示:
disablePerformanceMetrics:false disableKServeMetrics:false如需更多信息,请参阅 Dashboard 配置选项。
已使用预安装的运行时在单模式服务平台上部署了模型。
注意只有在使用预安装模型服务运行时或从预安装运行时重复的自定义运行时,指标只支持部署模型。
流程
在 OpenShift AI 仪表板导航菜单中点 Data Science Projects。
Data Science Projects 页面将打开。
- 点击包含您要监控的数据科学模型的项目名称。
- 在项目详情页面中,点 Models 选项卡。
- 选择您感兴趣的模型。
在 Endpoint performance 选项卡中,设置以下选项:
- 时间范围 -指定跟踪指标的时长。您可以选择其中一个值:1 小时、24 小时、7 天和 30 天。
- 刷新 interval - 指定指标页面中图形的频率(显示最新的数据)。您可以选择以下值之一:15 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、2 小时和 1 天。
- 向下滚动以查看请求数、平均响应时间、CPU 使用率和内存使用率的数据图形。
验证
Endpoint 性能 选项卡显示模型的指标图。
3.18. 优化模型运行时 复制链接链接已复制到粘贴板!
您可以选择增强 OpenShift AI 中提供的预装的模型服务运行时,以利用额外的优点和功能,如优化延迟、缩短延迟和调优资源分配。
您可以为 KServe 运行时配置 vLLM ServingRuntime,以使用规范解码(并行处理技术)来为大型语言模型(LLMs)优化推断时间。
您还可以配置运行时来支持对版本语言模型(VLM)的推断。VLM 是多模式模型的子集,可集成视觉和文本数据。
以下流程描述了为 KServe 运行时自定义 vLLM ServingRuntime,用于规范解码和多模式推断。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
- 如果您使用 vLLM 模型-serving 运行时与草案模型进行规范解码,您已将原始模型和规范模型存储在兼容 S3 对象存储中的同一文件夹中。
流程
- 按照以下步骤部署模型,如 单模型服务平台中的解放模型 中所述。
- 在 Serving runtime 字段中,为 KServe runtime 选择 vLLM ServingRuntime。
要通过与提示中的 ngrams 匹配 ngrams 来配置 vLLM 模型-serving 运行时,请在 Configuration parameters 部分的 Additional serving runtime 参数 中添加以下参数:
--speculative-model=[ngram] --num-speculative-tokens=<NUM_SPECULATIVE_TOKENS> --ngram-prompt-lookup-max=<NGRAM_PROMPT_LOOKUP_MAX> --use-v2-block-manager将
<NUM_SPECULATIVE_TOKENS> 和<NGRAM_PROMPT_LOOKUP_MAX> 替换为您自己的值。注意推断吞吐量因用于使用 n-gram 推测的模型而异。
要使用草案模型为 speculative decoding 配置 vLLM 模型- serving 运行时,请在 配置参数 部分的附加服务 运行时参数下添加以下参数:
--port=8080 --served-model-name={{.Name}} --distributed-executor-backend=mp --model=/mnt/models/<path_to_original_model> --speculative-model=/mnt/models/<path_to_speculative_model> --num-speculative-tokens=<NUM_SPECULATIVE_TOKENS> --use-v2-block-manager-
将
<path_to_speculative_model> 和 <path_to_original_model> 替换为兼容 S3 对象存储上的 speculative 模型和原始模型的路径。 -
将
<NUM_SPECULATIVE_TOKENS> 替换为您自己的值。
-
将
要为多模式推断配置 vLLM 模型运行时,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:
--trust-remote-code注意仅使用来自可信源的模型的
--trust-remote-code参数。- 点 Deploy。
验证
如果您为 speculative decoding 配置了 vLLM 模型-serving 运行时,请使用以下示例命令验证部署的模型的 API 请求:
curl -v https://<inference_endpoint_url>:443/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer <token>"如果您已经为多模式情况配置了 vLLM 模型定义运行时,请使用以下示例命令验证您部署的 vision-language 模型(VLM)的 API 请求:
curl -v https://<inference_endpoint_url>:443/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer <token>" -d '{"model":"<model_name>", "messages": [{"role":"<role>", "content": [{"type":"text", "text":"<text>" }, {"type":"image_url", "image_url":"<image_url_link>" } ] } ] }'
3.19. 性能优化和调整 复制链接链接已复制到粘贴板!
3.19.1. 确定 LLM 支持的应用程序的 GPU 要求 复制链接链接已复制到粘贴板!
在为由 OpenShift AI 上托管的 Large Language Model (LLM)支持的应用程序选择 GPU 时需要考虑以下因素。
以下指南可帮助您根据模型的大小和预期使用,确定应用程序的硬件要求。
-
估算内存需要 :一般的 thumb 规则是 16 位精度中带有
N参数的模型需要大约2N字节。例如,一个 8-billion-parameter 模型需要大约 16GB 的 GPU 内存,而 70-billion-parameter 模型则需要大约 140GB。 Quantization :要减少内存要求并可能提高吞吐量,您可以使用量化来加载或以较低精度格式(如 INT8、FP8 或 INT4)加载或运行模型。这可减少内存占用量,以牺牲模型准确性的降低。
注意KServe 模型服务运行时的 vLLM ServingRuntime 支持多种量化方法。有关支持的实现和兼容硬件的更多信息,请参阅支持的硬件来量化内核。
- 键值缓存的额外内存 :除了模型权重外,还需要 GPU 内存来存储注意的键值(KV)缓存,这会随着请求数量和每个请求的序列长度增加。这可能会影响实时应用程序的性能,特别是对于大型模型。
推荐的 GPU 配置 :
- 小模型(1B-8B 参数) :对于范围内的模型,带有 24GB 内存的 GPU 通常足以支持少量并发用户。
Medium Models (10B-34B 参数) :
- 20B 参数下的模型需要至少 48GB 的 GPU 内存。
- 20B 间的模型 - 34B 参数在单个 GPU 中至少需要 80GB 或更多内存。
- 大型模型(70B 参数) :此范围内的模型可能需要使用 10sor parallelism 技术在多个 GPU 之间分发。Tensor parallelism 允许模型跨越多个 GPU,通过释放 KV 缓存的额外内存来提高内部令牌延迟并增加最大批处理大小。当 GPU 具有快速互连(如 NVLink)时,Tensor parallelism 可以正常工作。
- 超大 模型(405B 参数): 对于非常大的模型,建议量化来减少内存需求。您还可以在多个 GPU 中使用管道并行分发模型,甚至在两个服务器间分发。这种方法允许您扩展单个服务器的内存限制,但为了获得最佳性能,需要仔细管理服务器间的通信。
为获得最佳结果,从较小的模型开始,然后根据需要扩展到更大的模型,使用并行和量化等技术以满足您的性能和内存要求。
3.19.2. 文本恢复和检索生成(RAG)应用程序的性能注意事项 复制链接链接已复制到粘贴板!
还有额外的因素,需要考虑文本恢复和 RAG 应用,以及处理用户上传的大型文档的 LLM 支持的服务。
- 较长的输入 序列:如果每个用户查询包含大型提示或大量上下文,则输入序列长度可能比典型的聊天应用程序要长得多。较长的输入序列长度会增加 填充时间,模型在生成响应前处理初始输入序列所需的时间,然后可能导致更高的 生存时间(TTFT)。较长的 TTFT 可能会影响应用程序的响应。最小化这个延迟以获得最佳用户体验。
- KV Cache Usage: Longer sequences 需要更多 GPU 内存用于 键值(KV)缓存。KV 缓存存储中间关注数据,以便在生成期间提高模型性能。每个请求的高 KV 缓存利用率需要有足够 GPU 内存的硬件设置。如果多个用户同时查询模型,这尤其重要,因为每个请求都会添加到总内存负载中。
- 最佳硬件配置 :为了保持响应速度并避免内存瓶颈,请选择具有足够内存的 GPU 配置。例如,无需在单个 24GB GPU 上运行 8B 模型,在更大的 GPU (如 48GB 或 80GB)上部署它,或通过为 KV 缓存提供更多内存空间并降低令牌延迟来提高性能。带有十个并行性的多GPU设置也可以帮助管理内存需求,并提高更大输入序列的效率。
总之,要确保基于文档的应用程序的最佳响应性和可扩展性,您必须优先选择具有高 GPU 内存容量的硬件,并考虑多 GPU 配置,以处理长输入序列和 KV 缓存增加的内存要求。
3.19.3. inference 性能指标 复制链接链接已复制到粘贴板!
延迟、吞吐量 和成本每百万令牌是 评估模型在推断过程中的响应生成效率时需要考虑的关键指标。这些指标提供了模型推测性能的综合视图,有助于平衡不同用例的速度、效率和成本。
3.19.3.1. latency 复制链接链接已复制到粘贴板!
对交互式或实时用例 的延迟 至关重要,并使用以下指标来测量:
- time-to-First-Token (TTFT) :初始请求和第一个令牌的生成之间的延迟(毫秒)。此指标对于流响应非常重要。
- Inter-Token Latency (ITL) :在第一个令牌后生成每个后续令牌所需的时间(以毫秒为单位),也与流相关。
- time -Per-Output-Token (TPOT): 对于非流请求,在输出序列中生成每个令牌的平均时间(毫秒)。
3.19.3.2. 吞吐量 复制链接链接已复制到粘贴板!
吞吐量 测量模型服务器的整体效率,并使用以下指标表示:
- Token per Second (TPS) :在所有活跃请求之间每秒生成的令牌总数。
- 每秒请求数(RPS) :每秒处理的请求数。RPS 与响应时间一样,对序列长度非常敏感。
3.19.3.3. 每百万令牌的成本 复制链接链接已复制到粘贴板!
每 Million 令牌的成本测量模型推测的经济性,表明了每百万个令牌所产生的成本。该指标有助于评估部署模型的经济可行性和可扩展性。
3.19.4. 解决 CUDA 内存不足错误 复制链接链接已复制到粘贴板!
在某些情况下,根据所使用的模型和硬件加速器,TGIS 内存自动调整算法可能会降低处理长序列所需的 GPU 内存量。这个错误计算可能会导致模型服务器进行 Compute Unified Architecture (CUDA)内存不足(OOM)错误响应。在这种情况下,您必须在 TGIS 模型运行时更新或添加额外的参数,如以下步骤所述。
先决条件
- 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
流程
在 OpenShift AI 仪表板中点 Settings > Serving runtime。
Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。
根据用于部署模型的运行时,执行以下操作之一:
- 如果您将预安装的 TGIS Standalone ServingRuntime 用于 KServe 运行时,请复制运行时以创建自定义版本,然后按照此流程的其余部分操作。有关复制预安装的 TGIS 运行时的更多信息,请参阅为单模型服务平台添加自定义模型运行时。
如果您已使用自定义 TGIS 运行时,点运行时旁边的操作菜单(ProductShortName),然后选择 Edit。
嵌入的 YAML 编辑器会打开并显示自定义模型服务运行时的内容。
添加或更新
BATCH_SAFETY_MARGIN环境变量,并将值设置为 30。同样,添加或更新ESTIMATE_MEMORY_BATCH_SIZE环境变量,并将值设为 8。spec: containers: env: - name: BATCH_SAFETY_MARGIN value: 30 - name: ESTIMATE_MEMORY_BATCH value: 8注意BATCH_SAFETY_MARGIN参数设置可用 GPU 内存百分比,以保存回安全边缘以避免 OOM 条件。BATCH_SAFETY_MARGIN的默认值为20。ESTIMATE_MEMORY_BATCH_SIZE参数设置内存自动调整算法中使用的批处理大小。ESTIMATE_MEMORY_BATCH_SIZE的默认值为16。点 Update。
Serving runtime 页面将打开,并显示安装的运行时列表。观察您更新的自定义模型运行时是否显示。
要重新部署模型以使参数更新生效,请执行以下操作:
- 在 OpenShift AI 仪表板中点 Model Serving > Deployed Models。
- 找到您要重新部署的型号,点模型旁边的操作菜单(&&),然后选择 Delete。
- 重新部署模型,如 在单模式服务平台上部署模型 中所述。
验证
- 您从模型服务器收到成功的响应,不再看到 CUDA OOM 错误。
3.20. 关于 NVIDIA NIM 模型服务平台 复制链接链接已复制到粘贴板!
您可以在 NVIDIA NIM 模型服务平台上使用 NVIDIA NIM inference 服务部署模型。
NVIDIA NIM 是 NVIDIA AI Enterprise 的一部分,是设计用于安全可靠的部署高性能 AI 模型影响云、数据中心和工作站的微服务。
3.20.1. 启用 NVIDIA NIM 模型服务平台 复制链接链接已复制到粘贴板!
作为管理员,您可以使用 Red Hat OpenShift AI 仪表板启用 NVIDIA NIM 模型服务平台。
如果您之前在 OpenShift AI 2.14 或 2.15 中启用了 NVIDIA NIM 模型服务平台,然后升级到更新的版本,重新输入 NVIDIA NGC API 密钥以重新启用 NVIDIA NIM 模型服务平台。
先决条件
- 您已以管理员身份登录到 Red Hat OpenShift AI。
- 您已启用了 single-model 服务平台。您不需要启用预安装的运行时。有关启用单模式服务平台的更多信息,请参阅启用单模式服务平台。
以下 OpenShift AI 仪表板配置已启用。
disableNIMModelServing: false如需更多信息,请参阅 Dashboard 配置选项。
- 您已在 OpenShift AI 中启用了 GPU 支持。如需更多信息,请参阅启用 NVIDIA GPU。
- 您有一个 NVIDIA Cloud Account (NCA),并可以访问 NVIDIA GPU Cloud (NGC)门户。如需更多信息,请参阅 NVIDIA GPU Cloud 用户指南。
- 您的 NCA 帐户与 NVIDIA AI Enterprise Viewer 角色关联。
- 您已在 NGC 门户中生成了 NGC API 密钥。如需更多信息,请参阅 NGC API 密钥。
流程
- 登录到 OpenShift AI。
- 在 OpenShift AI 仪表板的左侧菜单中,点击 Applications → Explore。
- 在 Explore 页面中,找到 NVIDIA NIM 标题。
- 在应用程序标题上点 Enable。
- 输入 NGC API 密钥,然后单击 Submit。
验证
- 您启用的 NVIDIA NIM 应用程序会出现在 Enabled 页面中。
3.20.2. 在 NVIDIA NIM 模型服务平台上部署模型 复制链接链接已复制到粘贴板!
当您启用了 NVIDIA NIM 模型服务平台 时,您可以开始在平台上部署 NVIDIA 优化模型。
先决条件
- 您已登陆到 Red Hat OpenShift AI。
-
如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如
rhoai-users或rhoai-admins)的一部分。 - 您已启用了 NVIDIA NIM 模型服务平台。
- 您已创建了数据科学项目。
- 您已在 OpenShift AI 中启用了图形处理单元(GPU)的支持。这包括安装 Node Feature Discovery operator 和 NVIDIA GPU Operator。如需更多信息,请参阅安装 Node Feature Discovery operator 和 启用 NVIDIA GPU。
流程
在左侧菜单中,单击 Data Science Projects。
Data Science Projects 页面将打开。
点击您要在其中部署模型的项目的名称。
此时会打开项目详情页面。
- 点 Models 选项卡。
在 Models 部分中,执行以下操作之一:
- 在 NVIDIA NIM 模型服务平台 标题上,点标题上的 Select NVIDIA NIM,然后点 Deploy model。
- 如果您之前选择了 NVIDIA NIM 模型服务类型,则 Models 页面会显示右上角的 NVIDIA 模型 服务以及 Deploy model 按钮。要继续,请单击 Deploy model。
此时会打开 Deploy model 对话框。
配置部署模型的属性,如下所示:
- 在 Model deployment name 字段中输入部署的唯一名称。
- 从 NVIDIA NIM 列表中,选择您要部署的 NVIDIA NIM 模型。如需更多信息,请参阅支持的模型
- 在 NVIDIA NIM 存储大小字段中,指定将创建用于存储 NVIDIA NIM 模型的集群存储 实例的大小。
- 在要部署的模型服务器副本的 Number of model server replicas 中,指定一个值。
- 在 Model server size 列表中选择一个值。
从 Accelerator 列表中,选择一个加速器。
此时会出现 加速器字段的数量。
- 在 Number of accelerators 字段中,指定要使用的加速器数。默认值为 1。
- 点 Deploy。
验证
- 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。