不同类型和版本的ACK集群默认安装不同版本的NVIDIA驱动。如果您想要更高版本的NVIDIA驱动,可以自定义安装节点的NVIDIA驱动。本文介绍如何基于节点池标签通过OSS URL自定义GPU节点的NVIDIA驱动版本。
注意事项
ACK不保证GPU驱动版本与CUDA库版本的兼容性,您需要自行验证二者之间的适配性。
NVIDIA各卡型对驱动版本的更详细的要求,请参见NVIDIA官方文档。
对于已经安装GPU驱动、NVIDIA Container Runtime等GPU组件的自定义操作系统镜像,ACK无法保证其提供的GPU驱动与ACK其他GPU组件兼容(例如监控组件等)。
通过节点池标签指定GPU节点的驱动版本时,驱动安装过程在添加节点时触发,因此仅适用于新扩容或新添加的节点,现有节点将不受影响。如需对已有节点应用新驱动,请移除节点并重新添加已有节点。
实例规格为gn7和ebmgn7对510.xxx和515.xxx版本驱动存在兼容性问题,建议使用关闭GSP的510以下的驱动版本(例如:470.xxx.xxxx)或525.125.06及其以上的驱动版本。
新建节点池过程中,如果您指定的驱动版本不存在于ACK支持的NVIDIA驱动版本列表,ACK将自动安装默认驱动版本。若您指定了与最新操作系统不兼容驱动版本,可能存在节点添加失败的情况,需选择目前支持的最新驱动版本。
如果您上传自己的GPU驱动到OSS中,使用自定义的GPU节点驱动方式,可能引发GPU驱动与操作系统版本、ECS实例类型、Container Runtime等不兼容,继而导致添加GPU节点失败。ACK无法保证节点添加的成功率,请您自行验证。
步骤一:下载目标驱动
如果ACK支持的NVIDIA驱动版本列表未包含您的业务所需的驱动版本,您可以从NVIDIA官方网站下载目标驱动版本,本文以驱动版本550.90.07为例进行介绍。将驱动文件NVIDIA-Linux-x86_64-550.90.07.run下载到本地。
步骤二:下载nvidia fabric manager
从NVIDIA YUM官方仓库下载nvidia fabric manager,nvidia fabric manager的版本需和驱动版本一致。
wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/nvidia-fabric-manager-550.90.07-1.x86_64.rpm
步骤三:创建OSS Bucket
登录对象存储OSS控制台,创建OSS Bucket。具体操作,请参见创建存储空间。
建议OSS Bucket所在地域与目标ACK集群所在地域相同,为ACK节点安装GPU驱动时,可以通过内网OSS Bucket拉取驱动。
步骤四:上传驱动和nvidia-fabric-manager文件到OSS Bucket
登录对象存储OSS控制台,上传文件NVIDIA-Linux-x86_64-550.90.07.run和nvidia-fabric-manager-550.90.07-1.x86_64.rpm至目标Bucket的根目录。
重要请确保上传文件至OSS Bucket的根目录,不要上传至子目录。
在目标Bucket页面的左侧导航栏,单击
,单击已上传文件右侧操作列的详情,查看驱动文件的详情。在详情面板,关闭使用 HTTPS开关,取消使用HTTPS的配置。
重要ACK创建集群时会通过URL拉取驱动文件,URL使用的协议为HTTP协议。但OSS默认使用HTTPS协议。因此,请关闭使用 HTTPS开关。
在目标Bucket详情页,单击左侧导航栏的概览,在页面下方获取内网访问地址。
重要公网域名拉取驱动文件速度较慢,容易造成集群添加GPU节点失败,因此建议通过内网域名(带有-internal字段)或加速域名(带有oss-accelerate字段)拉取驱动文件。
若您文件拉取失败,请参见OSS权限控制调整Bucket的权限控制策略。
步骤五:配置节点池标签
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击左上角的创建节点池,并添加GPU节点。关于配置项的详细说明,请参见创建和管理节点池,主要配置如下。
在节点标签(Labels)参数栏添加标签,单击
图标,添加如下标签并替换相应的值。
键
值
ack.aliyun.com/nvidia-driver-oss-endpoint
步骤四中获取的OSS Bucket内网访问地址。
my-nvidia-driver.oss-cn-beijing-internal.aliyuncs.com
ack.aliyun.com/nvidia-driver-runfile
步骤一中下载的NVIDIA驱动的名称。
NVIDIA-Linux-x86_64-550.90.07.run
ack.aliyun.com/nvidia-fabricmanager-rpm
步骤二中下载的nvidia fabric manager的名称。
nvidia-fabric-manager-550.90.07-1.x86_64.rpm
步骤六:验证节点池自定义安装NVIDIA驱动是否成功
执行以下命令,查看带有
component: nvidia-device-plugin
标签的Pod。kubectl get po -n kube-system -l component=nvidia-device-plugin -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nvidia-device-plugin-cn-beijing.192.168.1.127 1/1 Running 0 6d 192.168.1.127 cn-beijing.192.168.1.127 <none> <none> nvidia-device-plugin-cn-beijing.192.168.1.128 1/1 Running 0 17m 192.168.1.128 cn-beijing.192.168.1.128 <none> <none> nvidia-device-plugin-cn-beijing.192.168.8.12 1/1 Running 0 9d 192.168.8.12 cn-beijing.192.168.8.12 <none> <none> nvidia-device-plugin-cn-beijing.192.168.8.13 1/1 Running 0 9d 192.168.8.13 cn-beijing.192.168.8.13 <none> <none>
预期输出表示,NODE列的集群中刚添加的节点对应的Pod名称为
nvidia-device-plugin-cn-beijing.192.168.1.128
。执行以下命令查看节点的驱动版本是否符合预期。
kubectl exec -ti nvidia-device-plugin-cn-beijing.192.168.1.128 -n kube-system -- 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 Tesla P100-PCIE-16GB On | 00000000:00:08.0 Off | Off | | N/A 31C P0 26W / 250W | 0MiB / 16384MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+
预期输出表明,驱动版本为550.90.07,即通过节点池自定义安装NVIDIA驱动成功。
其他方式
使用CreateClusterNodePool 创建节点池时,可在目标节点池的配置中设置自定义驱动的OSS URL。示例代码如下:
{
// 其他部分省略
......
"tags": [
{
"key": "ack.aliyun.com/nvidia-driver-oss-endpoint",
"value": "xxxx"
},
{
"key": "ack.aliyun.com/nvidia-driver-runfile",
"value": "xxxx"
},
{
"key": "ack.aliyun.com/nvidia-fabricmanager-rpm",
"value": "xxxx"
}
],
// 其他部分省略
......
}