第 6 章 Dynamic Accelerator Slicer (DAS) Operator


重要

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

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

Dynamic Accelerator Slicer (DAS) Operator 允许您在 OpenShift Container Platform 中动态分片 GPU 加速器,而不依赖在节点引导时定义的静态分片 GPU。这可让您根据特定工作负载需求动态分片 GPU,确保有效的资源利用率。

如果您不知道集群中每个节点前需要的所有加速器分区,则动态分片很有用。

DAS Operator 目前包含 NVIDIA Multi-Instance GPU (MIG) 的参考实施,并在以后支持其他供应商(如 NVIDIA MPS 或 GPU)的其它技术。

限制:

使用 Dynamic Accelerator Slicer Operator 时有以下限制:

  • 您需要识别潜在的不兼容性,并确保系统可以与各种 GPU 驱动程序和操作系统无缝配合工作。
  • Operator 只适用于特定的 MIG 兼容 NVIDIA GPU 和驱动程序,如 H100 和 A100。
  • Operator 无法只使用节点的 GPU 的子集。
  • NVIDIA 设备插件无法与 Dynamic Accelerator Slicer Operator 一起使用来管理集群的 GPU 资源。
注意

DAS Operator 设计为使用启用 MIG 的 GPU。它分配 MIG 片段而不是整个 GPU。安装 DAS Operator 可防止通过 NVIDIA 设备插件(如 nvidia.com/gpu: "1" )使用标准资源请求来分配整个 GPU。

6.1. 安装 Dynamic Accelerator Slicer Operator

作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台或 OpenShift CLI 安装 Dynamic Accelerator Slicer (DAS) Operator。

作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台安装 Dynamic Accelerator Slicer (DAS) Operator。

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。
  • 已安装所需的先决条件:

    • cert-manager Operator for Red Hat OpenShift
    • Node Feature Discovery (NFD) Operator
    • NVIDIA GPU Operator
    • NodeFeatureDiscovery CR

流程

  1. 为 MIG 支持配置 NVIDIA GPU Operator:

    1. 在 OpenShift Container Platform web 控制台中导航至 Operators Installed Operators
    2. 从安装的 Operator 列表中选择 NVIDIA GPU Operator
    3. ClusterPolicy 选项卡,然后点 Create ClusterPolicy
    4. 在 YAML 编辑器中,将默认内容替换为以下集群策略配置,以禁用默认的 NVIDIA 设备插件并启用 MIG 支持:

      apiVersion: nvidia.com/v1
      kind: ClusterPolicy
      metadata:
        name: gpu-cluster-policy
      spec:
        daemonsets:
          rollingUpdate:
            maxUnavailable: "1"
          updateStrategy: RollingUpdate
        dcgm:
          enabled: true
        dcgmExporter:
          config:
            name: ""
          enabled: true
          serviceMonitor:
            enabled: true
        devicePlugin:
          config:
            default: ""
            name: ""
          enabled: false
          mps:
            root: /run/nvidia/mps
        driver:
          certConfig:
            name: ""
          enabled: true
          kernelModuleConfig:
            name: ""
          licensingConfig:
            configMapName: ""
            nlsEnabled: true
          repoConfig:
            configMapName: ""
          upgradePolicy:
            autoUpgrade: true
            drain:
              deleteEmptyDir: false
              enable: false
              force: false
              timeoutSeconds: 300
            maxParallelUpgrades: 1
            maxUnavailable: 25%
            podDeletion:
              deleteEmptyDir: false
              force: false
              timeoutSeconds: 300
            waitForCompletion:
              timeoutSeconds: 0
          useNvidiaDriverCRD: false
          useOpenKernelModules: false
          virtualTopology:
            config: ""
        gdrcopy:
          enabled: false
        gds:
          enabled: false
        gfd:
          enabled: true
        mig:
          strategy: mixed
        migManager:
          config:
            default: ""
            name: default-mig-parted-config
          enabled: true
          env:
            - name: WITH_REBOOT
              value: 'true'
            - name: MIG_PARTED_MODE_CHANGE_ONLY
              value: 'true'
        nodeStatusExporter:
          enabled: true
        operator:
          defaultRuntime: crio
          initContainer: {}
          runtimeClass: nvidia
          use_ocp_driver_toolkit: true
        sandboxDevicePlugin:
          enabled: true
        sandboxWorkloads:
          defaultWorkload: container
          enabled: false
        toolkit:
          enabled: true
          installDir: /usr/local/nvidia
        validator:
          plugin:
            env:
            - name: WITH_WORKLOAD
              value: "false"
          cuda:
            env:
            - name: WITH_WORKLOAD
              value: "false"
        vfioManager:
          enabled: true
        vgpuDeviceManager:
          enabled: true
        vgpuManager:
          enabled: false
      Copy to Clipboard Toggle word wrap
    5. Create 应用集群策略。
    6. 进入到 Workloads Pods,再选择 nvidia-gpu-operator 命名空间来监控集群策略部署。
    7. 等待 NVIDIA GPU Operator 集群策略达到 Ready 状态。您可以通过以下方法监控它:

      1. 进入到 Operators Installed Operators NVIDIA GPU Operator
      2. ClusterPolicy 选项卡,检查状态是否显示 ready
    8. 选择 nvidia-gpu-operator 命名空间并进入到 Workloads Pods 来验证 NVIDIA GPU Operator 命名空间中的所有 pod 是否正在运行。
    9. 使用支持 MIG 的 GPU 标签节点以启用 MIG 模式:

      1. 进入 Compute Nodes
      2. 选择具有 MIG 功能 GPU 的节点。
      3. Actions Edit Labels
      4. 添加标签 nvidia.com/mig.config=all-enabled
      5. 点击 Save
      6. 对具有 MIG 功能 GPU 的每个节点重复此操作。

        重要

        应用 MIG 标签后,标记的节点将重新引导以启用 MIG 模式。等待节点恢复在线,然后继续。

    10. 通过检查 nvidia.com/mig.config=all-enabled 标签出现在 Labels 部分中,验证 GPU 节点上的 MIG 模式是否已成功启用。要找到标签,进入到 Compute Nodes,选择 GPU 节点,然后点 Details 选项卡。
  2. 在 OpenShift Container Platform Web 控制台中,点击 Operators OperatorHub
  3. 在过滤器框中搜索 Dynamic Accelerator SlicerDAS,以查找 DAS Operator。
  4. 选择 Dynamic Accelerator Slicer,再点 Install
  5. Install Operator 页中:

    1. 为安装模式选择 All namespaces on the cluster (default)
    2. 选择 Installed Namespace Operator recommended Namespace: Project das-operator
    3. 如果创建新命名空间,请输入 das-operator 作为命名空间名称。
    4. 选择一个更新频道。
    5. 为批准策略选择 AutomaticManual
  6. Install
  7. 在 OpenShift Container Platform web 控制台中,点击 Operators Installed Operators
  8. 从列表中选择 DAS Operator
  9. Provided APIs 表列中,点 DASOperator。这会进入 Operator 详情页的 DAS Operator 选项卡。
  10. Create DASOperator。这会进入 Create DASOperator YAML 视图。
  11. 在 YAML 编辑器中,粘贴以下示例:

    DASOperator CR 示例

    apiVersion: inference.redhat.com/v1alpha1
    kind: DASOperator
    metadata:
      name: cluster 
    1
    
      namespace: das-operator
    spec:
      logLevel: Normal
      operatorLogLevel: Normal
      managementState: Managed
    Copy to Clipboard Toggle word wrap

    1
    DASOperator CR 的名称必须是 cluster
  12. Create

验证

验证 DAS Operator 是否已成功安装:

  1. 导航到 Operators Installed Operators 页面。
  2. 确保 das-operator 命名空间中列出了 Dynamic Accelerator SlicerStatusSucceeded

验证 DASOperator CR 是否已成功安装:

  • 创建 DASOperator CR 后,Web 控制台会进入 DASOperator 列表视图。当所有组件都运行时,CR 的 Status 字段将变为 Available
  • 可选。您可以通过在 OpenShift CLI 中运行以下命令来验证 DASOperator CR 是否已成功安装:

    $ oc get dasoperator -n das-operator
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME     	STATUS    	AGE
    cluster  	Available	3m
    Copy to Clipboard Toggle word wrap

注意

在安装过程中,Operator 可能会显示 Failed 状态。如果安装后安装成功并显示 Succeeded 信息,您可以忽略 Failed 信息。

您还可以通过检查 pod 来验证安装:

  1. 进入到 Workloads Pods 页,再选择 das-operator 命名空间。
  2. 验证所有 DAS Operator 组件 pod 是否正在运行:

    • DAS-operator pod (主 operator 控制器)
    • dAS-operator-webhook pod (webhook 服务器)
    • dAS-scheduler pod (scheduler 插件)
    • DAS-daemonset pod (仅在具有 MIG 兼容 GPU 的节点上)
注意

das-daemonset pod 只会出现在具有 MIG 兼容的 GPU 硬件的节点上。如果没有看到任何 daemonset pod,请验证集群是否有带有支持的 GPU 硬件的节点,并且 NVIDIA GPU Operator 是否已正确配置。

故障排除

如果没有安装 Operator,请使用以下步骤:

  1. 导航到 Operators Installed Operators 页面,检查 Operator SubscriptionsInstall Plans 选项卡中的 Status 项中是否有任何错误。
  2. 进入到 Workloads Pods 页,在 das-operator 命名空间中检查 pod 的日志。

6.1.2. 使用 CLI 安装动态加速器 Slicer Operator

作为集群管理员,您可以使用 OpenShift CLI 安装 Dynamic Accelerator Slicer (DAS) Operator。

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。
  • 已安装 OpenShift CLI(oc)。
  • 已安装所需的先决条件:

    • cert-manager Operator for Red Hat OpenShift
    • Node Feature Discovery (NFD) Operator
    • NVIDIA GPU Operator
    • NodeFeatureDiscovery CR

流程

  1. 为 MIG 支持配置 NVIDIA GPU Operator:

    1. 应用以下集群策略来禁用默认的 NVIDIA 设备插件并启用 MIG 支持。使用以下内容创建名为 gpu-cluster-policy.yaml 的文件:

      apiVersion: nvidia.com/v1
      kind: ClusterPolicy
      metadata:
        name: gpu-cluster-policy
      spec:
        daemonsets:
          rollingUpdate:
            maxUnavailable: "1"
          updateStrategy: RollingUpdate
        dcgm:
          enabled: true
        dcgmExporter:
          config:
            name: ""
          enabled: true
          serviceMonitor:
            enabled: true
        devicePlugin:
          config:
            default: ""
            name: ""
          enabled: false
          mps:
            root: /run/nvidia/mps
        driver:
          certConfig:
            name: ""
          enabled: true
          kernelModuleConfig:
            name: ""
          licensingConfig:
            configMapName: ""
            nlsEnabled: true
          repoConfig:
            configMapName: ""
          upgradePolicy:
            autoUpgrade: true
            drain:
              deleteEmptyDir: false
              enable: false
              force: false
              timeoutSeconds: 300
            maxParallelUpgrades: 1
            maxUnavailable: 25%
            podDeletion:
              deleteEmptyDir: false
              force: false
              timeoutSeconds: 300
            waitForCompletion:
              timeoutSeconds: 0
          useNvidiaDriverCRD: false
          useOpenKernelModules: false
          virtualTopology:
            config: ""
        gdrcopy:
          enabled: false
        gds:
          enabled: false
        gfd:
          enabled: true
        mig:
          strategy: mixed
        migManager:
          config:
            default: ""
            name: default-mig-parted-config
          enabled: true
          env:
            - name: WITH_REBOOT
              value: 'true'
            - name: MIG_PARTED_MODE_CHANGE_ONLY
              value: 'true'
        nodeStatusExporter:
          enabled: true
        operator:
          defaultRuntime: crio
          initContainer: {}
          runtimeClass: nvidia
          use_ocp_driver_toolkit: true
        sandboxDevicePlugin:
          enabled: true
        sandboxWorkloads:
          defaultWorkload: container
          enabled: false
        toolkit:
          enabled: true
          installDir: /usr/local/nvidia
        validator:
          plugin:
            env:
            - name: WITH_WORKLOAD
              value: "false"
          cuda:
            env:
            - name: WITH_WORKLOAD
              value: "false"
        vfioManager:
          enabled: true
        vgpuDeviceManager:
          enabled: true
        vgpuManager:
          enabled: false
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令来应用集群策略:

      $ oc apply -f gpu-cluster-policy.yaml
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,验证 NVIDIA GPU Operator 集群策略是否达到 Ready 状态:

      $ oc get clusterpolicies.nvidia.com gpu-cluster-policy -w
      Copy to Clipboard Toggle word wrap

      等待 STATUS 列显示 ready

      输出示例

      NAME                 STATUS   AGE
      gpu-cluster-policy   ready    2025-08-14T08:56:45Z
      Copy to Clipboard Toggle word wrap

    4. 运行以下命令,验证 NVIDIA GPU Operator 命名空间中的所有 pod 是否正在运行:

      $ oc get pods -n nvidia-gpu-operator
      Copy to Clipboard Toggle word wrap

      所有 pod 都应该会显示 RunningCompleted 状态。

    5. 运行以下命令,使用 MIG 功能 GPU 标记节点以启用 MIG 模式:

      $ oc label node $NODE_NAME nvidia.com/mig.config=all-enabled --overwrite
      Copy to Clipboard Toggle word wrap

      $NODE_NAME 替换为具有 MIG 功能 GPU 的每个节点的名称。

      重要

      应用 MIG 标签后,标记的节点重新引导以启用 MIG 模式。等待节点恢复在线,然后继续。

    6. 运行以下命令验证节点是否已成功启用 MIG 模式:

      $ oc get nodes -l nvidia.com/mig.config=all-enabled
      Copy to Clipboard Toggle word wrap
  2. 为 DAS Operator 创建命名空间:

    1. 创建定义 das-operator 命名空间的以下 Namespace 自定义资源(CR),并将 YAML 保存到 das-namespace.yaml 文件中:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: das-operator
        labels:
          name: das-operator
          openshift.io/cluster-monitoring: "true"
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令创建命名空间:

      $ oc create -f das-namespace.yaml
      Copy to Clipboard Toggle word wrap
  3. 通过创建以下对象,在您上一步中创建的命名空间中安装 DAS Operator:

    1. 创建以下 OperatorGroup CR,并在 das-operatorgroup.yaml 文件中保存 YAML:

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        generateName: das-operator-
        name: das-operator
        namespace: das-operator
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令来创建 OperatorGroup CR:

      $ oc create -f das-operatorgroup.yaml
      Copy to Clipboard Toggle word wrap
    3. 创建以下 Subscription CR,并将 YAML 保存到 das-sub.yaml 文件中:

      订阅示例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: das-operator
        namespace: das-operator
      spec:
        channel: "stable"
        installPlanApproval: Automatic
        name: das-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
      Copy to Clipboard Toggle word wrap

    4. 运行以下命令来创建订阅对象:

      $ oc create -f das-sub.yaml
      Copy to Clipboard Toggle word wrap
    5. 进入 das-operator 项目:

      $ oc project das-operator
      Copy to Clipboard Toggle word wrap
    6. 创建以下 DASOperator CR,并在 das-dasoperator.yaml 文件中保存 YAML:

      DASOperator CR 示例

      apiVersion: inference.redhat.com/v1alpha1
      kind: DASOperator
      metadata:
        name: cluster 
      1
      
        namespace: das-operator
      spec:
        managementState: Managed
        logLevel: Normal
        operatorLogLevel: Normal
      Copy to Clipboard Toggle word wrap

      1
      DASOperator CR 的名称必须是 cluster
    7. 运行以下命令来创建 dasoperator CR:

      oc create -f das-dasoperator.yaml
      Copy to Clipboard Toggle word wrap

验证

  • 运行以下命令验证 Operator 部署是否成功:

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                    READY   STATUS    RESTARTS   AGE
    das-daemonset-6rsfd                     1/1     Running   0          5m16s
    das-daemonset-8qzgf                     1/1     Running   0          5m16s
    das-operator-5946478b47-cjfcp           1/1     Running   0          5m18s
    das-operator-5946478b47-npwmn           1/1     Running   0          5m18s
    das-operator-webhook-59949d4f85-5n9qt   1/1     Running   0          68s
    das-operator-webhook-59949d4f85-nbtdl   1/1     Running   0          68s
    das-scheduler-6cc59dbf96-4r85f          1/1     Running   0          68s
    das-scheduler-6cc59dbf96-bf6ml          1/1     Running   0          68s
    Copy to Clipboard Toggle word wrap

    成功部署会显示状态为 Running 的所有 Pod。部署包括:

    das-operator
    主 Operator 控制器 pod
    das-operator-webhook
    用于变异 pod 请求的 Webhook 服务器 pod
    das-scheduler
    用于 MIG 分片分配的调度程序插件 pod
    das-daemonset

    仅在具有 MIG 兼容 GPU 的节点上运行的 DaemonSet pod

    注意

    das-daemonset pod 只会出现在具有 MIG 兼容的 GPU 硬件的节点上。如果没有看到任何 daemonset pod,请验证集群是否有带有支持的 GPU 硬件的节点,并且 NVIDIA GPU Operator 是否已正确配置。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat