在 GPU 节点上配置硬件加速器
随着业务数据的增加,尤其是在人工智能和数据分析等场景中,您可能希望在自建业务集群中利用 GPU 功能来加速数据处理。除了为集群节点准备 GPU 资源外,还需进行 GPU 配置。
本解决方案将集群中具有GPU计算能力的节点称为 GPU 节点。
注意:除非另有说明,操作步骤适用于两种类型的节点。有关驱动程序安装相关问题,请参考 NVIDIA 官方安装文档。
目录
前提条件
在操作节点上已准备好 GPU 资源,该节点属于本节提到的 GPU 节点。
安装 GPU 驱动
注意:如果 GPU 节点使用 NVIDIA MPS 插件,请确保该节点的 GPU 架构为 Volta 或更新版本(Volta/Turing/Ampere/Hopper 等),且驱动程序支持 CUDA 版本 11.5 或更高版本。
获取驱动下载地址
-
登录到 GPU 节点,并运行命令
lspci |grep -i NVIDIA检查该节点的 GPU 型号。在以下示例中,GPU 型号为 Tesla T4。
-
访问 NVIDIA 官方网站 获取驱动下载链接。
-
点击首页顶部导航栏中的 Drivers。
-
根据 GPU 节点型号填写下载驱动所需的信息。
-
点击 Search。
-
点击 Download。
-
右键点击 Download > Copy Link Address 复制驱动的下载链接。
-
-
在 GPU 节点上执行以下命令,创建
/home/gpu目录,并将驱动文件下载并保存到该目录。
安装驱动
-
在 GPU 节点上执行以下命令,以安装与当前操作系统对应的 gcc 和 kernel-devel 包。
-
执行以下命令以安装 GPU 驱动。
-
安装完成后,执行
nvidia-smi命令。如果返回类似以下示例的 GPU 信息,则表示驱动安装成功。
安装 NVIDIA 容器运行时
-
在 GPU 节点 上添加 NVIDIA yum 仓库。
当提示 "Metadata cache created." 出现时,表示添加成功。
-
安装 NVIDIA 容器运行时。
当提示
Complete!出现时,表示安装成功。 -
配置默认运行时。
将以下配置添加到文件中。-
Containerd: 修改
/etc/containerd/config.toml文件。 -
Docker: 修改
/etc/docker/daemon.json文件。
-
-
重启 Containerd / Docker。
-
Containerd
-
Docker
-
物理 GPU 配置
在 GPU 业务集群上部署物理 GPU 插件
在 GPU 集群的管理界面上执行以下操作:
-
在目录左侧栏中,选择 "集群插件" 子栏,单击部署 "ACP GPU 设备插件" 并打开 "pGPU" 选项;
-
在 "节点" 选项卡中,选择需要部署物理 GPU 的节点,然后单击 "标签和污点管理器",添加 "设备标签" 并选择 "pGPU",然后单击 OK;
-
在 "Pods" 选项卡中,检查与 nvidia-device-plugin-ds 对应的容器组运行状态,查看是否有异常,并确保它在指定节点上运行。
NVIDIA MPS 配置(驱动支持 CUDA 版本必须 >= 11.5)
在 GPU 业务集群上部署 NVIDIA MPS 插件
在 GPU 集群的管理界面上执行以下操作:
-
在目录左侧栏中,选择 "集群插件" 子栏,单击部署 "ACP GPU 设备插件" 并打开 "MPS" 选项;
-
在 "节点" 选项卡中,选择需要部署物理 GPU 的节点,然后单击 "标签和污点管理器",添加 "设备标签" 并选择 "MPS",然后单击 OK;
-
在 "Pods" 选项卡中,检查与 nvidia-mps-device-plugin-daemonset 对应的容器组运行状态,查看是否有异常,并确保它在指定节点上运行。
配置 kube-scheduler(kubernetes >= 1.23)
-
在 业务集群控制节点 上,检查调度程序是否正确引用调度策略。
检查是否有 –config 选项,并且值为 /etc/kubernetes/scheduler-config.yaml,如下
注意:上述参数和配置为平台的默认配置。如果您已修改它们,请改回默认值。可以将原始自定义配置复制到调度策略文件中。
-
检查调度策略文件的配置。
-
执行命令:
kubectl describe service kubernetes -n default |grep Endpoints。 -
将所有 Master 节点上
/etc/kubernetes/scheduler-config.yaml文件的内容替换为以下内容,其中${kube-apiserver}应该替换为第一步的输出。如果 schedule-config.yaml文件中已存在 extenders,则将 yaml 附加到末尾
-
-
运行以下命令以获取容器 ID:
-
Containerd:执行
crictl ps |grep kube-scheduler,输出如下,第一列为容器 ID。 -
Docker:运行
docker ps |grep kube-scheduler,输出如下,第一列为容器 ID。
-
-
使用上一步获得的容器 ID 重启 Containerd/Docker 容器。
-
Containerd
-
-
重启 Kubelet。
GPU 管理器配置
配置 kube-scheduler(kubernetes >= 1.23)
-
在 业务集群控制节点 上,检查调度程序是否正确引用调度策略。
检查是否有 –config 选项,并且值为 /etc/kubernetes/scheduler-config.yaml,如下所示
注意:上述参数和配置为平台的默认配置。如果您已修改它们,请改回默认值。可以将原始自定义配置复制到调度策略文件中。
-
检查调度策略文件的配置。
-
执行命令:
kubectl describe service kubernetes -n default |grep Endpoints。 -
将所有 Master 节点上
/etc/kubernetes/scheduler-config.yaml文件的内容替换为以下内容,其中${kube-apiserver}应该替换为第一步的输出。
-
-
运行以下命令以获取容器 ID:
-
Containerd:执行
crictl ps |grep kube-scheduler,输出如下,第一列为容器 ID。 -
Docker:运行
docker ps |grep kube-scheduler,输出如下,第一列为容器 ID。
-
-
使用上一步获得的容器 ID 重启 Containerd/Docker 容器。
-
Containerd
-
-
重启 Kubelet。
在 GPU 业务集群上部署 GPU 管理器插件
在 GPU 集群的管理界面上执行以下操作:
-
在目录左侧栏中,选择 "集群插件" 子栏,单击部署 "ACP GPU 设备插件" 并打开 "GPU-管理器" 选项;
-
在 "节点" 选项卡中,选择需要部署物理 GPU 的节点,然后单击 "标签和污点管理器",添加 "设备标签" 并选择 "vGPU",然后单击 OK;
-
在 "Pods" 选项卡中,检查与 gpu-manager-daemonset 对应的容器组运行状态,查看是否有异常,并确保它在指定节点上运行。
结果验证
方法 1:在业务集群的控制节点上运行以下命令检查 GPU 节点上是否有可用的 GPU 资源:
方法 2:在平台上通过指定所需的 GPU 资源量来部署 GPU 应用程序。部署后,进入 Pod 并执行以下命令:
检查是否正确检索到 GPU 信息。