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

在 Linux 上设置 GPU 特定包

本部分概述了需要设置的包,以便CNTK利用 NVIDIA GPU。

检查 GPU 兼容性并获取最新驱动程序

需要使用与 CUDA 兼容的图形卡才能使用 CNTK GPU 功能。 可以 在此处 和此处检查卡是否与 CUDA 兼容, (旧卡) 。 GPU 卡 计算功能 (CC) 必须为 3.0 或更高版本。

如果有所需的卡,请安装最新的驱动程序:

  • 选择卡并从 此处 下载驱动程序包, (通常作为 .run 文件)

  • 如果 X Windows 管理器正在运行,驱动程序安装可能会失败。 打开计算机远程终端会话并停止 X Windows 管理器。 有关确切命令,请参阅平台文档。

示例:对于 Ubuntu,请使用以下命令 (假设lightdm是 X Windows 管理器) :

sudo stop lightdm
  • 如以下示例所示安装驱动程序, (请注意,系统) 文件名可能有所不同:
sudo chmod +x ./NVIDIA-Linux-x86_64-384.111.run
sudo ./NVIDIA-Linux-x86_64-384.111.run

建议接受默认安装选项

请注意,驱动程序安装程序可能会抱怨 nouveau 内核驱动程序。 有关禁用平台的说明,请参阅平台文档。 对于 Ubuntu,可以使用 这组说明

  • 如果在上述步骤期间停止,请启动 X Windows 管理器。 有关确切命令,请参阅平台文档。

示例:对于 Ubuntu,请使用以下命令 (作为 lightdm X Windows 管理器) :

sudo start lightdm

CUDA 9

下面的过程说明如何使用文件分发安装 CUDA .run 。 还可以使用 DEBRPM 包安装。 可以在 CUDA Online 文档中NVIDIA CUDA 9.0 下载页和安装说明中找到系统的包。

下载并安装 NVIDIA CUDA 9.0 Toolkit:

  • .run在此处找到平台的文件并下载它。

  • 如果 X Windows管理器正在运行,则安装可能会失败。 打开计算机远程终端会话并停止 X Windows 管理器。 有关确切命令,请参阅平台文档。

示例:对于 Ubuntu,请使用以下命令 (作为 lightdm X Windows 管理器) :

sudo stop lightdm
  • 安装 CUDA 9.0 Toolkit (请注意,.run系统) 文件名可能有所不同:
chmod +x ./cuda_9.0.176_384.81_linux.run
sudo ./cuda_9.0.176_384.81_linux.run

安装程序提示时:

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit:

通过执行上一部分中的步骤,选择no是否已安装最新的驱动程序。 如果尚未执行此操作,请选择 yes,但 强烈建议 在安装 CUDA 工具包后更新到最新的驱动程序。

如果从 CUDA 9.0 包拒绝了驱动程序安装,将在安装结束时收到以下警告:

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run -silent -driver

忽略此警告。

如果在上述步骤期间停止,请启动 X Windows 管理器。 有关确切命令,请参阅平台文档。

示例:对于 Ubuntu,请使用以下命令 (作为 lightdm X Windows 管理器) :

sudo start lightdm

如果在 CUDA 安装期间修改了默认路径,请将以下环境变量添加到当前会话和 .bashrc 配置文件 (,请相应地更改以下值) :

export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH

下一步是可选的。 可以进一步跳到 下一部分

可选。 验证 CUDA 9.0 安装

可以通过编译 CUDA 示例来验证 CUDA 安装, (假定在 CUDA 安装) 期间使用了默认路径。 请注意,生成所有示例是一个漫长的操作:

cd ~/NVIDIA_CUDA-9.0_Samples/
make

成功生成调用 deviceQuery 实用工具后:

~/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery/deviceQuery

如果一切正常,则应获得如下所示的输出:

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 960"
  CUDA Driver Version / Runtime Version          9.0 / 9.0
  CUDA Capability Major/Minor version number:    5.2
  Total amount of global memory:                 2025 MBytes (2123235328 bytes)
  ( 8) Multiprocessors, (128) CUDA Cores/MP:     1024 CUDA Cores
  GPU Max Clock rate:                            1253 MHz (1.25 GHz)
  Memory Clock rate:                             3505 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 3 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.0, CUDA Runtime Version = 9.0, NumDevs = 1, Device0 = GeForce GTX 960
Result = PASS

GPU 部署工具包

从 CUDA 版本 8 开始,GPU 部署工具包是 CUDA 包的一部分,不再需要单独安装。

cuDNN

安装 NVIDIA CUDA 深度神经网络库 (cuDNN)

重要

如果以前为较旧版本安装了 cuDNN,请确保升级到 CUDA 9.0 兼容版本

重要

使用下面指定的确切版本和目标路径安装 cuDNN。 这是必要的,因为它需要由CNTK生成配置程序。

  • 使用以下命令:
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7_7.0.4.31-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7_7.0.4.31-1+cuda9.0_amd64.deb

可选。 NCCL

NVIDIA 的 NCCL 库 为 Linux 上的集体多 GPU 通信提供了优化的基元。 CNTK可以利用这些加速基元在单个主机 (cf 上运行的并行作业。此处介绍了如何使用 CNTK) 进行并行训练。

请按照 此处 的说明下载 NVIDIA NCCL 库。

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl-dev_2.1.2-1+cuda9.0_amd64.deb
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl2_2.1.2-1+cuda9.0_amd64.deb
sudo dpkg -i libnccl2_2.1.2-1+cuda9.0_amd64.deb libnccl-dev_2.1.2-1+cuda9.0_amd64.deb

然后,使用CNTK配置选项--with-nccl=<path>启用使用 NVIDIA NCCL 进行生成。 例如,如果 NCCL 安装在默认文件夹以外的文件夹中 /usr,请使用 configure --with-nccl=<nccl install folder> (加上其他选项,) 使用 NVIDIA NCCL 支持进行生成。

注意

目前,CNTK对 NVIDIA NCCL 的支持仅限于使用 CNTK 二进制CNTK的 32/64 渐变位的数据并行 SGD。 将来将添加对其他并行化方法和 CNTK v2 的支持。 正式发布CNTK是启用了 NCCL 的。 所有 linux Python 轮均已包含 NCCL 二进制文件。 对于 Linux 上的 Brainscript 用户,需要安装 NCCL。 如果用户希望不使用 NCCL,请从源生成CNTK。 请注意,配置会自动检测 /usr 下安装的 NCCL,因此请在生成前卸载 NCCL。

CUB

如果要为 Python 安装CNTK,可以跳到下一部分。 否则请继续操作。

使用以下命令获取并安装 NVIDIA CUB。

重要

使用下面指定的确切版本和目标路径安装 NVIDIA CUB。 这是必要的,因为它需要由CNTK生成配置程序。

使用以下命令:

wget https://github.com/NVlabs/cub/archive/1.7.4.zip
unzip ./1.7.4.zip
sudo cp -r cub-1.7.4 /usr/local