安装 GPU 驱动程序


创建具有一个或多个 GPU 的实例后,系统需要安装 NVIDIA 设备驱动程序,以便应用可以访问该设备。确保您的虚拟机 (VM) 实例具有足够的可用磁盘空间(创建新虚拟机时,请至少为启动磁盘选择 30 GB)。

本文档介绍如何在通过公共映像自定义映像创建的虚拟机上安装 NVIDIA 专有驱动程序。

如需为虚拟工作站安装 GRID 驱动程序,请参阅为虚拟工作站安装 GRID 驱动程序

准备工作

NVIDIA 驱动程序、CUDA 工具包和 CUDA 运行时版本

您的环境中可能需要使用不同版本的驱动程序和运行时。其中包括以下组件:

  • NVIDIA 驱动程序
  • CUDA 工具包
  • CUDA 运行时

安装这些组件时,您可以配置环境以满足您的需求。例如,如果您的某个较低版本的 Tensorflow 最适合与某个较低版本的 CUDA 工具包搭配使用,但您想要使用的 GPU 需要更高版本的 NVIDIA 驱动程序,那么您可以安装较低版本的 CUDA 工具包和较高版本的 NVIDIA 驱动程序。

但是,您必须确保 NVIDIA 驱动程序和 CUDA 工具包版本兼容。如需了解 CUDA 工具包和 NVIDIA 驱动程序的兼容性,请参阅关于 CUDA 兼容性的 NVIDIA 文档。

必需的 NVIDIA 驱动程序版本

在 Compute Engine 上运行的 NVIDIA GPU 必须使用以下 NVIDIA 驱动程序版本:

  • 对于 A100 GPU:
    • Linux:450.80.02 或更高版本
    • Windows:452.77 或更高版本
  • 对于所有其他 GPU 类型:
    • Linux:NVIDIA 410.79 驱动程序或更高版本
    • Windows:426.00 驱动程序或更高版本

在虚拟机上安装 GPU 驱动程序

在大多数虚拟机上安装 NVIDIA 驱动程序的一种方法是安装 NVIDIA CUDA 工具包

要安装 NVIDIA 工具包,请完成以下步骤:

  1. 选择支持您需要的最低驱动程序版本CUDA 工具包

  2. 连接到要安装驱动程序的虚拟机

  3. 在虚拟机上,下载并安装 CUDA 工具包。下表列出了每个推荐的工具包的安装指南。在安装工具包之前,请确保完成安装指南中的安装前步骤。

    GPU 类型 建议使用的最低 CUDA 工具包版本 安装说明
    • NVIDIA A100
    • NVIDIA T4
    • NVIDIA V100
    • NVIDIA P100
    • NVIDIA P4
    • NVIDIA K80

示例

以下步骤展示了在几个操作系统上安装 CUDA 11 和关联的 NVIDIA® GPU 驱动程序的示例。

CentOS/RHEL

  1. 连接到要安装驱动程序的虚拟机

  2. 安装最新的内核软件包。如果需要,此命令也会重新启动系统。

    sudo yum clean all
    sudo yum install -y kernel | grep -q 'already installed' || sudo reboot
    
  3. 如果系统在上一步中重新启动,请重新连接到该虚拟机。

  4. 安装内核标头和开发软件包。

    sudo yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    
  5. 安装 epel-release 存储库。该存储库包含在 CentOS 上安装 NVIDIA 驱动程序所需的 DKMS 软件包。

    • CentOS 7/8 和 RHEL 7

      sudo yum install epel-release
      
    • 仅限 RHEL 8

      sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
      
  6. 安装 yum-utils

    sudo yum install yum-utils
    
  7. 选择 CUDA 工具包的驱动程序代码库,并将其添加到您的虚拟机中。

    • CentOS/RHEL 8

      sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
      
    • CentOS/RHEL 7

      sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
      
  8. 清理 Yum 缓存:

    sudo yum clean all
    
  9. 安装 CUDA。

    • CentOS/RHEL 8

      sudo dnf -y module install nvidia-driver:latest-dkms
      sudo dnf -y install cuda
      
    • CentOS/RHEL 7

      sudo yum -y install nvidia-driver-latest-dkms cuda
      
  10. 安装 NVIDIA 驱动程序。此命令将安装 CUDA 11。

    sudo yum -y install cuda-drivers
    

SLES

  1. 连接到要安装驱动程序的虚拟机

  2. 安装最新的内核软件包。如果需要,此命令也会重新启动系统。

    sudo zypper refresh
    sudo zypper up -y kernel-default | grep -q 'already installed' || sudo reboot
    
  3. 如果系统在上一步中重新启动,请重新连接到该实例。

  4. 选择 CUDA 工具包的驱动程序代码库,并将其添加到您的虚拟机中。

    sudo rpm --import https://developer.download.nvidia.com/compute/cuda/repos/sles15/x86_64/7fa2af80.pub
    sudo zypper install https://developer.download.nvidia.com/compute/cuda/repos/sles15/x86_64/cuda-11.0.3-1.x86_64.rpm
    
  5. 刷新 Zypper。

    sudo zypper refresh
    
  6. 安装包含 NVIDIA 驱动程序的 CUDA。

    sudo zypper install cuda
    

Ubuntu

  1. 连接到要安装驱动程序的虚拟机

  2. 安装最新的内核软件包。

    sudo apt install linux-headers-$(uname -r)
  3. 选择 CUDA 工具包的驱动程序代码库,并将其安装到您的虚拟机上。请遵循适用于您的 Ubuntu 版本的步骤。

    Ubuntu 20.04

    1. 下载 Ubuntu 20.04 驱动程序代码库。

      curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
      
    2. 移动代码库。

      sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
      
    3. 提取密钥。

      sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
      
    4. 添加代码库。

      sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
      
    5. 更新软件包列表。

      sudo apt update
      
    6. 安装包含 NVIDIA 驱动程序的 CUDA。

      sudo apt -y install cuda
      

    Ubuntu 18.04

    1. 下载 Ubuntu 18.04 驱动程序代码库。

      curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
      
    2. 移动代码库。

      sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
      
    3. 提取密钥。

      sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
      
    4. 添加代码库。

      sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
      
    5. 更新软件包列表。

      sudo apt update
      
    6. 安装包含 NVIDIA 驱动程序的 CUDA。

      sudo apt -y install cuda
      

    Ubuntu 16.04

    1. 下载 Ubuntu 16.04 驱动程序代码库。

      curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
      
    2. 移动代码库。

      sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
      
    3. 提取密钥。

      sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
      
    4. 添加代码库。

      sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/ /"
      
    5. 更新软件包列表。

      sudo apt update
      
    6. 安装包含 NVIDIA 驱动程序的 CUDA。

      sudo apt -y install cuda
      

Windows Server

  1. 连接到您需要安装驱动程序的实例

  2. 将包含 R452 分支(NVIDIA 452.77 或更高版本驱动程序)的 .exe 安装程序文件下载到您的实例。对于大多数 Windows Server 实例,您可以使用以下方式之一:

    例如,在 Windows Server 2019 中,您可以管理员身份打开 PowerShell 终端,并使用 Invoke-WebRequest 命令下载所需的驱动程序安装程序。Invoke-WebRequest 适用于 PowerShell 3.0 或更高版本。

    Invoke-WebRequest https://developer.download.nvidia.com/compute/cuda/11.2.0/network_installers/cuda_11.2.0_win10_network.exe -O cuda_11.2.0_win10_network.exe
  3. 运行 .exe 安装程序。例如,您可以以管理员身份打开 PowerShell 终端并运行以下命令:

    PS C:\> .\\cuda_11.2.0_win10_network.exe
    

在使用安全启动的虚拟机上安装 GPU 驱动程序

启用了安全启动的虚拟机需要由系统信任的密钥签署所有内核模块。

操作系统支持

  • 如需在使用安全启动的 Windows 操作系统上安装 NVIDIA 驱动程序,请参阅常规的在虚拟机上安装 GPU 驱动程序部分。
  • 对于 Linux 操作系统,仅支持 Ubuntu 18.04 和 20.04 操作系统。我们正在设法支持更多操作系统。

Ubuntu 18.04 和 20.04

  1. 连接到要安装驱动程序的虚拟机

  2. 更新代码库

    sudo apt-get update
    
  3. 搜索最新的 NVIDIA 内核模块软件包或您所需的版本。此软件包包含由 Ubuntu 密钥签名的 NVIDIA 内核模块。运行以下命令以查看最新的软件包:

    NVIDIA_DRIVER_VERSION=$(sudo apt-cache search 'linux-modules-nvidia-[0-9]+-gcp$' | awk '{print $1}' | sort | tail -n 1 | head -n 1 | awk -F"-" '{print $4}')
    

    例如,将数字指定为 2 可获取下一个早期版本:

    NVIDIA_DRIVER_VERSION=$(sudo apt-cache search 'linux-modules-nvidia-[0-9]+-gcp$' | awk '{print $1}' | sort | tail -n 2 | head -n 1 | awk -F"-" '{print $4}')
    

    您可以通过运行 echo $NVIDIA_DRIVER_VERSION 来检查选定的驱动程序版本。输出是一个类似于 455 的版本字符串。

  4. 安装内核模块软件包和相应的 NVIDIA 驱动程序:

    sudo apt install linux-modules-nvidia-${NVIDIA_DRIVER_VERSION}-gcp nvidia-driver-${NVIDIA_DRIVER_VERSION}
    

    如果该命令失败,并且显示“找不到软件包”错误,则代码库可能缺少最新的 nvidia 驱动程序。返回到最后一步,以查找早期驱动程序版本。

  5. 验证是否已安装 NVIDIA 驱动程序。您可能需要重新启动虚拟机。

  6. 配置 APT 以使用 NVIDIA 软件包代码库。

    1. 要帮助 APT 选择正确的依赖项,请按如下所示 Pin 代码库:

      sudo tee /etc/apt/preferences.d/cuda-repository-pin-600 > /dev/null <<EOL
      Package: nsight-compute
      Pin: origin *ubuntu.com*
      Pin-Priority: -1
      Package: nsight-systems Pin: origin *ubuntu.com* Pin-Priority: -1
      Package: nvidia-modprobe Pin: release l=NVIDIA CUDA Pin-Priority: 600
      Package: nvidia-settings Pin: release l=NVIDIA CUDA Pin-Priority: 600
      Package: * Pin: release l=NVIDIA CUDA Pin-Priority: 100 EOL

    2. 安装 software-properties-common。如果您使用的是 Ubuntu 最小映像,则必须执行此操作。

      sudo apt install software-properties-common
      

    3. 添加 NVIDIA 代码库:

      • Ubuntu 18.04

        sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
        sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
        
      • Ubuntu 20.04

        sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
        sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
        
  7. 找到兼容的 CUDA 驱动程序版本。

    以下脚本确定与我们刚刚安装的 NVIDIA 驱动程序兼容的最新 CUDA 驱动程序版本:

    CUDA_DRIVER_VERSION=$(apt-cache madison cuda-drivers | awk '{print $3}' | sort -r | while read line; do
       if dpkg --compare-versions $(dpkg-query -f='${Version}\n' -W nvidia-driver-${NVIDIA_DRIVER_VERSION}) ge $line ; then
           echo "$line"
           break
       fi
    done)
    

    您可以通过运行 echo $CUDA_DRIVER_VERSION 来检查 CUDA 驱动程序版本。输出是一个类似于 455.32.00-1 的版本字符串。

  8. 使用上一步中识别的版本安装 CUDA 驱动程序。

    sudo apt install cuda-drivers-${NVIDIA_DRIVER_VERSION}=${CUDA_DRIVER_VERSION} cuda-drivers=${CUDA_DRIVER_VERSION}
    

  9. 可选:保留 dkms 软件包。

    启用安全启动后,所有内核模块必须先签署然后才能加载。dkms 构建的内核模块不适用于虚拟机,因为在默认情况下它们没有正确签署。这是一个可选步骤,但它有助于防止您将来在无意中安装其他 dkms 软件包。

    如需保留 dkms 软件包,请运行以下命令:

    sudo apt-get remove dkms && sudo apt-mark hold dkms
    
  10. 安装 CUDA 工具包和运行时。

    选择合适的 CUDA 版本。以下脚本确定与我们刚刚安装的 CUDA 驱动程序兼容的最新 CUDA 版本:

    CUDA_VERSION=$(apt-cache showpkg cuda-drivers | grep -o 'cuda-runtime-[0-9][0-9]-[0-9],cuda-drivers [0-9\.]*' | while read line; do
       if dpkg --compare-versions ${CUDA_DRIVER_VERSION} ge $(echo $line | grep -Eo '[[:digit:]]+\.[[:digit:]]+') ; then
           echo $(echo $line | grep -Eo '[[:digit:]]+-[[:digit:]]')
           break
       fi
    done)
    

    您可以通过运行 echo $CUDA_VERSION 来检查 CUDA 版本。输出是一个类似于 11-1 的版本字符串。

    安装 CUDA 软件包:

    sudo apt install cuda-${CUDA_VERSION}
    

  11. 验证 CUDA 安装:

    sudo nvidia-smi
    /usr/local/cuda/bin/nvcc --version
    
    第一条命令输出 GPU 信息。第二条命令输出已安装的 CUDA 编译器版本。

验证 GPU 驱动程序的安装

驱动程序安装步骤完成后,请验证该驱动程序是否已正确安装和初始化。

Linux

连接到 Linux 实例,然后使用 nvidia-smi 命令验证该驱动程序是否正常运行。

sudo nvidia-smi

输出内容类似如下:

Wed Oct 28 21:34:28 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.32.00    Driver Version: 455.32.00    CUDA Version: 11.1     |
|-------------------------------+----------------------+----------------------+
| 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  A100-SXM4-40GB      Off  | 00000000:00:04.0 Off |                    0 |
| N/A   40C    P0    52W / 400W |      0MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

如果此命令失败,请查看以下内容:

  • 检查该虚拟机是否挂接了任何 GPU。

    使用以下命令检查是否有任何 NVIDIA PCI 设备:

    sudo lspci | grep -i "nvidia"

  • 检查驱动程序内核版本和虚拟机内核版本是否相同。

    • 如需检查虚拟机内核版本,请运行 uname -r
    • 如需检查驱动程序内核版本,请运行 sudo apt-cache show linux-modules-nvidia-NVIDIA_DRIVER_VERSION-gcp

    如果版本不匹配,请重新启动虚拟机到新的内核版本。

Windows Server

连接到 Windows Server 实例并以管理员身份打开 PowerShell 终端,然后运行以下命令,验证该驱动程序是否正常运行。

&"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"

输出内容类似如下:

Thu Feb  4 21:21:39 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.89       Driver Version: 460.89       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla P4            TCC  | 00000000:00:04.0 Off |                    0 |
| N/A   31C    P8     7W /  75W |      8MiB /  7611MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

后续步骤