在 OpenShift 上安装 NVIDIA GPU Operator#
使用 Web 控制台安装 NVIDIA GPU Operator#
在 OpenShift 容器平台 Web 控制台中,从侧边菜单导航到Operators > OperatorHub,然后选择所有项目。
在 Operators > OperatorHub 中,搜索 NVIDIA GPU Operator。 有关更多信息,请参阅Red Hat OpenShift 容器平台文档。
选择 NVIDIA GPU Operator,单击安装。 在后续屏幕中,单击安装。
注意
在这里,您可以选择要部署 GPU Operator 的命名空间。 建议使用的命名空间是
nvidia-gpu-operator
。 您可以选择任何现有命名空间或在选择命名空间下创建一个新命名空间。如果您安装到
nvidia-gpu-operator
之外的任何其他命名空间,则 GPU Operator 将不会自动启用命名空间监控,并且 Prometheus 将不会收集指标和警报。 如果此命名空间中仅安装了受信任的 Operator,您可以手动启用命名空间监控,命令如下:$ oc label ns/$NAMESPACE_NAME openshift.io/cluster-monitoring=true
使用 CLI 安装 NVIDIA GPU Operator#
作为集群管理员,您可以使用 OpenShift CLI (oc
) 安装 NVIDIA GPU Operator。
为 NVIDIA GPU Operator 创建命名空间。
创建以下
Namespace
自定义资源 (CR),该资源定义了nvidia-gpu-operator
命名空间,然后将 YAML 保存在nvidia-gpu-operator.yaml
文件中apiVersion: v1 kind: Namespace metadata: name: nvidia-gpu-operator
注意
建议使用的命名空间是
nvidia-gpu-operator
。 您可以选择任何现有命名空间或创建新的命名空间名称。 如果您安装到nvidia-gpu-operator
之外的任何其他命名空间,则 GPU Operator 将不会自动启用命名空间监控,并且 Prometheus 将不会收集指标和警报。如果此命名空间中仅安装了受信任的 Operator,您可以手动启用命名空间监控,命令如下:
$ oc label ns/$NAMESPACE_NAME openshift.io/cluster-monitoring=true
通过运行以下命令创建命名空间
$ oc create -f nvidia-gpu-operator.yaml
namespace/nvidia-gpu-operator created
通过创建以下对象,在您在上一步中创建的命名空间中安装 NVIDIA GPU Operator
创建以下
OperatorGroup
CR,并将 YAML 保存在nvidia-gpu-operatorgroup.yaml
文件中apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: nvidia-gpu-operator-group namespace: nvidia-gpu-operator spec: targetNamespaces: - nvidia-gpu-operator
通过运行以下命令创建
OperatorGroup
CR$ oc create -f nvidia-gpu-operatorgroup.yaml
operatorgroup.operators.coreos.com/nvidia-gpu-operator-group created
运行以下命令以获取步骤 5 所需的
channel
值。$ oc get packagemanifest gpu-operator-certified -n openshift-marketplace -o jsonpath='{.status.defaultChannel}'
示例输出
v22.9
运行以下命令以获取步骤 5 所需的
startingCSV
值。$ CHANNEL=v22.9
$ oc get packagemanifests/gpu-operator-certified -n openshift-marketplace -ojson | jq -r '.status.channels[] | select(.name == "'$CHANNEL'") | .currentCSV'
示例输出
gpu-operator-certified.v22.9.0
创建以下
Subscription
CR,并将 YAML 保存在nvidia-gpu-sub.yaml
文件中apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: gpu-operator-certified namespace: nvidia-gpu-operator spec: channel: "v22.9" installPlanApproval: Manual name: gpu-operator-certified source: certified-operators sourceNamespace: openshift-marketplace startingCSV: "gpu-operator-certified.v22.9.0"
注意
使用步骤 3 和 4 中返回的信息更新
channel
和startingCSV
字段。通过运行以下命令创建订阅对象
$ oc create -f nvidia-gpu-sub.yaml
subscription.operators.coreos.com/gpu-operator-certified created
可选:登录到 Web 控制台并导航到 Operators > Installed Operators 页面。 在
Project: nvidia-gpu-operator
中,将显示以下内容验证是否已创建安装计划
$ oc get installplan -n nvidia-gpu-operator
示例输出
NAME CSV APPROVAL APPROVED install-wwhfj gpu-operator-certified.v22.9.0 Manual false
使用 CLI 命令批准安装计划
$ INSTALL_PLAN=$(oc get installplan -n nvidia-gpu-operator -oname)
$ oc patch $INSTALL_PLAN -n nvidia-gpu-operator --type merge --patch '{"spec":{"approved":true }}'
示例输出
installplan.operators.coreos.com/install-wwhfj patched
或者,单击
Upgrade available
并使用 Web 控制台批准计划可选:在 Web 控制台中验证安装是否成功。 显示更改为
创建 ClusterPolicy 实例#
当您在 OpenShift 容器平台中安装 NVIDIA GPU Operator 时,将创建一个 ClusterPolicy 的自定义资源定义。 ClusterPolicy 配置 GPU 堆栈,配置镜像名称和仓库、Pod 限制/凭据等。
注意
如果您创建一个包含空规范的 ClusterPolicy,例如 spec{}
,则 ClusterPolicy 部署将失败。
作为集群管理员,您可以使用 OpenShift 容器平台 CLI 或 Web 控制台创建 ClusterPolicy。 此外,当使用 NVIDIA vGPU 时,这些步骤有所不同。 请参阅下面的相应部分。
使用 Web 控制台创建集群策略#
在 OpenShift 容器平台 Web 控制台中,从侧边菜单中选择 Operators > Installed Operators,然后单击 NVIDIA GPU Operator。
选择 ClusterPolicy 选项卡,然后单击创建 ClusterPolicy。 平台分配默认名称 *gpu-cluster-policy*。
注意
您可以使用此屏幕自定义 ClusterPolicy,但是默认设置足以配置和运行 GPU。
单击创建。
此时,GPU Operator 继续并安装所有必需的组件,以在 OpenShift 4 集群中设置 NVIDIA GPU。 至少等待 10-20 分钟,然后再深入研究任何形式的故障排除,因为这可能需要一段时间才能完成。
当安装成功时,新部署的 ClusterPolicy *gpu-cluster-policy* 的状态更改为
State:ready
。
使用 CLI 创建集群策略#
创建 ClusterPolicy
$ oc get csv -n nvidia-gpu-operator gpu-operator-certified.v22.9.0 -ojsonpath={.metadata.annotations.alm-examples} | jq .[0] > clusterpolicy.json
$ oc apply -f clusterpolicy.json
clusterpolicy.nvidia.com/gpu-cluster-policy created
使用 NVIDIA vGPU 创建 ClusterPolicy 实例#
先决条件#
请参阅 使用 NVIDIA vGPU 部分,了解有关在 RedHat OpenShift 上使用 NVIDIA vGPU 的先决条件步骤。
使用 Web 控制台创建集群策略#
在 OpenShift 容器平台 Web 控制台中,从侧边菜单中选择 Operators > Installed Operators,然后单击 NVIDIA GPU Operator。
选择 ClusterPolicy 选项卡,然后单击创建 ClusterPolicy。 平台分配默认名称 *gpu-cluster-policy*。
在驱动程序部分下提供许可
ConfigMap
的名称,这应在上面 NVIDIA vGPU 的先决条件步骤中创建。 有关示例,请参阅以下屏幕截图,并相应地修改值。
在驱动程序部分下指定
repository
路径、image
名称和捆绑的 NVIDIA vGPU 驱动程序version
。 如果注册表不是公共的,请在驱动程序高级配置部分下指定先决条件步骤中创建的imagePullSecret
。
单击创建。
此时,GPU Operator 继续并安装所有必需的组件,以在 OpenShift 4 集群中设置 NVIDIA GPU。 至少等待 10-20 分钟,然后再深入研究任何形式的故障排除,因为这可能需要一段时间才能完成。
当安装成功时,新部署的 ClusterPolicy *gpu-cluster-policy* 的状态更改为
State:ready
。
使用 CLI 创建集群策略#
创建 ClusterPolicy
$ oc get csv -n nvidia-gpu-operator gpu-operator-certified.v22.9.0 -ojsonpath={.metadata.annotations.alm-examples} | jq .[0] > clusterpolicy.json
修改 clusterpolicy.json 文件以指定在先决条件步骤中创建的
driver.licensingConfig
、driver.repository
、driver.image
、driver.version
和driver.imagePullSecrets
。 下面的代码段显示了一个示例,请根据需要更改值。"driver": { "repository": "<repository-path>" "image": "driver", "imagePullSecrets": [], "licensingConfig": { "configMapName": "licensing-config", "nlsEnabled": true } "version": "470.82.01" }
$ oc apply -f clusterpolicy.json
clusterpolicy.nvidia.com/gpu-cluster-policy created
验证 NVIDIA GPU Operator 是否成功安装#
验证 NVIDIA GPU Operator 是否成功安装,如此处所示
运行以下命令以查看这些新的 Pod 和 DaemonSet
$ oc get pods,daemonset -n nvidia-gpu-operator
NAME READY STATUS RESTARTS AGE pod/gpu-feature-discovery-c2rfm 1/1 Running 0 6m28s pod/gpu-operator-84b7f5bcb9-vqds7 1/1 Running 0 39m pod/nvidia-container-toolkit-daemonset-pgcrf 1/1 Running 0 6m28s pod/nvidia-cuda-validator-p8gv2 0/1 Completed 0 99s pod/nvidia-dcgm-exporter-kv6k8 1/1 Running 0 6m28s pod/nvidia-dcgm-tpsps 1/1 Running 0 6m28s pod/nvidia-device-plugin-daemonset-gbn55 1/1 Running 0 6m28s pod/nvidia-device-plugin-validator-z7ltr 0/1 Completed 0 82s pod/nvidia-driver-daemonset-410.84.202203290245-0-xxgdv 2/2 Running 0 6m28s pod/nvidia-node-status-exporter-snmsm 1/1 Running 0 6m28s pod/nvidia-operator-validator-6pfk6 1/1 Running 0 6m28s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/gpu-feature-discovery 1 1 1 1 1 nvidia.com/gpu.deploy.gpu-feature-discovery=true 6m28s daemonset.apps/nvidia-container-toolkit-daemonset 1 1 1 1 1 nvidia.com/gpu.deploy.container-toolkit=true 6m28s daemonset.apps/nvidia-dcgm 1 1 1 1 1 nvidia.com/gpu.deploy.dcgm=true 6m28s daemonset.apps/nvidia-dcgm-exporter 1 1 1 1 1 nvidia.com/gpu.deploy.dcgm-exporter=true 6m28s daemonset.apps/nvidia-device-plugin-daemonset 1 1 1 1 1 nvidia.com/gpu.deploy.device-plugin=true 6m28s daemonset.apps/nvidia-driver-daemonset-410.84.202203290245-0 1 1 1 1 1 feature.node.kubernetes.io/system-os_release.OSTREE_VERSION=410.84.202203290245-0,nvidia.com/gpu.deploy.driver=true 6m28s daemonset.apps/nvidia-mig-manager 0 0 0 0 0 nvidia.com/gpu.deploy.mig-manager=true 6m28s daemonset.apps/nvidia-node-status-exporter 1 1 1 1 1 nvidia.com/gpu.deploy.node-status-exporter=true 6m29s daemonset.apps/nvidia-operator-validator 1 1 1 1 1 nvidia.com/gpu.deploy.operator-validator=true 6m28s
nvidia-driver-daemonset
Pod 在每个包含受支持 NVIDIA GPU 的工作节点上运行。注意
当驱动程序工具包处于活动状态时,
DaemonSet
被命名为nvidia-driver-daemonset-<RHCOS-version>
。 其中RHCOS-version
等于<OCP XY>.<RHEL XY>.<related date YYYYMMDDHHSS-0
。DaemonSet
的 Pod 被命名为nvidia-driver-daemonset-<RHCOS-version>-<UUID>
。
集群监控#
GPU Operator 生成 GPU 性能指标 (DCGM-export)、状态指标 (node-status-exporter) 和节点状态警报。 为了使 OpenShift Prometheus 收集这些指标,托管 GPU Operator 的命名空间必须具有标签 openshift.io/cluster-monitoring=true
。
当 GPU Operator 安装在建议的 nvidia-gpu-operator
命名空间中时,如果未定义 openshift.io/cluster-monitoring
标签,则 GPU Operator 会自动启用监控。 如果定义了标签,则 GPU Operator 将不会更改其值。
通过设置 openshift.io/cluster-monitoring=false
来禁用 nvidia-gpu-operator
命名空间中的集群监控,如下所示
$ oc label ns/nvidia-gpu-operator openshift.io/cluster-monitoring=false
如果 GPU Operator 未安装在建议的命名空间中,则 GPU Operator 将不会自动启用监控。 如下所示手动设置标签
$ oc label ns/$NAMESPACE openshift.io/cluster-monitoring=true注意
仅当在此命名空间中安装了受信任的 Operator 时才执行此操作。
日志记录#
nvidia-driver-daemonset
Pod 有两个容器。
运行以下命令以检查与
nvidia-driver-ctr
关联的日志注意
此日志显示主容器正在等待驱动程序二进制文件,并将其加载到内存中。
$ oc logs -f nvidia-driver-daemonset-410.84.202203290245-0-xxgdv -n nvidia-gpu-operator -c nvidia-driver-ctr
运行以下命令以检查与
openshift-driver-toolkit-ctr
关联的日志注意
此日志显示正在构建驱动程序。
$ oc logs -f nvidia-driver-daemonset-410.84.202203290245-0-xxgdv -n nvidia-gpu-operator -c openshift-driver-toolkit-ctr
运行示例 GPU 应用程序#
运行一个简单的 CUDA VectorAdd 示例,该示例将两个向量相加在一起,以确保 GPU 已正确引导。
运行以下命令
$ cat << EOF | oc create -f - apiVersion: v1 kind: Pod metadata: name: cuda-vectoradd spec: restartPolicy: OnFailure containers: - name: cuda-vectoradd image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0-ubi8" resources: limits: nvidia.com/gpu: 1 EOF
pod/cuda-vectoradd created
检查容器的日志
$ oc logs cuda-vectoradd
[Vector addition of 50000 elements] Copy input data from the host memory to the CUDA device CUDA kernel launch with 196 blocks of 256 threads Copy output data from the CUDA device to the host memory Test PASSED Done
获取有关 GPU 的信息#
nvidia-smi
显示内存使用情况、GPU 利用率和 GPU 的温度。 通过在 Pod 中运行流行的 nvidia-smi
命令来测试 GPU 访问。
要查看 GPU 利用率,请从 GPU Operator DaemonSet 中的 Pod 运行 nvidia-smi
。
切换到 nvidia-gpu-operator 项目
$ oc project nvidia-gpu-operator
运行以下命令以查看这些新的 Pod
$ oc get pod -owide -lopenshift.driver-toolkit=true
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nvidia-driver-daemonset-410.84.202203290245-0-xxgdv 2/2 Running 0 23m 10.130.2.18 ip-10-0-143-147.ec2.internal <none> <none>
注意
使用 Pod 和节点名称,在正确的节点上运行
nvidia-smi
。在 Pod 中运行
nvidia-smi
命令$ oc exec -it nvidia-driver-daemonset-410.84.202203290245-0-xxgdv -- nvidia-smi
Defaulted container "nvidia-driver-ctr" out of: nvidia-driver-ctr, openshift-driver-toolkit-ctr, k8s-driver-manager (init) Mon Apr 11 15:02:23 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 | |-------------------------------+----------------------+----------------------+ | 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 | | N/A 33C P8 15W / 70W | 0MiB / 15360MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
生成两个表。 第一个表反映了有关所有可用 GPU 的信息(示例显示了一个 GPU)。 第二个表提供了有关使用 GPU 的进程的详细信息。
有关描述表内容的更多信息,请参阅
nvidia-smi
的手册页。