如果您使用的CUDA库需要匹配更高版本的NVIDIA驱动,需要升级节点的NVIDIA驱动。本文升级方案是将节点从集群中移除,然后再将该节点添加到集群中,在添加的过程中节点会重装系统、安装指定版本的NVIDIA驱动。本文介绍在使用现有节点的场景下,如何通过节点池升级节点NVIDIA驱动。

背景信息

ACK目前不支持在不移除节点的情况下仅升级节点NVIDIA驱动的场景,且您原有节点池也许还存在其它节点,故不做升级原节点池的操作。

基于节点池升级节点NVIDIA驱动的优势

实现了对集群中不同节点上的NVIDIA驱动的批量管理功能。以下是两个使用示例:

  • 将集群中的一部分节点的驱动升级到418.181.07版本,而另一部分的节点升级到450.102.0版本。此时,可以将一部分节点添加到节点池A,另一部分节点添加到节点池B。
  • 将集群中需要升级到418.181.07版本的节点用节点池A管理,如果需要将任务调度到NVIDIA驱动版本为418.181.07的节点上,只需要将任务的selector指定为节点池A的标签即可。

集群默认驱动版本说明

各集群版本支持的默认驱动版本如下表所示。

集群版本 默认GPU驱动 是否支持自定义驱动 支持自定义驱动版本
1.14.8 418.181.07
  • 418.181.07
  • 450.102.04
  • 460.32.03
  • 460.73.01
  • 470.57.02
1.16.6 418.87.01 NA
1.16.9 418.181.07
  • 418.181.07
  • 450.102.04
  • 460.32.03
  • 460.73.01
  • 470.57.02
  • 510.47.03
1.18.8 418.181.07
1.20.4 450.102.04
1.22.10 460.91.03
1.24.3 460.91.03

步骤一:确定NVIDIA驱动版本

说明
  • 升级NVIDIA驱动的方式本质上是将节点从集群中移除,然后再将该节点添加到集群中,在添加的过程中会重装系统、安装指定NVIDIA驱动等,所以在执行升级操作前,确认该节点没有正在运行的任务以及重要的数据。
  • 为了降低风险,强烈建议您先升级一个节点,如果整个升级过程没有问题,再进行批量升级操作。

您所使用的CUDA库与哪些NVIDIA驱动版本兼容是NVIDIA驱动版本选定的最重要依据。以下是CUDA库与NVIDIA驱动的兼容关系。更多信息,请参见cuda-toolkit-release-notes

CUDA Toolkit版本 Linux x86_64驱动版本
CUDA 11.7 Update 1 ≥515.65.01
CUDA 11.7 GA ≥515.43.04
CUDA 11.6 Update 2 ≥510.47.03
CUDA 11.6 Update 1 ≥510.47.03
CUDA 11.6 GA ≥510.39.01
CUDA 11.5 Update 2 ≥495.29.05
CUDA 11.5 Update 1 ≥495.29.05
CUDA 11.5 GA ≥495.29.05
CUDA 11.4 Update 4 ≥470.82.01
CUDA 11.4 Update 3 ≥470.82.01
CUDA 11.4 Update 2 ≥470.57.02
CUDA 11.4 Update 1 ≥470.57.02
CUDA 11.4.0 GA ≥470.42.01
CUDA 11.3.1 Update 1 ≥465.19.01
CUDA 11.3.0 GA ≥465.19.01
CUDA 11.2.2 Update 2 ≥460.32.03
CUDA 11.2.1 Update 1 ≥460.32.03
CUDA 11.2.0 GA ≥460.27.03
CUDA 11.1.1 Update 1 ≥455.32
CUDA 11.1 GA ≥455.23
CUDA 11.0.3 Update 1 ≥ 450.51.06
CUDA 11.0.2 GA ≥ 450.51.05
CUDA 11.0.1 RC ≥ 450.36.06
CUDA 10.2.89 ≥ 440.33
CUDA 10.1 (10.1.105 general release, and updates) ≥ 418.39
CUDA 10.0.130 ≥ 410.48
CUDA 9.2 (9.2.148 Update 1) ≥ 396.37
CUDA 9.2 (9.2.88) ≥ 396.26
CUDA 9.1 (9.1.85) ≥ 390.46
CUDA 9.0 (9.0.76) ≥ 384.81
CUDA 8.0 (8.0.61 GA2) ≥ 375.26
CUDA 8.0 (8.0.44) ≥ 367.48
CUDA 7.5 (7.5.16) ≥ 352.31
CUDA 7.0 (7.0.28) ≥ 346.46

步骤二:移除节点

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择节点管理 > 节点
  5. 选中待升级驱动的节点,单击批量移除
  6. 移除节点对话框,选中自动排空节点(drain),然后单击确定

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

方式一:从驱动版本列表选择驱动创建节点池

说明 选择此种方式安装驱动比较简单,只需要给节点池的节点打上标签ack.aliyun.com/nvidia-driver-version=<驱动版本>,然后将前面步骤中集群移除的节点添加到该节点池即可。

本文以418.181.07版本为例介绍整个操作流程:

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择节点管理 > 节点池
  5. 单击右上角创建节点池
  6. 创建节点池对话框中配置相关参数。有关配置项的详细说明,请参见创建Kubernetes专有版集群。部分配置项说明如下:
    参数 描述
    虚拟交换机 虚拟交换机和实例规格参数的取值任意,因为这些信息在扩容节点时才会用到,升级驱动属于添加已有节点,不会用到这些信息。
    实例规格
    操作系统 节点重新加入集群后所使用的操作系统。
    数量 实例数量填写为0,如果实例数量不为0,ACK将会创建新的实例。ACK2
    1. 单击显示高级选项
    2. 节点标签参数栏添加标签,单击1图标,在文本框中输入ack.aliyun.com/nvidia-driver-version,在文本框中输入418.181.07

      容器服务提供可用NVIDIA驱动版本请参考集群默认驱动版本说明

      说明 实例规格为ecs.ebmgn7或ecs.ebmgn7e的ECS,仅支持460.32.03之后的NVIDIA驱动版本。
    3. 参数配置完成后,单击确认配置

方式二:自定义驱动版本创建节点池

自定义驱动版本

以下以上传NVIDIA-Linux-x86_64-460.32.03.run驱动文件为例介绍如何自定义驱动版本。驱动文件可以在NVIDIA官方网站下载

说明 NVIDIA-Linux-x86_64-460.32.03.run需要放在OSS Bucket的根目录下。
  1. 在对象存储OSS管理控制台中创建Bucket。具体操作,请参见创建存储空间
  2. NVIDIA-Linux-x86_64-460.32.03.run驱动文件上传至OSS。具体操作,请参见上传文件
    说明 实例规格为ecs.ebmgn7或ecs.ebmgn7e的ECS,需同时将与其版本号一致的Fabric Manager安装包上传至OSS。Fabric Manager安装包的上传格式要求如下:
    • 若集群版本为v1.18.8-aliyun.1,请上传RPM格式的安装包。关于安装包的下载地址,请参见RPM
    • 若集群版本为v1.20.11-aliyun.1或v1.22.3-aliyun.1,请上传tar.gz格式的安装包。关于安装包的下载地址,请参见tar
  3. 文件上传成功后,在对象存储管理页左侧导航栏中,单击文件管理
  4. 文件管理页面,单击已上传驱动文件右侧操作列下的详情
  5. 详情面板,关闭使用HTTPS开关,取消使用HTTPS的配置。
    说明 ACK创建集群时会通过URL拉取驱动文件,URL中使用的协议是HTTP协议。OSS默认使用的是HTTPS协议,您需要单击使用HTTPS按钮,取消使用HTTPS的配置。
  6. 确认驱动文件配置信息。记录该文件的URL,且将URL拆成两部分,即endpointrunfile。以http://nvidia-XXX-XXX-cn-beijing.aliyuncs.com/NVIDIA-Linux-x86_64-460.32.03.run为例,将其分成以下两部分:
    • endpoint:nvidia-XXX-XXX-cn-beijing.aliyuncs.com
    • runfile:NVIDIA-Linux-x86_64-460.32.03.run

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

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择节点管理 > 节点池
  5. 单击右上角创建节点池
  6. 创建节点池对话框中配置相关参数。有关配置项的详细说明,请参见创建Kubernetes专有版集群。部分配置项说明如下:
    参数 描述
    虚拟交换机 虚拟交换机和实例规格参数的取值任意,因为这些信息在扩容节点时才会用到,升级驱动属于添加已有节点,不会用到这些信息。
    实例规格
    操作系统 节点重新加入集群后所使用的操作系统。
    数量 实例数量填写为0,如果实例数量不为0,ACK将会创建新的实例。ACK2
    1. 单击显示高级选项
    2. 节点标签参数栏添加标签,单击1图标:
      • 输入第一个标签的ack.aliyun.com/nvidia-driver-oss-endpointnvidia-XXX-XXX-cn-beijing.aliyuncs.com
      • 输入第二个标签的ack.aliyun.com/nvidia-driver-runfileNVIDIA-Linux-x86_64-460.32.03.run
      • 根据集群版本,输入第三个标签的
        • 若集群版本为v1.18.8-aliyun.1,输入ack.aliyun.com/nvidia-fabricmanager-rpmnvidia-fabric-manager-460.32.03-1.x86_64.rpm
        • 若集群版本为v1.20.11-aliyun.1或v1.22.3-aliyun.1,输入ack.aliyun.com/nvidia-fabricmanager-tarballfabricmanager-linux-x86_64-460.32.03.tar.gz
    3. 参数配置完成后,单击确认配置

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

节点池创建完成以后,需要将先前移除的节点添加到该节点池。具体操作,请参见添加已有节点

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

  1. 在目标集群右侧操作列选择更多 > 通过CloudShell管理集群
  2. 执行以下命令,查看带有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

  3. 执行以下命令查看节点的驱动版本是否符合预期。
    kubectl exec -ti nvidia-device-plugin-cn-beijing.192.168.1.128 -n kube-system -- nvidia-smi 

    预期输出:

    Sun Feb  7 04:09:01 2021       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.181.07   Driver Version: 418.181.07   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                                                 |
    +-----------------------------------------------------------------------------+

    从以上输出的信息,可以知道驱动版本为418.181.07,通过节点池升级节点NVIDIA驱动成功。