你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在运行 Linux 的 N 系列 VM 上安装 NVIDIA GPU 驱动程序

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

适用于:✔️ Linux VM

若要利用 NVIDIA GPU 支持的 Azure N 系列 VM 的 GPU 功能,必须安装 NVIDIA GPU 驱动程序。 NVIDIA GPU 驱动程序扩展可在 N 系列 VM 上安装适当的 NVIDIA CUDA 或 GRID 驱动程序。 请使用 Azure 门户或工具(例如 Azure CLI 或 Azure 资源管理器模板)安装或管理该扩展。 有关受支持的分发版和部署步骤,请参阅 NVIDIA GPU 驱动程序扩展文档

如果选择手动安装 NVIDIA GPU 驱动程序,本文提供受支持的分发版、驱动程序以及安装和验证步骤。 针对 Windows VM 也提供了驱动程序手动安装信息。

有关 N 系列 VM 规格、存储容量和磁盘详细信息,请参阅 GPU Linux VM 大小

支持的分发和驱动程序

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。

NVIDIA CUDA 驱动程序

有关最新的 CUDA 驱动程序和支持的操作系统,请访问 NVIDIA 网站。 确保为你的发行版安装或升级到最新支持的 CUDA 驱动程序。

注意

原始 NC 系列 SKU VM 所支持的最新 CUDA 驱动程序当前为 470.82.01。 NC 中的 K80 卡不支持更高版本的驱动程序。

注意

Azure NVads A10 v5 VM 仅支持 GRID 14.1 (510.73) 或更高驱动程序版本。 A10 SKU 的 vGPU 驱动程序是一个支持图形和计算工作负载的统一驱动程序。

提示

作为一种在 Linux VM 上手动安装 CUDA 驱动程序的替代方法,可以部署 Azure 数据科学虚拟机映像。 用于 Ubuntu 16.04 LTS 或 CentOS 7.4 的 DSVM 版本预安装 NVIDIA CUDA 驱动程序、CUDA 深度神经网络库和其他工具。

NVIDIA GRID 驱动程序

Microsoft 为用作虚拟工作站或用于虚拟应用程序的 NV 和 NVv3 系列 VM,重新分发 NVIDIA GRID 驱动程序安装程序。 请仅在下表所列操作系统上的 Azure NV VM 上安装这些 GRID 驱动程序。 这些驱动程序包括 Azure 中 GRID Virtual GPU Software 的许可。 不需要设置 NVIDIA vGPU 软件许可证服务器。

Azure 重新分发的 GRID 驱动程序不适用于大部分非 NV 系列 VM,如 NC、NCv2、NCv3、ND 和 NDv2 系列 VM,但适用于 NCasT4v3 系列。

分发 驱动程序
Ubuntu 20.04 LTS、22.04 LTS

Red Hat Enterprise Linux 7.9、8.6、8.8

SUSE Linux Enterprise Server 15 SP2、12 SP2、12 SP5

Rocky Linux 8.4
NVIDIA vGPU 16.3,驱动程序分支 R535 (.exe)

NVIDIA vGPU 16.2,驱动程序分支 R535 (.exe)

注意

对于 Azure NVads A10 v5 VM,建议客户始终使用最新版本的驱动程序。 最新的 NVIDIA 主要驱动程序分支 (n) 仅与上一个主要分支 (n-1) 向后兼容。 例如,vGPU 17.x 仅与 vGPU 16.x 向后兼容。 向 Azure 主机推出到最新的驱动器分支时,任何仍然运行 n-2 或更低版本的 VM 都可能会出现驱动程序故障。

NVs_v3 V 仅支持 vGPU 16 或更低版本的驱动程序。

有关所有以前的 Nvidia GRID 驱动程序链接的完整列表,请访问 GitHub

警告

在 Red Hat 产品上安装第三方软件可能会影响 Red Hat 支持条款。 请参阅 Red Hat 知识库文章

在 N 系列 VM 上安装 CUDA 驱动程序

从 NVIDIA CUDA 工具包在 N 系列 VM 上安装 CUDA 驱动程序的步骤如下。

C 和 C++ 开发人员可以选择安装完整的工具包来生成 GPU 加速应用程序。 有关详细信息,请参阅 CUDA 安装指南

要安装 CUDA 驱动程序,请建立到每个 VM 的 SSH 连接。 若要验证系统是否具有支持 CUDA 的 GPU,请运行以下命令:

lspci | grep -i NVIDIA

输出类似于以下示例(显示 NVIDIA Tesla K80 卡):

lspci 命令输出

lspci 列出了 VM 上的 PCIe 设备,包括 InfiniBand NIC 和 GPU(如果有)。 如果 lspci 没有成功返回,你可能需要在 CentOS/RHEL 上安装 LIS。

然后,运行特定于分发的安装命令。

Ubuntu

Ubuntu 打包 NVIDIA 专有驱动程序。 这些驱动程序直接来自 NVIDIA,只是由 Ubuntu 打包,以便系统可以自动管理这些驱动程序。 从另一个源下载和安装驱动程序可能会导致系统损坏。 此外,安装第三方驱动程序需要在启用了 TrustedLaunch 和安全启动的 VM 上执行额外步骤。 他们要求用户为系统添加新的计算机所有者密钥才能启动。 来自 Ubuntu 的驱动程序由 Canonical 签名,适用于安全启动。

  1. 安装 ubuntu-drivers 实用工具:

    sudo apt update && sudo apt install -y ubuntu-drivers-common
    
  2. 安装最新的 NVIDIA 驱动程序:

    sudo ubuntu-drivers install
    
  3. 从 NVIDIA 下载并安装 CUDA 工具包:

    注意

    此示例显示了 Ubuntu 22.04 LTS 的 CUDA 包路径。 替换特定于你计划使用的版本的路径。

    请访问 NVIDIA 下载中心NVIDIA CUDA 资源页 ,获取特定于每个版本的完整路径。

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
    sudo apt install -y ./cuda-keyring_1.1-1_all.deb
    sudo apt update
    sudo apt -y install cuda-toolkit-12-3
    

    安装可能需要几分钟。

  4. 验证是否已正确识别 GPU:

    nvidia-smi
    

NVIDIA 驱动程序更新

在部署后,建议定期更新 NVIDIA 驱动程序。

sudo apt update
sudo apt full-upgrade

CentOS 或 Red Hat Enterprise Linux

  1. 更新内核(建议)。 如果选择不更新内核,请确保 kernel-develdkms 的版本适合你的内核。

    sudo yum install kernel kernel-tools kernel-headers kernel-devel
    sudo reboot
    
  2. 安装最新的适用于 Hyper-V 和 Azure 的 Linux 集成服务。 通过验证 lspci 的结果来检查是否需要 LIS。 如果所有 GPU 设备都按预期列出,则不需要安装 .LIS。

    LIS 适用于 Red Hat Enterprise Linux、CentOS 和 Oracle Linux Red Hat 兼容内核 5.2-5.11、6.0-6.10 和 7.0-7.7。 有关更多详细信息,请参阅 Linux Integration Services 文档。 如果计划使用 CentOS/RHEL 7.8(或更高版本),请跳过此步骤,因为这些版本不再需要 LIS。

    wget https://aka.ms/lis
    tar xvzf lis
    cd LISISO
    
    sudo ./install.sh
    sudo reboot
    
  3. 重新连接到 VM 并使用以下命令继续安装:

    sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
    sudo yum clean all
    sudo yum -y install nvidia-driver-latest-dkms cuda-drivers
    

    安装可能需要几分钟。

    注意

    请访问 FedoraNvidia CUDA 存储库,为要使用的 CentOS 或 RHEL 版本选择正确的包。

例如,CentOS 8 和 RHEL 8 需要以下步骤。

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum install dkms

sudo wget https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo -O /etc/yum.repos.d/cuda-rhel8.repo

sudo yum install cuda-drivers
  1. 若要安装完整的 CUDA 工具包,请键入:

    sudo yum install cuda
    

    注意

    如果你看到与缺少 vulkan-filesystem 等包有关的错误消息,则可能需要编辑 /etc/yum.repos.d/rh-cloud,寻找 optional-rpms 并将“已启用”设置为“1”

  2. 重新启动 VM,并继续验证安装。

验证驱动程序安装

要查询 GPU 设备状态,请建立到 VM 的 SSH 连接,并运行与驱动程序一起安装的 nvidia-smi 命令行实用工具。

如果已安装驱动程序,Nvidia SMI 会将 GPU-Util 列为 0%,直到你在 VM 上运行 GPU 工作负载。 驱动程序版本和 GPU 详细信息可能与所示的内容不同。

NVIDIA 设备状态

RDMA 网络连接

可以在支持 RDMA 的 N 系列 VM(例如 NC24r)上启用 RDMA 网络连接,这些 VM 部署在同一可用性集中或虚拟机 (VM) 规模集的单个放置组中。 对于使用 Intel MPI 5.x 或更高版本运行的应用程序,RDMA 网络支持消息传递接口 (MPI) 流量:

分发

在 N 系列 VM 上,在支持 RDMA 连接的 Azure 市场中,从以下映像之一部署支持 RDMA 的 N 系列 VM:

  • Ubuntu 16.04 LTS - 在 VM 上配置 RDMA 驱动程序,并注册 Intel 下载 Intel MPI:

    1. 安装 dapl、rdmacm、ibverbs 和 mlx4

      sudo apt-get update
      
      sudo apt-get install libdapl2 libmlx4-1
      
      
    2. 在 /etc/waagent.conf 中,通过取消注释以下配置行来启用 RDMA。 需要根访问权限才能编辑该文件。

      OS.EnableRDMA=y
      
      OS.UpdateRdmaDriver=y
      
    3. 在 /etc/security/limits.conf 文件中,添加或更改 KB 中的以下内存设置。 需要根访问权限才能编辑该文件。 出于测试目的,可以将 memlock 设置为不受限制。 例如: <User or group name> hard memlock unlimited

      <User or group name> hard    memlock <memory required for your application in KB>
      
      <User or group name> soft    memlock <memory required for your application in KB>
      
    4. 安装 Intel MPI 库。 从 Intel 购买和下载库或下载免费评估版本

      wget http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz
      

      仅支持 Intel MPI 5.x 运行时。

      有关安装步骤,请参阅 Intel MPI 库安装指南

    5. 启用非根非调试器进程的 ptrace(为最新版本的 Intel MPI 所需)。

      echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
      
  • 基于 CentOS 的 7.4 HPC - 在 VM 上安装 RDMA 驱动程序和 Intel MPI 5.1。

  • 基于 CentOS 的 HPC - CentOS-HPC 7.6 及更高版本(适用于通过 SR-IOV 支持 InfiniBand 的 SKU)。 这些映像预安装了 Mellanox OFED 和 MPI 库。

注意

仅 Mellanox OFED 的 LTS 版本支持 CX3-Pro 卡。 在带有 ConnectX3-Pro 卡的 N 系列 VM 上使用 LTS Mellanox OFED 版本 (4.9-0.1.7.0)。 有关详细信息,请参阅 Linux 驱动程序

另外,某些最新的 Azure 市场 HPC 映像具有 Mellanox OFED 5.1 及更高版本,这些版本不支持 ConnectX3-Pro 卡。 请先检查 HPC 映像中的 Mellanox OFED 版本,然后再将其用于带有 ConnectX3-Pro 卡的 VM。

以下映像是支持 ConnectX3-Pro 卡的最新 CentOS-HPC 映像:

  • OpenLogic:CentOS-HPC:7.6:7.6.2020062900
  • OpenLogic:CentOS-HPC:7_6gen2:7.6.2020062901
  • OpenLogic:CentOS-HPC:7.7:7.7.2020062600
  • OpenLogic:CentOS-HPC:7_7-gen2:7.7.2020062601
  • OpenLogic:CentOS-HPC:8_1:8.1.2020062400
  • OpenLogic:CentOS-HPC:8_1-gen2:8.1.2020062401

在 NV 或 NVv3 系列 VM 上安装 GRID 驱动程序

若要在 NV 或 NVv3 系列 VM 上安装 NVIDIA GRID 驱动程序,请通过 SSH 连接到每个 VM,并执行 Linux 发行版的步骤。

Ubuntu

  1. 运行 lspci 命令。 验证 NVIDIA M60 卡是否显示为 PCI 设备。

  2. 安装更新。

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get dist-upgrade -y
    sudo apt-get install build-essential ubuntu-desktop -y
    sudo apt-get install linux-azure -y
    
  3. 禁用 Nouveau 内核驱动程序,该驱动程序与 NVIDIA 驱动程序不兼容。 (只能在 NV 或 NVv2 VM 上使用 NVIDIA 驱动程序。)若要禁用此驱动程序,请在 /etc/modprobe.d 中创建一个名为 nouveau.conf 的文件,其中包含以下内容:

    blacklist nouveau
    blacklist lbm-nouveau
    
  4. 重新启动 VM,并重新连接。 退出 X 服务器:

    sudo systemctl stop lightdm.service
    
  5. 下载并安装 GRID 驱动程序:

    wget -O NVIDIA-Linux-x86_64-grid.run https://go.microsoft.com/fwlink/?linkid=874272
    chmod +x NVIDIA-Linux-x86_64-grid.run
    sudo ./NVIDIA-Linux-x86_64-grid.run
    
  6. 当系统询问你是否要运行 nvidia-xconfig 实用程序以更新 X 配置文件时,请选择“是”。

  7. 完成安装后,将 /etc/nvidia/gridd.conf.template 复制到位于 /etc/nvidia/ 的新文件 gridd.conf

    sudo cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf
    
  8. 将下列内容添加到 /etc/nvidia/gridd.conf

    IgnoreSP=FALSE
    EnableUI=FALSE
    
  9. 将以下内容从 /etc/nvidia/gridd.conf 中删除(如果其存在):

    FeatureType=0
    
  10. 重新启动 VM,并继续验证安装。

在已启用安全启动的 Ubuntu 上安装 GRID 驱动程序

GRID 驱动程序安装过程不提供任何选项来跳过内核模块生成和安装并选择其他已签名的内核模块源,因此在安装已签名的内核模块后,必须在 Linux VM 中禁用安全启动,以便将它们与 GRID 配合使用。

CentOS 或 Red Hat Enterprise Linux

  1. 更新内核和 DKMS(建议)。 如果选择不更新内核,请确保 kernel-develdkms 的版本适合你的内核。

    sudo yum update
    sudo yum install kernel-devel
    sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    sudo yum install dkms
    sudo yum install hyperv-daemons
    
  2. 禁用 Nouveau 内核驱动程序,该驱动程序与 NVIDIA 驱动程序不兼容。 (只能在 NV 或 NV3 VM 上使用 NVIDIA 驱动程序。)若要执行此操作,请在 /etc/modprobe.d 中创建一个名为 nouveau.conf 的文件,其中包含以下内容:

    blacklist nouveau
    blacklist lbm-nouveau
    
  3. 重新启动 VM、重新进行连接并安装最新适用于 Hyper-V 和 Azure 的 Linux 集成服务。 通过验证 lspci 的结果来检查是否需要 LIS。 如果所有 GPU 设备都按预期列出,则不需要安装 .LIS。

    如果计划使用 CentOS/RHEL 7.8(或更高版本),请跳过此步骤,因为这些版本不再需要 LIS。

    wget https://aka.ms/lis
    tar xvzf lis
    cd LISISO
    
    sudo ./install.sh
    sudo reboot
    
    
  4. 重新连接到 VM 并运行 lspci 命令。 验证 NVIDIA M60 卡是否显示为 PCI 设备。

  5. 下载并安装 GRID 驱动程序:

    wget -O NVIDIA-Linux-x86_64-grid.run https://go.microsoft.com/fwlink/?linkid=874272
    chmod +x NVIDIA-Linux-x86_64-grid.run
    
    sudo ./NVIDIA-Linux-x86_64-grid.run
    
  6. 当系统询问你是否要运行 nvidia-xconfig 实用程序以更新 X 配置文件时,请选择“是”。

  7. 完成安装后,将 /etc/nvidia/gridd.conf.template 复制到位于 /etc/nvidia/ 的新文件 gridd.conf

    sudo cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf
    
  8. 添加两行到 /etc/nvidia/gridd.conf

    IgnoreSP=FALSE
    EnableUI=FALSE
    
  9. /etc/nvidia/gridd.conf 中删除一行(如果它存在):

    FeatureType=0
    
  10. 重新启动 VM,并继续验证安装。

验证驱动程序安装

要查询 GPU 设备状态,请建立到 VM 的 SSH 连接,并运行与驱动程序一起安装的 nvidia-smi 命令行实用工具。

如果已安装驱动程序,Nvidia SMI 会将 GPU-Util 列为 0%,直到你在 VM 上运行 GPU 工作负载。 驱动程序版本和 GPU 详细信息可能与所示的内容不同。

显示查询 GPU 设备状态时的输出的屏幕截图。

X11 服务器

如果需要使用 X11 服务器远程连接到 NV 或 NVv2 VM,建议使用 x11vnc,因为它允许硬件图形加速。 必须手动将 M60 设备的 BusID 添加到 X11 配置文件(通常为 etc/X11/xorg.conf)中。 添加 "Device" 节,如下所示:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "Tesla M60"
    BusID          "PCI:0@your-BusID:0:0"
EndSection

此外,更新 "Screen" 节以使用此设备。

通过运行以下命令可找到十进制 BusID

nvidia-xconfig --query-gpu-info | awk '/PCI BusID/{print $4}'

重新分配或重新启动 VM 后,BusID 可能会更改。 因此,重新启动 VM 后,可能需要创建脚本来更新 X11 配置中的 BusID。 例如,创建名为 busidupdate.sh(或所选的其他名称)的脚本,其内容如下所示:

#!/bin/bash
XCONFIG="/etc/X11/xorg.conf"
OLDBUSID=`awk '/BusID/{gsub(/"/, "", $2); print $2}' ${XCONFIG}`
NEWBUSID=`nvidia-xconfig --query-gpu-info | awk '/PCI BusID/{print $4}'`

if [[ "${OLDBUSID}" == "${NEWBUSID}" ]] ; then
        echo "NVIDIA BUSID not changed - nothing to do"
else
        echo "NVIDIA BUSID changed from \"${OLDBUSID}\" to \"${NEWBUSID}\": Updating ${XCONFIG}"
        sed -e 's|BusID.*|BusID          '\"${NEWBUSID}\"'|' -i ${XCONFIG}
fi

然后,在 /etc/rc.d/rc3.d 中为更新脚本创建一个条目,以便在启动时以 root 身份调用该脚本。

疑难解答

  • 可以使用 nvidia-smi 设置持久性模式,以便在需要查询卡时该命令的输出更快。 若要设置持久性模式,请执行 nvidia-smi -pm 1。 请注意,如果重启 VM,此模式设置将消失。 你可以始终将该模式设置编写为在启动时执行。
  • 如果已将 NVIDIA CUDA 驱动程序更新到最新版本,并且发现 RDMA 连接不再工作,请重新安装 RDMA 驱动程序以重新建立该连接。
  • 安装 LIS 期间,如果 LIS 不支持特定的 CentOS/RHEL OS 版本(或内核),则会引发“内核版本不受支持”错误。 请报告此错误以及 OS 和内核版本。
  • 如果作业被 GPU 上的 ECC 错误中断(可纠正或无法纠正),请先检查 GPU 是否符合 Nvidia 的任何 ECC 错误的 RMA 标准。 如果 GPU 符合 RMA 标准,请联系支持人员处理;否则,请按照此处所述,重新启动 VM 以重新附加 GPU。 入侵性较小的方法(如 nvidia-smi -r)不能与 Azure 中部署的虚拟化解决方案一起使用。

后续步骤