服务模型


Red Hat OpenShift AI Self-Managed 2.16

Red Hat OpenShift AI Self-Managed 中的服务模型

摘要

Red Hat OpenShift AI Self-Managed 中的服务模型。通过服务培训的模型,您可以测试并实施它们到智能应用程序中。

第 1 章 关于模型服务

在 Red Hat OpenShift AI 上提供受培训的模型意味着在 OpenShift 集群上部署模型进行测试,然后将它们集成到智能应用程序中。部署模型使其可作为服务使用 API 访问。这可让您根据通过 API 调用提供的数据输入返回预测。此过程称为模型 推断。当您为 OpenShift AI 提供模型时,仪表板中会显示您可以访问部署的模型的 inference 端点。

OpenShift AI 提供以下模型服务平台:

单模式服务平台
为了部署大型模型,如大型语言模型(LLMs),OpenShift AI 包含一个基于 KServe 组件的 单模型服务平台。由于每个模型都是从其自己的模型服务器部署的,因此单一模型服务平台可帮助您部署、监控、扩展和维护需要增加资源的大型模型。
多型号服务平台
为了部署小型和中型模型,OpenShift AI 包含一个基于 ModelMesh 组件的 多模式服务平台。在多模式服务平台上,您可以在相同的模型服务器上部署多种模型。部署的每个模型共享服务器资源。这种方法对具有有限计算资源或 Pod 的 OpenShift 集群而言有优势。

第 2 章 提供中小型和中型模型

为了部署小型和中型模型,OpenShift AI 包含一个基于 ModelMesh 组件的 多模式服务平台。在多型号服务平台上,可以从同一模型服务器部署多个模型并共享服务器资源。

2.1. 配置模型服务器

2.1.1. 启用多模式服务平台

要使用多型号服务平台,您必须首先启用平台。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 您的集群管理员 还没有 编辑 OpenShift AI 仪表板配置,以禁用选择使用 ModelMesh 组件的多型号服务平台的功能。如需更多信息,请参阅 Dashboard 配置选项

流程

  1. 在 OpenShift AI 仪表板的左侧菜单中,点 SettingsCluster settings
  2. 找到 Model serving platform 部分。
  3. 选择 Multi-model serving 平台 复选框。
  4. Save Changes

模型运行时增加了对指定模型框架和这些框架支持的模型格式的支持。默认情况下,多型号服务平台包括 OpenVINO 模型服务器运行时。如果默认运行时不满足您的需要,您还可以添加自己的自定义运行时,如支持特定的模型格式。

作为管理员,您可以使用 Red Hat OpenShift AI 仪表板来添加和启用自定义模型运行时。然后,您可以在为多型号服务平台创建新模型服务器时选择自定义运行时。

注意

红帽不提供对自定义运行时的支持。您需要确保获得许可来使用您添加的任何自定义运行时,以及正确配置和维护它们。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 您熟悉如何在 项目 中添加模型服务器。添加自定义模型运行时后,您必须配置新的模型服务器以使用运行时。
  • 您已查看了 kserve/modelmesh-serving 存储库中的运行时示例。您可以将这些示例用作起点。但是,每个运行时都需要一些进一步的修改,然后才能在 OpenShift AI 中部署它。以下流程描述了所需的修改。

    注意

    OpenShift AI 默认包含 OpenVINO 模型服务器运行时。您不需要将此运行时添加到 OpenShift AI。

流程

  1. 在 OpenShift AI 仪表板中点 Settings > Serving runtime

    Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。

  2. 要添加自定义运行时,请选择以下选项之一:

    • 要使用现有运行时(如 OpenVINO Model Server runtime)启动,请点现有运行时旁的操作菜单(alsa),然后点 Duplicate
    • 要添加新的自定义运行时,请点 Add serving runtime
  3. Select the model service platform this runtime support 列表中,选择 Multi-model serving platform

    注意

    多型号服务平台只支持 REST 协议。因此,您无法更改 此运行时支持的 Select the API 协议中的默认值

  4. 可选:如果您启动一个新的运行时(而不是复制现有运行时),请选择以下选项之一来添加代码:

    • 上传 YAML 文件

      1. Upload files
      2. 在文件浏览器中,选择计算机上的 YAML 文件。此文件可能是您从 kserve/modelmesh-serving 存储库下载的示例运行时之一。

        嵌入的 YAML 编辑器将打开,并显示您上传的文件内容。

    • 在编辑器中直接输入 YAML 代码

      1. Start from scratch
      2. 在嵌入式编辑器中直接输入或粘贴 YAML 代码。您粘贴的 YAML 可能会从 kserve/modelmesh-serving 存储库中的一个示例运行时复制。
  5. 可选:如果您要在 kserve/modelmesh-serving 仓库中添加其中一个示例运行时,请执行以下修改:

    1. 在 YAML 编辑器中,找到运行时的 kind 字段。将此字段的值更新为 ServingRuntime
    2. kserve/modelmesh-serving 存储库中的 kustomization.yaml 文件中,记录您要添加的运行时的 newNamenewTag 值。您将在后续步骤中指定这些值。
    3. 在自定义运行时的 YAML 编辑器中,找到 containers.image 字段。
    4. 根据之前在 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
  6. metadata.name 字段中,确保您添加的运行时值是唯一的(即,该值与您已添加的运行时不匹配)。
  7. 可选: 要为要添加的运行时配置自定义显示名称,请添加 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 字段的值。

  8. 点击 Add

    Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的运行时会自动启用。

  9. 可选: 要编辑自定义运行时,点操作菜单(需要)并选择 Edit

验证

  • 您添加的自定义模型运行时显示在 Serving 运行时 页面中的 enabled 状态。

除了预安装和自定义模型服务运行时外,您还可以使用红帽经过测试和验证的模型运行时,如 NVIDIA Triton Inference Server 来支持您的需要。有关红帽经过测试和验证的运行时的更多信息,请参阅 Red Hat OpenShift AI 测试和验证的运行时

您可以使用 Red Hat OpenShift AI 仪表板来添加和启用 NVIDIA Triton Inference Server 运行时,然后在为多模型服务平台创建新模型服务器时选择运行时。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 您熟悉如何在 项目 中添加模型服务器。添加经过测试和验证的模型运行时后,您必须配置新的模型服务器来使用运行时。

流程

  1. 在 OpenShift AI 仪表板中点 Settings > Serving runtime

    Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。

  2. 要添加经过测试和验证的运行时,请点 Add serving runtime
  3. Select the model service platform this runtime support 列表中,选择 Multi-model serving platform

    注意

    多型号服务平台只支持 REST 协议。因此,您无法更改 此运行时支持的 Select the API 协议中的默认值

  4. Start from scratch
  5. 在嵌入的编辑器中直接输入或粘贴以下 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"
  6. metadata.name 字段中,确保您添加的运行时值与您已添加的运行时不匹配。
  7. 可选: 要为您添加的运行时使用自定义显示名称,请添加 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 字段的值。

  8. Create

    Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的运行时会自动启用。

  9. 可选: 要编辑运行时,请点击操作菜单(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-usersrhoai-admins )的一部分。
  • 您已创建了可添加模型服务器的数据科学项目。
  • 您已启用了多型号服务平台。
  • 如果要将自定义模型运行时用于模型服务器,您添加了并启用运行时。请参阅 添加自定义模型运行时
  • 如果要将图形处理单元(GPU)与模型服务器搭配使用,在 OpenShift AI 中启用了 GPU 支持。如果使用 NVIDIA GPU,请参阅启用 NVIDIA GPU。如果使用 AMD GPU,请参阅 AMD GPU 集成

流程

  1. 在 OpenShift AI 仪表板的左侧菜单中,单击 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点您要为其配置模型服务器的项目名称。

    此时会打开项目详情页面。

  3. Models 选项卡。
  4. 执行以下操作之一:

    • 如果您看到 ​Multi-model 服务平台 标题,点标题上的 Add model server
    • 如果没有看到任何标题,请点击 Add model server 按钮。

    此时会打开 Add model server 对话框。

  5. Model server name 字段中输入模型服务器的唯一名称。
  6. Serving runtime 列表中,选择一个在 OpenShift AI 部署中安装并启用的模型运行时。

    注意

    如果您在模型服务器中使用 自定义 模型运行时并希望使用 GPU,您必须确保您的自定义运行时支持 GPU,并被适当配置为使用它们。

  7. Number of model replicas to deploy 字段中,指定一个值。
  8. Model server size 列表中选择一个值。
  9. 可选:如果您在上一步中选择了 Custom,请在 Model server size 部分中配置以下设置以自定义模型服务器:

    1. CPU 请求 字段中,指定要与模型服务器一起使用的 CPU 数量。使用此字段旁边的列表来指定内核或 millicores 的值。
    2. CPU limit 字段中,指定用于模型服务器的最大 CPU 数量。使用此字段旁边的列表来指定内核或 millicores 的值。
    3. Memory requested 字段中,以 KB (Gi)为单位为模型服务器指定请求的内存。
    4. Memory limit 字段中,以 KB (Gi)为单位为模型服务器指定最大内存限值。
  10. 可选:在 Accelerator 列表中选择一个加速器。

    1. 如果您在上一步中选择了加速器,请指定要使用的加速器数量。
  11. 可选:在 Model route 部分中,选择 Make deployed model available via an external route 复选框,使部署的模型可供外部客户端使用。
  12. 可选:在 Token authorization 部分,选择 Require token authentication 复选框,以为您的模型服务器进行令牌身份验证。要完成配置令牌身份验证,请执行以下操作:

    1. Service account name 字段中输入要为其生成令牌的服务帐户名称。配置模型服务器时,生成的令牌会被创建并显示在 Token secret 字段中。
    2. 要添加额外服务帐户,请点 Add a service account 并输入另一个服务帐户名称。
  13. 点击 Add

    • 您配置的模型服务器会出现在项目的 Models 选项卡中,位于 Models 和 model servers 列表中。
  14. 可选: 要更新模型服务器,请点击模型服务器旁边的操作菜单(alsa),然后选择 Edit model server

2.1.5. 删除模型服务器

当您不再需要模型服务器到主机模型时,您可以从您的数据科学项目中删除它。

注意

当您删除模型服务器时,您也会删除托管在该模型服务器上的模型。因此,应用程序不再使用模型。

先决条件

  • 您已创建了数据科学项目和关联的模型服务器。
  • 您已通知用户访问模型将不再可用的应用程序。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。

流程

  1. 在 OpenShift AI 仪表板中,点 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点您要从中删除模型服务器的项目名称。

    此时会打开项目详情页面。

  3. Models 选项卡。
  4. 点您要删除模型服务器的项目旁边的操作菜单(autotune),然后点 Delete model server

    此时会打开 Delete model server 对话框。

  5. 在文本字段中输入模型服务器的名称,以确认您想要删除它。
  6. Delete model server

验证

  • 您删除的模型服务器不再显示在项目的 Models 选项卡中。

2.2. 使用部署的模型

2.2.1. 使用多模式服务平台部署模型

您可以在 OpenShift AI 上部署受培训的模型,以便测试并实施它们到智能应用程序中。部署模型使其可作为服务使用 API 访问。这可让您根据数据输入返回预测。

当您启用了多模式服务平台时,您可以在平台上部署模型。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-users)的一部分。
  • 您已启用了多型号服务平台。
  • 您已创建了数据科学项目并添加了模型服务器。
  • 您可以访问 S3 兼容对象存储。
  • 对于您要部署的模型,您知道 S3 兼容对象存储桶中的关联文件夹路径。

流程

  1. 在 OpenShift AI 仪表板的左侧菜单中,单击 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点击您要在其中部署模型的项目的名称。

    此时会打开项目详情页面。

  3. Models 选项卡。
  4. 单击 Deploy model
  5. 配置部署模型的属性,如下所示:

    1. Model name 字段中输入您要部署的模型的唯一名称。
    2. Model 框架 列表中,为您的模型选择一个框架。

      注意

      Model 框架 列表仅显示配置模型服务器时指定的模型运行时支持的框架。

    3. 要指定您要从 S3 兼容对象存储部署的模型位置,请执行以下一组操作:

      • 使用现有连接

        1. 选择现有连接
        2. Name 列表中,选择一个您之前定义的连接。
        3. Path 字段中输入在指定数据源中包含模型的文件夹路径。
      • 使用新连接

        1. 要定义模型可访问的新连接,请选择 New connection
        2. Add connection modal 中,选择 Connection typeS3 兼容对象存储URI 选项是预安装的连接类型。如果您的 OpenShift AI 管理员添加了其他选项,则可能会使用其他选项。

          此时会打开 Add connection 表单,其中包含特定于您选择的连接类型的字段。

        3. 输入连接详情字段。
    4. (可选)在 配置参数 部分中自定义运行时参数:

      1. 修改附加服务 运行时参数中的值,以定义部署模型的行为方式。
      2. 修改 附加环境变量中的值,以在模型环境中定义变量。
    5. Deploy

验证

  • 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。

2.2.2. 查看部署的模型

要分析您的工作结果,您可以在 Red Hat OpenShift AI 中查看已部署模型的列表。您还可以查看部署模型及其端点的当前状态。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。

流程

  1. 在 OpenShift AI 仪表板中点 Model Serving

    此时会打开 Deployed model 页面。

    对于每个模型,页面会显示模型名称、部署模型的项目、模型使用的模型运行时以及部署状态等详情。

  2. 可选: 对于给定模型,点 Inference endpoint 列中的链接来查看部署模型的 inference 端点。

验证

  • Deployed models 页面中会显示之前部署的数据科学模型列表。

2.2.3. 更新已部署模型的部署属性

您可以更新之前部署的模型的部署属性。例如,您可以更改模型的连接和名称。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。
  • 您已在 OpenShift AI 中部署了模型。

流程

  1. 在 OpenShift AI 仪表板中点 Model Serving

    此时会打开 Deployed model 页面。

  2. 点您要更新的部署属性旁的操作菜单 (),然后点 Edit

    这会打开 Edit model 对话框。

  3. 更新模型的部署属性,如下所示:

    1. Model name 字段中,为您的模型输入一个新的、唯一的名称。
    2. Model servers 列表中,为您的模型选择一个模型服务器。
    3. Model 框架 列表中,为您的模型选择一个框架。

      注意

      Model 框架 列表仅显示配置模型服务器时指定的模型运行时支持的框架。

    4. (可选)通过指定现有连接或创建新连接来更新连接。
    5. 单击 重新部署

验证

  • 您更新的部署属性的模型会显示在仪表板的 Model Serving 页面中。

2.2.4. 删除部署的模型

您可以删除之前部署的模型。这可让您删除不再需要的部署模型。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。
  • 您已部署了模型。

流程

  1. 在 OpenShift AI 仪表板中点 Model serving

    此时会打开 Deployed model 页面。

  2. 点您要删除的部署模型旁的操作菜单 (),然后点 Delete

    此时会打开 Delete deployed model 对话框。

  3. 在文本字段中输入部署模型的名称,以确认您想要删除它。
  4. Delete deployed model

验证

  • 您删除的模型不再显示在 Deployed models 页面中。

2.3. 为多模型服务平台配置监控

多型号服务平台包括 ModelMesh 组件的模型和模型服务器指标。ModelMesh 生成自己的指标集合,不依赖于底层模型定义运行时来提供它们。ModelMesh 生成的指标集合包括模型请求率和时间的指标、模型加载和卸载率、时间和大小、内部排队延迟、容量和使用情况、缓存状态以及最早使用的模型。如需更多信息,请参阅 ModelMesh 指标

配置监控后,您可以查看 ModelMesh 组件的指标。

先决条件

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 在名为 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: 15d

    user-workload-monitoring-config 对象配置监控用户定义的项目的组件。观察到保留时间被设置为推荐的值 15 天。

  3. 应用配置以创建 user-workload-monitoring-config 对象。

    $ oc apply -f uwm-cm-conf.yaml
  4. 在名为 uwm-cm-enable.yaml 的 YAML 文件中定义另一个 ConfigMap 对象,其内容如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true

    cluster-monitoring-config 对象为用户定义的项目启用监控。

  5. 应用配置以创建 cluster-monitoring-config 对象。

    $ oc apply -f uwm-cm-enable.yaml

2.4. 查看多model服务平台的模型运行时指标

集群管理员为多模式服务平台配置了监控后,非管理员用户可以使用 OpenShift Web 控制台查看 ModelMesh 组件的模型运行时指标。

先决条件

流程

  1. 登录 OpenShift Web 控制台。
  2. 切换到 Developer 视角。
  3. 在左侧菜单中,点 Observe
  4. 如监控 项目指标 中所述,使用 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-usersrhoai-admins)的一部分。
  • 您已在多模式服务平台上部署了模型。

流程

  1. 在 OpenShift AI 仪表板导航菜单中点 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点击包含您要监控的数据科学模型的项目名称。
  3. 在项目详情页面中,点 Models 选项卡。
  4. 在您感兴趣的模型服务器所在的行中,点操作菜单(ProductShortName),然后选择 View model server metrics
  5. 可选:在模型服务器的指标页面中设置以下选项:

    • 时间范围 -指定跟踪指标的时长。您可以选择其中一个值:1 小时、24 小时、7 天和 30 天。
    • 刷新 interval - 指定指标页面中图形的频率(显示最新的数据)。您可以选择以下值之一:15 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、2 小时和 1 天。
  6. 向下滚动,以每 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-usersrhoai-admins)的一部分。
  • 您已在多模式服务平台上部署了模型。

流程

  1. 在 OpenShift AI 仪表板导航菜单中,选择 Model Serving
  2. Deployed model 页面中,选择您感兴趣的模型
  3. 可选:在 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 集群上创建 ServiceMeshControlPlaneKNativeServing 资源,您可以将 Red Hat OpenShift AI Operator 配置为安装 KServe 并配置其依赖项。

有关自动安装的更多信息,请参阅配置 KServe 的自动安装

手动安装

如果您已在 OpenShift 集群上创建了 ServiceMeshControlPlaneKNativeServing 资源,则无法 配置 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 运行时

您可以使用模型服务运行时在单模式服务平台上提供模型。模型服务运行时的配置由 ServingRuntimeInferenceService 自定义资源定义(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"]' 
1

    openshift.io/display-name: vLLM ServingRuntime for KServe 
2

  labels:
    opendatahub.io/dashboard: "true"
  name: vllm-runtime
spec:
     annotations:
          prometheus.io/path: /metrics 
3

          prometheus.io/port: "8080" 
4

     containers :
          - args:
               - --port=8080
               - --model=/mnt/models 
5

               - --served-model-name={{.Name}} 
6

             command: 
7

                  - python
                  - '-m'
                  - vllm.entrypoints.openai.api_server
             env:
                  - name: HF_HOME
                     value: /tmp/hf_home
             image: 
8

quay.io/modh/vllm@sha256:8a3dd8ad6e15fe7b8e5e471037519719d4d8ad3db9d69389f2beded36a6f5b21
          name: kserve-container
          ports:
               - containerPort: 8080
                   protocol: TCP
    multiModel: false 
9

    supportedModelFormats: 
10

        - 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 包含多个预安装的模型运行时。您可以使用预安装的模型服务运行时启动服务模型,而无需自行修改或定义运行时。您还可以添加自定义运行时来支持模型。

有关添加自定义运行时的帮助,请参阅为单模型服务平台添加自定义模型运行时

Expand
表 3.1. model-serving 运行时
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 加速器的高吞吐量和内存效率推测和服务运行时

支持的模型

  1. 复合 Caikit-TGIS 运行时基于 Caikit文本 Generation Inference Server (TGIS)。要使用此运行时,您必须将模型转换为 Caikit 格式。例如,请参阅 cai kit-tgis-serving 存储库中的 Hugging Face Hub 模型转换为 Caikit 格式
  2. Caikit 独立运行时基于 Caikit NLP。要使用此运行时,您必须将模型转换为 Caikit 嵌入格式。例如,请参阅 嵌入模块的文本 测试。
  3. 文本 Generation Inference Server (TGIS) 基于 Hugging Face TGI 的早期分叉。红帽将继续开发独立 TGIS 运行时来支持 TGI 模型。如果模型在当前版本的 OpenShift AI 中不兼容,则可能会在以后的版本中添加支持。同时,您还可以添加自己的自定义运行时来支持 TGI 模型。如需更多信息,请参阅为单模型服务平台添加自定义模型运行时
Expand
表 3.2. 部署要求
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 中的测试和验证运行时

Expand
表 3.3. model-serving 运行时
Name描述导出模型格式

NVIDIA Triton Inference Server

为应用程序快速、可扩展的 AI 为开源服务软件提供服务。

TensorRT, TensorFlow, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL 等

Expand
表 3.4. 部署要求
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>'

如需 KServe,请参阅 vLLM ServingRuntime

3.9.7. 用于 KServe 的 vLLM ROCm ServingRuntime

如需 KServe,请参阅 vLLM 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 资源部署模型,如 DeploymentServiceIngressHorizontal Pod Autoscaler

重要

使用 KServe 原始部署模式部署机器学习模型是一个有限可用性功能。有限的可用性意味着您只能通过 Red Hat AI 事业部的特定批准方式安装和接收对该功能的支持。如果没有这样的批准,则不支持该功能。另外,这个功能只在单一节点 OpenShift 的自助管理部署中被支持。

使用每个部署模式都有优点和缺点:

3.10.1. Serverless 模式

优点:

  • 根据请求卷启用自动扩展:

    • 在接收传入请求时,资源会自动扩展。
    • 在高峰时间优化资源使用并保持性能。
  • 支持使用 Knative 缩减到零和从零缩减:

    • 当没有传入请求时,允许资源完全缩减。
    • 通过不运行空闲资源来节约成本。

缺点:

  • 具有自定义限制:

    • Serverless 仅限于 Knative,比如在挂载多个卷时。
  • 依赖于 Knative 进行扩展:

    • 与传统的扩展方法相比,设置和管理增加了额外的复杂性。

3.10.2. 原始部署模式

优点:

  • 使用 Kubernetes 资源启用部署,如 DeploymentServiceIngressHorizontal Pod Autoscaler

    • 提供对 Kubernetes 资源的完整控制,允许详细自定义和配置部署设置。
  • 解锁 Knative 限制,如无法挂载多个卷:

    • 对于需要复杂配置或多个存储挂载的应用程序有用。

缺点:

  • 不支持自动扩展:

    • 不支持在空闲时自动缩放为零资源。
    • 可能会导致流量低期间成本更高。
  • 需要手动管理缩放。

您可以通过在单一节点 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

流程

  1. 打开终端窗口并以集群管理员身份登录到 OpenShift 集群:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 默认情况下,OpenShift 使用服务网格进行网络流量管理。因为 KServe 原始部署模式不需要服务网格,所以禁用 Red Hat OpenShift Service Mesh:

    1. 输入以下命令禁用 Red Hat OpenShift Service Mesh:

      $ oc edit dsci -n redhat-ods-operator
    2. 在 YAML 编辑器中,将 serviceMesh 组件的 managementState 值更改为 Removed,如下所示:

      spec:
        components:
          serviceMesh:
            managementState: Removed
    3. 保存更改。
  3. 创建一个项目:

    $ oc new-project <project_name> --description="<description>" --display-name="<display_name>"

    有关创建项目的详情,请参考使用项目

  4. 创建数据科学项目:

    1. 在 Red Hat OpenShift web 控制台 Administrator 视图中,点 OperatorsInstalled Operators,然后点 Red Hat OpenShift AI Operator。
    2. Data Science Cluster 选项卡。
    3. Create DataScienceCluster 按钮。
    4. Configure via 字段中,点 YAML 视图 单选按钮。
    5. 在 YAML 编辑器的 spec.components 部分中,配置 kserve 组件,如下所示:

        kserve:
          defaultDeploymentMode: RawDeployment
          managementState: Managed
          serving:
            managementState: Removed
            name: knative-serving
    6. Create
  5. 创建 secret 文件:

    1. 在命令行终端中,创建一个 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 部分。

    2. 使用文件名 secret.yaml 保存文件。
    3. 应用 secret.yaml 文件:

      $ oc apply -f secret.yaml -n <namespace>
  6. 创建服务帐户:

    1. 创建一个 YAML 文件来包含您的服务帐户并添加以下 YAML 代码:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: models-bucket-sa
      secrets:
      - name: s3creds

      有关服务帐户的详情,请参阅 了解并创建服务帐户

    2. 使用文件名 serviceAccount.yaml 保存该文件。
    3. 应用 serviceAccount.yaml 文件:

      $ oc apply -f serviceAccount.yaml -n <namespace>
  7. 为服务运行时创建 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"
    1. 如果您使用上面的 OpenVINO Model Server 示例,请确保插入 YAML 代码中任何占位符所需的正确值。
    2. 使用适当的文件名保存文件。
    3. 应用包含服务运行时的文件:

      $ oc apply -f <serving run time file name> -n <namespace>
  8. 创建 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: []
    1. 在 YAML 代码中,确保正确设置以下值:

      • serving.kserve.io/deploymentMode 必须包含 RawDeployment 值。
      • modelFormat 必须包含模型格式的值,如 onnx
      • storageUri 必须包含模型 s3 存储目录的值,如 s3://<bucket_name>/<model_directory_path>
      • 运行时 必须包含服务运行时的名称的值,如 ovms-runtime
    2. 使用适当的文件名保存文件。
    3. 应用包含您的 InferenceService CR 的文件:

      $ oc apply -f <InferenceService CR file name> -n <namespace>
  9. 验证所有 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
  10. 验证所有 pod 是否在运行后,将服务端口转发到本地机器:

    $ oc -n <namespace> port-forward pod/<pod-name> <local_port>:<remote_port>

    确保将 < namespace>, <pod-name & gt; , <local _port > , <remote_ port> (这是模型服务器端口,如 8888)替换为适合您的部署的值。

验证

  • 使用您首选的客户端库或工具将请求发送到 localhost inference URL。

3.12. 使用单模式服务平台部署模型

在单型号服务平台上,每个模型都部署在自己的模型服务器上。这有助于您部署、监控、扩展和维护需要增加资源的大型模型。

重要

如果要使用单一模型服务平台从使用自签名 SSL 证书的 S3 兼容存储中部署模型,您必须在 OpenShift 集群上安装证书颁发机构(CA)捆绑包。如需更多信息,请参阅 在断开连接的环境中 使用证书 (OpenShift AI Self-Managed)或使用 证书 (OpenShift AI Self-Managed )。

3.12.1. 启用单模型服务平台

安装 KServe 后,您可以使用 Red Hat OpenShift AI 仪表板启用 single-model 服务平台。您还可以使用仪表板为平台启用模型运行时。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 已安装 KServe。
  • 集群管理员 还没有 编辑 OpenShift AI 仪表板配置,以禁用选择使用 KServe 组件的 single-model serving 平台。如需更多信息,请参阅 Dashboard 配置选项

流程

  1. 启用 single-model 服务平台,如下所示:

    1. 在左侧菜单中,点击 SettingsCluster settings
    2. 找到 Model serving platform 部分。
    3. 要为项目启用单型号服务平台,请选择 Single-model serving 平台 复选框。
    4. Save Changes
  2. 为单模型服务平台启用预安装运行时,如下所示:

    1. 在 OpenShift AI 仪表板的左侧菜单中,点 SettingsServing runtime

      Serving 运行时 页面会显示预安装的运行时以及您添加的任何自定义运行时。

      有关预安装运行时的更多信息,请参阅支持的运行时

    2. 将要使用的运行时设置为 Enabled

      单型号服务平台现在可用于模型部署。

模型运行时增加了对指定模型框架和这些框架支持的模型格式的支持。您可以使用 OpenShift AI 中包含的 预安装运行时。如果默认运行时不满足您的需要,您还可以添加自己的自定义运行时。例如,如果 TGIS 运行时不支持 Hugging Face Text Generation Inference (TGI) 支持的模型格式,您可以创建自定义运行时来添加对模型的支持。

作为管理员,您可以使用 OpenShift AI 接口来添加和启用自定义模型运行时。然后,您可以在单模式服务平台上部署模型时选择自定义运行时。

注意

红帽不提供对自定义运行时的支持。您需要确保获得许可来使用您添加的任何自定义运行时,以及正确配置和维护它们。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 您已构建自定义运行时,并将镜像添加到容器镜像存储库中,如 Quay

流程

  1. 在 OpenShift AI 仪表板中点 Settings > Serving runtime

    Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。

  2. 要添加自定义运行时,请选择以下选项之一:

    • 要开始使用现有运行时(例如,KServe 的 TGIS Standalone ServingRuntime),请点现有运行时旁的操作菜单(WWN),然后点击 Duplicate
    • 要添加新的自定义运行时,请点 Add serving runtime
  3. Select the model service platform this runtime support 列表中,选择 Single-model serving platform
  4. Select the API 协议中,这个运行时支持 列表,选择 RESTgRPC
  5. 可选:如果您启动一个新的运行时(而不是复制现有运行时),请选择以下选项之一来添加代码:

    • 上传 YAML 文件

      1. Upload files
      2. 在文件浏览器中,选择计算机上的 YAML 文件。

        嵌入的 YAML 编辑器将打开,并显示您上传的文件内容。

    • 在编辑器中直接输入 YAML 代码

      1. Start from scratch
      2. 在嵌入式编辑器中直接输入或粘贴 YAML 代码。
    注意

    在很多情况下,创建自定义运行时需要在 ServingRuntime 规格的 env 部分中添加新或自定义参数。

  6. 点击 Add

    Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的自定义运行时会自动启用。显示您在创建运行时时指定的 API 协议。

  7. 可选: 要编辑自定义运行时,点操作菜单(需要)并选择 Edit

验证

  • 您添加的自定义模型运行时显示在 Serving 运行时 页面中的 enabled 状态。

除了预安装和自定义模型服务运行时外,您还可以使用红帽经过测试和验证的模型运行时,如 NVIDIA Triton Inference Server 来支持您的需要。有关红帽经过测试和验证的运行时的更多信息,请参阅 Red Hat OpenShift AI 测试和验证的运行时

您可以使用 Red Hat OpenShift AI 仪表板为单模式服务平台添加并启用 NVIDIA Triton Inference Server 运行时。然后,您可以在单模式服务平台上部署模型时选择运行时。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。

流程

  1. 在 OpenShift AI 仪表板中点 Settings > Serving runtime

    Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。

  2. Add serving runtime
  3. Select the model service platform this runtime support 列表中,选择 Single-model serving platform
  4. Select the API 协议中,这个运行时支持 列表,选择 RESTgRPC
  5. Start from scratch

    1. 如果您选择了 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"
    2. 如果您选择了 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
  6. metadata.name 字段中,确保您添加的运行时值与您已添加的运行时不匹配。
  7. 可选: 要为您添加的运行时使用自定义显示名称,请添加 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 字段的值。

  8. Create

    Serving 运行时页面将打开,并显示所安装的运行时的更新列表。观察您添加的运行时会自动启用。显示您在创建运行时时指定的 API 协议。

  9. 可选: 要编辑运行时,请点击操作菜单(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-usersrhoai-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 兼容对象存储。

流程

  1. 在左侧菜单中,单击 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点击您要在其中部署模型的项目的名称。

    此时会打开项目详情页面。

  3. Models 选项卡。
  4. 执行以下操作之一:

    • 如果您看到 ​Single-model 服务平台 标题,请点击 Deploy model on the 标题。
    • 如果没有看到任何标题,请点击 Deploy model 按钮。

    此时会打开 Deploy model 对话框。

  5. Model deployment name 字段中输入您要部署的模型的唯一名称。
  6. Serving runtime 字段中,选择一个已启用的运行时。
  7. Model 框架(名称 - version) 列表中选择一个值。
  8. 在要部署的模型服务器副本的 Number of model server replicas 中,指定一个值。
  9. Model server size 列表中选择一个值。
  10. 只有在集群中启用了加速器支持并创建了加速器配置集时,以下选项才可用:

    1. Accelerator 列表中,选择一个加速器。
    2. 如果在上一步中选择了加速器,请在 Number of accelerators 字段中指定要使用的加速器数。
  11. 可选:在 Model route 部分中,选择 Make deployed model available via an external route 复选框,使部署的模型可供外部客户端使用。
  12. 要要求对部署的模型对 inference 请求进行令牌授权,请执行以下操作:

    1. 选择 Require token authorization
    2. Service account name 字段中,输入要为其生成令牌的服务帐户名称。
  13. 要指定模型的位置,请执行以下操作之一:

    • 使用现有连接

      1. 选择现有连接
      2. Name 列表中,选择一个您之前定义的连接。
      3. Path 字段中输入在指定数据源中包含模型的文件夹路径。

        重要

        OpenVINO Model Server 运行时对指定模型路径有具体要求。如需更多信息,请参阅 OpenShift AI 发行注记中的已知问题 RHOAIENG-3025

    • 使用新连接

      1. 要定义模型可访问的新连接,请选择 New connection

        1. Add connection modal 中,选择 Connection typeS3 兼容对象存储URI 选项是预安装的连接类型。如果您的 OpenShift AI 管理员添加了其他选项,则可能会使用其他选项。

          此时会打开 Add connection 表单,其中包含特定于您选择的连接类型的字段。

      2. 填写连接详情字段。

        重要

        如果您的连接类型是 S3 兼容对象存储,您必须提供包含您的数据文件的文件夹路径。OpenVINO Model Server 运行时对指定模型路径有具体要求。如需更多信息,请参阅 OpenShift AI 发行注记中的已知问题 RHOAIENG-3025

  14. (可选)在 配置参数 部分中自定义运行时参数:

    1. 修改附加服务 运行时参数中的值,以定义部署模型的行为方式。
    2. 修改 附加环境变量中的值,以在模型环境中定义变量。

      Configuration parameters 部分显示预定义的服务运行时参数(若有可用)。

      注意

      不要修改端口或模型服务运行时参数,因为它们需要设置特定的值。覆盖这些参数可能会导致部署失败。

  15. 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 集群的命名空间编辑访问权限。

流程

  1. 以集群管理员身份登录 OpenShift 控制台。
  2. 选择部署模型的项目。
  3. Administrator 视角中,点击 HomeSearch
  4. 资源 下拉菜单中,搜索 InferenceService
  5. 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,以便 KServe InferenceService 可以将 progress-deadline 复制到 KNative Service 对象。

3.12.6. 自定义部署模型运行时的参数

除了默认的模型或增强现有模型部署外,您可能需要额外的参数。在这种情况下,您可以修改现有运行时的参数以满足您的部署需求。

注意

自定义运行时的参数仅会影响所选模型部署。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 您已在单模式服务平台上部署了模型。

流程

  1. 在 OpenShift AI 仪表板中点左侧菜单中的 Model Serving

    此时会打开 Deployed model 页面。

  2. 点击您要自定义的型号名称旁的操作菜单(swig),然后选择 Edit

    Configuration parameters 部分显示预定义的服务运行时参数(若有可用)。

  3. Configuration parameters 部分中自定义运行时参数:

    1. 修改附加服务 运行时参数中的值,以定义部署模型的行为方式。
    2. 修改 附加环境变量中的值,以在模型环境中定义变量。

      注意

      不要修改端口或模型服务运行时参数,因为它们需要设置特定的值。覆盖这些参数可能会导致部署失败。

  4. 完成自定义运行时参数后,点 Redeploy 以保存和部署模型。

验证

  • 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。
  • 使用以下方法之一确认您设置的参数和变量出现在 spec.predictor.model.argsspec.predictor.model.env 中:

    • 从 OpenShift 控制台检查 InferenceService YAML.
    • 在 OpenShift CLI 中使用以下命令:

      oc get -o json inferenceservice <inferenceservicename/modelname> -n <projectname>

3.12.7. 可自定义模型服务运行时参数

您可以修改现有模型服务运行时的参数,以满足您的部署需求。

有关每个支持的服务运行时的参数的更多信息,请参阅下表:

Expand
服务运行时资源

NVIDIA Triton Inference Server

NVIDIA Triton Inference Server: Model 参数

Caikit 文本 Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe

Caikit NLP: 配置
TGIS: Model 配置

Caikit Standalone ServingRuntime for KServe

Caikit NLP: 配置

OpenVINO Model Server

OpenVINO 模型服务器功能:动态输入参数

文本 Generation Inference Server (TGIS) Standalone ServingRuntime for KServe

TGIS: 模型配置

vLLM ServingRuntime for KServe

vLLM: Engine 参数
OpenAI 兼容服务器

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 工具。

流程

  1. 在本地机器的终端窗口中,创建一个临时目录来存储模型以及创建 OCI 镜像所需的支持文件:

    cd $(mktemp -d)
  2. 在临时目录中创建一个 models 文件夹:

    mkdir -p models/1
    注意

    这个示例命令指定子目录 1,因为 OpenVINO 需要编号的子目录进行建模。如果不使用 OpenVINO,则不需要创建 1 子目录来使用 OCI 容器镜像。

  3. 下载模型和支持文件:

    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/
  4. 使用 tree 命令确认模型文件按预期位于目录结构中:

    tree

    tree 命令应该返回类似以下示例的目录结构:

    .
    ├── Containerfile
    └── models
        └── 1
            └── mobilenetv2-7.onnx
  5. 创建名为 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
  6. 使用 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 中,模型在集群外公开,不受授权保护。

先决条件

流程

  1. 创建一个项目来部署模型:

    oc new-project oci-model-example
  2. 使用 OpenShift AI Applications 项目 kserve-ovms 模板来创建 ServingRuntime 资源,并在新项目中配置 OpenVINO 模型服务器:

    oc process -n redhat-ods-applications -o yaml kserve-ovms | oc apply -f -
  3. 验证名为 kserve-ovmsServingRuntime 是否已创建:

    oc get servingruntimes

    该命令应该返回类似如下的输出:

    NAME          DISABLED   MODELTYPE     CONTAINERS         AGE
    kserve-ovms              openvino_ir   kserve-container   1m
  4. 根据模型是否存储于私有还是公共 OCI 存储库,创建 InferenceService YAML 资源:

    • 对于存储在公共 OCI 存储库中的模型,创建一个带有以下值的 InferenceService YAML 文件,将 < user_name>、< repository_name>、<tag_name >、< tag_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 存储库中的模型,请创建一个 InferenceService YAML 文件,该文件在 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

流程

  1. 按照以下步骤部署模型,如 在单模式服务平台上部署模型 中所述
  2. Serving runtime 字段中,为 KServe 选择 vLLM ServingRuntime
  3. 如果要部署 meta-llama-3 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:

    –-distributed-executor-backend=mp 
    1
    
    --max-model-len=6144 
    2
    1
    将后端设置为分布式模型 worker 的多处理
    2
    将模型的最大上下文长度设置为 6144 令牌
  4. 如果您要部署 granite-7B-instruct 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:

    --distributed-executor-backend=mp 
    1
    1
    将后端设置为分布式模型 worker 的多处理
  5. 如果您要部署 granite-20B-code-instruct 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:

    --distributed-executor-backend=mp 
    1
    
    –-tensor-parallel-size=4 
    2
    
    --max-model-len=6448 
    3
    1
    将后端设置为分布式模型 worker 的多处理
    2
    在单个节点中分布 4 个 GPU 的干扰
    3
    将模型的最大上下文长度设置为 6448 令牌
  6. 如果您要部署 mistral-7B-Instruct-v0.3 模型,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:

    --distributed-executor-backend=mp 
    1
    
    --max-model-len=15344 
    2
    1
    将后端设置为分布式模型 worker 的多处理
    2
    将模型的最大上下文长度设置为 15344 令牌
  7. 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)。
    • 您已通过 ServingRuntimeInferenceService 指定 GPU 类型。如果 ServingRuntime 中指定的 GPU 类型与 InferenceService 中设置的不同,则两个 GPU 类型都会分配给资源,并可能导致错误。
  • 您已在集群中启用了 KServe。
  • 您设置中只有一个 head pod。不要在 InferenceService 中使用 min_replicasmax_replicas 设置来调整副本数。创建其他 head pod 可能会导致它们排除在 Ray 集群中。
  • 您已为 ReadWriteMany (RWX)访问模式设置并配置了持久性卷声明(PVC)。

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 选择或创建用于部署模型的命名空间。例如,您可以运行以下命令来创建 kserve-demo 命名空间:

    oc new-project kserve-demo
  3. 在目标命名空间中,为模型存储创建一个 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>__
  4. 将模型下载到 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
  5. 创建 vllm-multinode-runtime 自定义运行时:

    oc process vllm-multinode-runtime-template -n redhat-ods-applications|oc apply -n kserve-demo -f -
  6. 使用以下 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
            }"

当您使用单模式服务平台部署模型时,该模型可作为服务使用 API 请求来访问。这可让您根据数据输入返回预测。要使用 API 请求与部署的模型交互,您必须知道模型的 inference 端点。

另外,如果您通过启用令牌授权保护您的 inference 端点,您必须了解如何访问授权令牌,以便在您的 inference 请求中指定它。

3.14.1. 访问已部署模型的授权令牌

如果您通过启用令牌授权来保护模型 inference 端点,您必须了解如何访问授权令牌,以便在您的推测请求中指定它。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。
  • 已使用单模式服务平台部署了模型。

流程

  1. 在 OpenShift AI 仪表板中,点 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点包含部署模型的项目名称。

    此时会打开项目详情页面。

  3. Models 选项卡。
  4. Models 和 model servers 列表中,展开您的模型部分。

    您的授权令牌显示在 Token secret 字段中的 Token authorization 部分中。

  5. 可选: 要复制用于 inference 请求的授权令牌,请点击令牌值旁的 Copy 按钮( osd copy )。

3.14.2. 访问已部署模型的 inference 端点

要对部署的模型发出推测请求,您必须了解如何访问可用的 inference 端点。

有关与支持的运行时和示例命令一起使用的路径列表,请参阅 Inference 端点

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。
  • 已使用单模式服务平台部署了模型。
  • 如果为部署的模型启用了令牌授权,则具有关联的令牌值。

流程

  1. 在 OpenShift AI 仪表板中点 Model Serving

    模型的 inference 端点显示在 Inference endpoint 字段中。

  2. 根据您要使用模型执行的操作(如果模型支持该操作),复制 inference 端点,然后在 URL 的末尾添加一个路径。
  3. 使用端点向部署的模型发出 API 请求。

3.15. 为单模型服务平台配置监控

单型号服务平台包括 KServe 组件支持的运行时 的指标。KServe 不会生成自己的指标,并依赖于底层模型服务运行时来提供它们。已部署模型的可用指标集合取决于其模型的运行时。

除了 KServe 的运行时指标外,您还可以为 OpenShift Service Mesh 配置监控。OpenShift Service Mesh 指标可帮助您了解网格中组件之间的依赖项和流量流。

先决条件

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 在名为 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: 15d

    user-workload-monitoring-config 对象配置监控用户定义的项目的组件。观察到保留时间被设置为推荐的值 15 天。

  3. 应用配置以创建 user-workload-monitoring-config 对象。

    $ oc apply -f uwm-cm-conf.yaml
  4. 在名为 uwm-cm-enable.yaml 的 YAML 文件中定义另一个 ConfigMap 对象,其内容如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true

    cluster-monitoring-config 对象为用户定义的项目启用监控。

  5. 应用配置以创建 cluster-monitoring-config 对象。

    $ oc apply -f uwm-cm-enable.yaml
  6. 创建 ServiceMonitorPodMonitor 对象来监控服务网格 control plane 中的指标,如下所示:

    1. 使用以下内容创建 istiod-monitor.yaml YAML 文件:

      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
    2. 在指定的 istio-system 命名空间中部署 ServiceMonitor CR。

      $ oc apply -f istiod-monitor.yaml

      您会看到以下输出:

      servicemonitor.monitoring.coreos.com/istiod-monitor created
    3. 使用以下内容创建 istio-proxies-monitor.yaml YAML 文件:

      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
    4. 在指定的 istio-system 命名空间中部署 PodMonitor CR。

      $ oc apply -f istio-proxies-monitor.yaml

      您会看到以下输出:

      podmonitor.monitoring.coreos.com/istio-proxies-monitor created

3.16. 查看单模型服务平台的模型运行时指标

当集群管理员为单模式服务平台配置了监控时,非管理员用户可以使用 OpenShift Web 控制台查看 KServe 组件的模型运行时指标。

先决条件

流程

  1. 登录 OpenShift Web 控制台。
  2. 切换到 Developer 视角。
  3. 在左侧菜单中,点 Observe
  4. 如监控 项目指标 中所述,使用 Web 控制台运行对模型运行时指标的查询。您还可以对与 OpenShift Service Mesh 相关的指标运行查询。此时会显示一些示例。

    1. 以下查询显示了使用 vLLM 运行时部署模型的时间段内成功推测请求数:

      sum(increase(vllm:request_success_total{namespace=${namespace},model_name=${model_name}}[${rate_interval}]))
      注意

      某些 vLLM 指标仅在由部署的模型处理了一个 inference 请求后可用。要生成并查看这些指标,您必须首先对模型发出 inference 请求。

    2. 以下查询显示了使用独立 TGIS 运行时部署的模型的成功推测请求数:

      sum(increase(tgi_request_success{namespace=${namespace}, pod=~${model_name}-predictor-.*}[${rate_interval}]))
    3. 以下查询显示了使用 Caikit Standalone 运行时部署的模型的成功 inference 请求数量:

      sum(increase(predict_rpc_count_total{namespace=${namespace},code=OK,model_id=${model_name}}[${rate_interval}]))
    4. 以下查询显示了使用 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-usersrhoai-admins)的一部分。
  • 以下仪表板配置选项被设置为默认值,如下所示:

    disablePerformanceMetrics:false
    disableKServeMetrics:false

    如需更多信息,请参阅 Dashboard 配置选项

  • 已使用预安装的运行时在单模式服务平台上部署了模型。

    注意

    只有在使用预安装模型服务运行时或从预安装运行时重复的自定义运行时,指标只支持部署模型。

流程

  1. 在 OpenShift AI 仪表板导航菜单中点 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点击包含您要监控的数据科学模型的项目名称。
  3. 在项目详情页面中,点 Models 选项卡。
  4. 选择您感兴趣的模型。
  5. Endpoint performance 选项卡中,设置以下选项:

    • 时间范围 -指定跟踪指标的时长。您可以选择其中一个值:1 小时、24 小时、7 天和 30 天。
    • 刷新 interval - 指定指标页面中图形的频率(显示最新的数据)。您可以选择以下值之一:15 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、2 小时和 1 天。
  6. 向下滚动以查看请求数、平均响应时间、CPU 使用率和内存使用率的数据图形。

验证

Endpoint 性能 选项卡显示模型的指标图。

3.18. 优化模型运行时

您可以选择增强 OpenShift AI 中提供的预装的模型服务运行时,以利用额外的优点和功能,如优化延迟、缩短延迟和调优资源分配。

您可以为 KServe 运行时配置 vLLM ServingRuntime,以使用规范解码(并行处理技术)来为大型语言模型(LLMs)优化推断时间。

您还可以配置运行时来支持对版本语言模型(VLM)的推断。VLM 是多模式模型的子集,可集成视觉和文本数据。

以下流程描述了为 KServe 运行时自定义 vLLM ServingRuntime,用于规范解码和多模式推断。

先决条件

  • 您已以具有 OpenShift AI 管理员特权的用户身份登录到 OpenShift AI。
  • 如果您使用 vLLM 模型-serving 运行时与草案模型进行规范解码,您已将原始模型和规范模型存储在兼容 S3 对象存储中的同一文件夹中。

流程

  1. 按照以下步骤部署模型,如 单模型服务平台中的解放模型 中所述。
  2. Serving runtime 字段中,为 KServe runtime 选择 vLLM ServingRuntime
  3. 要通过与提示中的 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
    1. <NUM_SPECULATIVE_TOKENS&gt; 和 <NGRAM_PROMPT_LOOKUP_MAX > 替换为您自己的值。

      注意

      推断吞吐量因用于使用 n-gram 推测的模型而异。

  4. 要使用草案模型为 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
    1. <path_to_speculative_model & gt; 和 <path_to_original_model > 替换为兼容 S3 对象存储上的 speculative 模型和原始模型的路径。
    2. <NUM_SPECULATIVE_TOKENS > 替换为您自己的值。
  5. 要为多模式推断配置 vLLM 模型运行时,请在 Configuration parameters 部分中的 Additional service runtime 参数 中添加以下参数:

    --trust-remote-code
    注意

    仅使用来自可信源的模型的 --trust-remote-code 参数。

  6. 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 中使用管道并行分发模型,甚至在两个服务器间分发。这种方法允许您扩展单个服务器的内存限制,但为了获得最佳性能,需要仔细管理服务器间的通信。

为获得最佳结果,从较小的模型开始,然后根据需要扩展到更大的模型,使用并行和量化等技术以满足您的性能和内存要求。

还有额外的因素,需要考虑文本恢复和 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。

流程

  1. 在 OpenShift AI 仪表板中点 Settings > Serving runtime

    Serving 运行时 页面将打开,并显示已安装和启用的模型服务运行时。

  2. 根据用于部署模型的运行时,执行以下操作之一:

    • 如果您将预安装的 TGIS Standalone ServingRuntime 用于 KServe 运行时,请复制运行时以创建自定义版本,然后按照此流程的其余部分操作。有关复制预安装的 TGIS 运行时的更多信息,请参阅为单模型服务平台添加自定义模型运行时
    • 如果您已使用自定义 TGIS 运行时,点运行时旁边的操作菜单(ProductShortName),然后选择 Edit

      嵌入的 YAML 编辑器会打开并显示自定义模型服务运行时的内容。

  3. 添加或更新 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 的默认值为 20ESTIMATE_MEMORY_BATCH_SIZE 参数设置内存自动调整算法中使用的批处理大小。ESTIMATE_MEMORY_BATCH_SIZE 的默认值为 16

  4. Update

    Serving runtime 页面将打开,并显示安装的运行时列表。观察您更新的自定义模型运行时是否显示。

  5. 要重新部署模型以使参数更新生效,请执行以下操作:

    1. 在 OpenShift AI 仪表板中点 Model Serving > Deployed Models
    2. 找到您要重新部署的型号,点模型旁边的操作菜单(&&),然后选择 Delete
    3. 重新部署模型,如 在单模式服务平台上部署模型 中所述

验证

  • 您从模型服务器收到成功的响应,不再看到 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 密钥

流程

  1. 登录到 OpenShift AI。
  2. 在 OpenShift AI 仪表板的左侧菜单中,点击 ApplicationsExplore
  3. Explore 页面中,找到 NVIDIA NIM 标题。
  4. 在应用程序标题上点 Enable
  5. 输入 NGC API 密钥,然后单击 Submit

验证

  • 您启用的 NVIDIA NIM 应用程序会出现在 Enabled 页面中。

3.20.2. 在 NVIDIA NIM 模型服务平台上部署模型

当您启用了 NVIDIA NIM 模型服务平台 时,您可以开始在平台上部署 NVIDIA 优化模型。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。
  • 您已启用了 NVIDIA NIM 模型服务平台
  • 您已创建了数据科学项目。
  • 您已在 OpenShift AI 中启用了图形处理单元(GPU)的支持。这包括安装 Node Feature Discovery operator 和 NVIDIA GPU Operator。如需更多信息,请参阅安装 Node Feature Discovery operator启用 NVIDIA GPU

流程

  1. 在左侧菜单中,单击 Data Science Projects

    Data Science Projects 页面将打开。

  2. 点击您要在其中部署模型的项目的名称。

    此时会打开项目详情页面。

  3. Models 选项卡。
  4. Models 部分中,执行以下操作之一:

    • ​NVIDIA NIM 模型服务平台 标题上,点标题上的 Select NVIDIA NIM,然后点 Deploy model
    • 如果您之前选择了 NVIDIA NIM 模型服务类型,则 Models 页面会显示右上角的 NVIDIA 模型 服务以及 Deploy model 按钮。要继续,请单击 Deploy model

    此时会打开 Deploy model 对话框。

  5. 配置部署模型的属性,如下所示:

    1. Model deployment name 字段中输入部署的唯一名称。
    2. NVIDIA NIM 列表中,选择您要部署的 NVIDIA NIM 模型。如需更多信息,请参阅支持的模型
    3. NVIDIA NIM 存储大小字段中,指定将创建用于存储 NVIDIA NIM 模型的集群存储 实例的大小。
    4. 在要部署的模型服务器副本的 Number of model server replicas 中,指定一个值。
    5. Model server size 列表中选择一个值。
    6. Accelerator 列表中,选择一个加速器。

      此时会出现 加速器字段的数量

    7. Number of accelerators 字段中,指定要使用的加速器数。默认值为 1。
  6. Deploy

验证

  • 确认部署的模型显示在项目的 Models 选项卡中,并在仪表板的 Model Serving 页面中显示 Status 列中带有复选标记。

法律通告

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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部