你当前正在访问 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 大小

警告

如果采用本指南中概述的方法之外的方法安装 NVIDIA 驱动程序,可能会导致预期的驱动程序安装失败。 若要确保适当的功能和支持,请仅执行安装步骤并使用本文档中指定的驱动程序版本。

支持的分发和驱动程序

NVIDIA CUDA 驱动程序

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

注意

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

注意

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

警告

应禁用安全启动和 vTPM,因为进程或在启用它们时挂起。

提示

作为一种在 Linux VM 上手动安装 CUDA 驱动程序的替代方法,可以部署 Azure Data Science Virtual Machine 映像。 适用于 Ubuntu 16.04 LTS 的 DSVM 版本预安装 NVIDIA CUDA 驱动程序、CUDA 深度神经网络库和其他工具。

NVIDIA GRID 驱动程序

注意

vGPU18 适用于 NCasT4_v3 系列。

vGPU18 现在仅在公共区域可用于 NVadsA10_v5 系列。 Mooncake 和 Fairfax 区域尚支持 NVadsA10_v5 系列的 vGPU18。 一旦 Mooncake 和 Fairfax 区域的 NVadsA10_v5 系列支持 vGPU18,我们将提供更新。

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 系列。

有关特定 vGPU 和驱动程序分支版本的详细信息,请访问 NVIDIA 网站。

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

Red Hat Enterprise Linux 8.6、8.8、8.9、8.10、9.0、9.2、9.3、9.4、9.5

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

Rocky Linux 8.4
NVIDIA vGPU 18.5,驱动程序分支 R570

NVIDIA vGPU 18.5,驱动程序分支 R570

注意

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

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

GRID 驱动程序 17.3 目前仅支持NCasT4_v3系列 VM。 若要使用此驱动程序, 请手动下载并安装 GRID 驱动程序 17.3

GRID 驱动程序在 Azure 内核 6.11 上安装时遇到问题。 若要取消阻止,请将内核降级到版本 6.8。 有关详细信息,请参阅 已知问题

有关所有以前的 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 卡):

屏幕截图:NVIDIA Tesla K80 卡的示例输出。

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. 安装 GPU 驱动程序后重新启动 VM:

    sudo reboot
    
  4. 从 NVIDIA 下载并安装 CUDA 工具包:

    注意

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

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

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/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-5
    

    安装可能需要几分钟。

  5. 安装完成后重启 VM:

    sudo reboot
    
  6. 验证是否已正确识别 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,并将 enabled 设置为 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 中部署的虚拟化解决方案)。

后续步骤