通过节点池升级已有节点的NVIDIA驱动

如果您使用的CUDA库需要匹配更高版本的NVIDIA驱动,您需要升级节点的驱动版本。基于节点池升级节点NVIDIA驱动后,您可以批量管理集群中不同节点的NVIDIA驱动。本文介绍如何通过节点池升级现有节点NVIDIA驱动。

使用限制

升级NVIDIA驱动需要将节点从原有节点池中移除,并添加至新创建的节点池中。由于原有节点池中可能存在其它节点,无法在原有节点池中完成目标节点的NVIDIA驱动升级。

重要

在添加过程中,节点会经历重装系统和安装指定NVIDIA驱动。请在执行升级操作前,确认该节点没有正在运行的任务和重要数据。为降低风险,建议先升级一个节点,确认整个升级过程无误后再批量升级。

注意事项

  • ACK不保证GPU驱动版本与CUDA库版本的兼容性,您需要自行验证二者之间的适配性。

  • NVIDIA各卡型对驱动版本的更详细的要求,请参见NVIDIA官方文档

  • 对于已经安装GPU驱动、NVIDIA Container RuntimeGPU组件的自定义操作系统镜像,ACK无法保证其提供的GPU驱动与ACK其他GPU组件兼容(例如监控组件等)。

  • 通过节点池标签指定GPU节点的驱动版本时,驱动安装过程在添加节点时触发,因此仅适用于新扩容或新添加的节点,现有节点将不受影响。如需对已有节点应用新驱动,请移除节点并重新添加已有节点

  • 实例规格为gn7ebmgn7510.xxx515.xxx版本驱动存在兼容性问题,建议使用关闭GSP510以下的驱动版本(例如:470.xxx.xxxx)或525.125.06及其以上的驱动版本。

  • 实例规格为ebmgn7ebmgn7eECS,仅支持460.32.03之后的NVIDIA驱动版本。

  • 新建节点池过程中,如果您指定的驱动版本不存在于ACK支持的NVIDIA驱动版本列表,ACK将自动安装默认驱动版本。若您指定了与最新操作系统不兼容驱动版本,可能存在节点添加失败的情况,需选择目前支持的最新驱动版本。

  • 如果您上传自己的GPU驱动到OSS中,使用自定义的GPU节点驱动方式,可能引发GPU驱动与操作系统版本、ECS实例类型、Container Runtime等不兼容,继而导致添加GPU节点失败。ACK无法保证节点添加的成功率,请您自行验证。

使用示例

  • 如果您使用节点池A管理集群已升级NVIDIA驱动版本的节点,当需要将任务调度到该驱动版本的节点上时,只需要将任务的nodeselector指定为节点池A的标签。

  • 如果需要将集群中一部分节点的NVIDIA驱动升级至550.144.03版本,另一部分的节点升级至535.161.07版本,您可以将一部分节点添加至节点池A,另一部分节点添加至节点池B。

步骤一:确定NVIDIA驱动版本

选定NVIDIA驱动版本前,您需要确定所使用的CUDA库与哪些NVIDIA驱动版本兼容。您可以参见cuda-toolkit-release-notes查看CUDA库与NVIDIA驱动的兼容关系,选择合适的NVIDIA驱动版本。

步骤二:移除节点

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点

  3. 选中待升级驱动的节点,单击批量移除,然后在移除节点对话框,选中自动排空节点(drain),并单击确定

步骤三:创建节点池并指定驱动版本

从驱动版本列表选择驱动创建节点池

说明
  • 选择与您业务相匹配的NVIDIA驱动版本。本文以驱动版本550.144.03为例进行介绍。

  • 此种方式安装驱动较为简单。为节点池的节点打上标签ack.aliyun.com/nvidia-driver-version=<驱动版本>,然后将步骤二中集群移除的节点添加到该节点池即可。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 单击左上角的创建节点池,关于配置项的详细说明,请参见创建和管理节点池。主要配置如下。

    节点标签(Labels)参数栏添加标签,单击1图标,然后在文本框输入ack.aliyun.com/nvidia-driver-version,在文本框输入550.144.03

自定义驱动版本创建节点池

本小节以驱动版本515.86.01为例进行介绍。

步骤一:自定义驱动版本

  1. 如果中未包含您的业务所需的驱动版本,您可以从NVIDIA官方网站下载目标驱动版本。

  2. NVIDIA YUM官方仓库下载nvidia fabric manager,nvidia fabric manager的版本需和驱动版本一致。

    wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/nvidia-fabric-manager-515.86.01-1.x86_64.rpm
  3. 登录对象存储OSS控制台,创建OSS Bucket。具体操作,请参见创建存储空间

    建议OSS Bucket所在地域与目标ACK集群所在地域相同,为ACK节点安装GPU驱动时,可以通过内网OSS Bucket拉取驱动。

  4. 上传文件NVIDIA-Linux-x86_64-515.86.01.runnvidia-fabric-manager-515.86.01-1.x86_64.rpm至目标Bucket的根目录。

  5. 在目标Bucket页面的左侧导航栏,单击文件管理 > 文件列表,单击已上传文件右侧操作列的详情,查看驱动文件的详情。

  6. 详情面板,关闭使用 HTTPS开关,取消使用HTTPS的配置。

  7. 在目标Bucket详情页,单击左侧导航栏的概览,在页面下方获取内网访问地址。

步骤2:自定义驱动版本后,创建节点池

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 单击左上角的创建节点池,关于配置项的详细说明,请参见创建和管理节点池。主要配置如下。

    节点标签(Labels)参数栏添加标签,单击1图标。

    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-515.86.01.run

    ack.aliyun.com/nvidia-fabricmanager-rpm

    步骤一第二步中下载的nvidia fabric manager的名称。

    nvidia-fabric-manager-515.86.01-1.x86_64.rpm

步骤四:添加节点到节点池

节点池创建完成以后,需要将步骤二中移除的节点添加到该节点池。

步骤五:验证通过节点池升级节点NVIDIA驱动是否成功

  1. 执行以下命令,查看带有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>
    nvidia-device-plugin-cn-beijing.192.168.8.14    1/1     Running   0          9d    192.168.8.14    cn-beijing.192.168.8.14    <none>           <none>

    预期输出表明,NODE列下集群中刚添加的节点对应的Pod名称为nvidia-device-plugin-cn-beijing.192.168.1.128

  2. 执行以下命令查看节点的驱动版本是否符合预期。

    kubectl exec -ti nvidia-device-plugin-cn-beijing.192.168.1.128 -n kube-system -- nvidia-smi 

    预期输出:

    Mon Mar 24 08:51:55 2025       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI xxx.xxx.xx   Driver Version: xxx.xxx.xx   CUDA Version: N/A      |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla V100-SXM2...  On   | 00000000:00:07.0 Off |                    0 |
    | N/A   27C    P0    40W / 300W |      0MiB / 16130MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    |   1  Tesla V100-SXM2...  On   | 00000000:00:08.0 Off |                    0 |
    | N/A   27C    P0    40W / 300W |      0MiB / 16130MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    |   2  Tesla V100-SXM2...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   31C    P0    39W / 300W |      0MiB / 16130MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    |   3  Tesla V100-SXM2...  On   | 00000000:00:0A.0 Off |                    0 |
    | N/A   27C    P0    41W / 300W |      0MiB / 16130MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+

    查看输出中节点的NVIDIA驱动版本,若与目标版本一致,则表明驱动升级成功。

相关文档

通过指定版本号自定义节点GPU驱动版本