2.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

流程

  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 视图中,点 Operators Installed 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。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.