Configuración de paquetes específicos de GPU en Linux
En esta sección se describen los paquetes que necesita configurar para que CNTK aprovechen las GPU de NVIDIA.
Comprobación de la compatibilidad de GPU y obtención del controlador más reciente
Necesita una tarjeta gráfica compatible con CUDA disponible para usar CNTK funcionalidades de GPU. Puede comprobar si su tarjeta es compatible con CUDA aquí y aquí (para tarjetas anteriores). La capacidad de proceso de la tarjeta GPU (CC) debe ser 3.0 o más.
Si tiene la tarjeta necesaria, instale el controlador más reciente:
Seleccione la tarjeta y descargue el paquete de controladores desde aquí (normalmente disponible como
.run
archivo).Si se está ejecutando el administrador de X Windows, es probable que se produzca un error en la instalación del controlador. Abra una sesión de terminal remoto en la máquina y detenga el administrador de X Windows. Consulte la documentación de la plataforma para ver los comandos exactos.
Ejemplo: para Ubuntu, use el siguiente comando (suponiendo lightdm
que es el administrador de X Windows):
sudo stop lightdm
- Instale el controlador como en el ejemplo siguiente (tenga en cuenta que el nombre de archivo puede ser diferente para el sistema):
sudo chmod +x ./NVIDIA-Linux-x86_64-384.111.run
sudo ./NVIDIA-Linux-x86_64-384.111.run
Se recomienda aceptar las opciones de instalación predeterminadas.
Tenga en cuenta que el programa de instalación del controlador puede quejarse sobre el controlador kernel nouveau. Consulte la documentación de la plataforma para obtener instrucciones para deshabilitarla. Para Ubuntu, puede usar este conjunto de instrucciones.
- Si se detiene durante los pasos anteriores, inicie X Windows manager. Consulte la documentación de la plataforma para ver los comandos exactos.
Ejemplo: para Ubuntu, use el siguiente comando (en el caso de lightdm
como administrador de X Windows):
sudo start lightdm
CUDA 9
En el procedimiento siguiente se explica cómo instalar CUDA mediante .run
la distribución de archivos. También puede usar DEB
la instalación de paquetes o RPM
. Encontrará el paquete del sistema en la página de descarga de NVIDIA CUDA 9.0 e instrucciones de instalación en la documentación en línea de CUDA.
Descargue e instale el Toolkit NVIDIA CUDA 9.0:
Busque el
.run
archivo de su plataforma aquí y descárguelo.Si se está ejecutando el administrador de X Windows, es probable que se produzca un error en la instalación. Abra una sesión de terminal remoto en la máquina y detenga el administrador de X Windows. Consulte la documentación de la plataforma para ver los comandos exactos.
Ejemplo: para Ubuntu, use el siguiente comando (en el caso de lightdm
como administrador de X Windows):
sudo stop lightdm
- Instale el Toolkit CUDA 9.0 (tenga en cuenta que el
.run
nombre de archivo puede ser diferente para el sistema):
chmod +x ./cuda_9.0.176_384.81_linux.run
sudo ./cuda_9.0.176_384.81_linux.run
Cuando el instalador lo solicite:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit:
Seleccione no
si ya ha instalado el controlador más reciente realizando los pasos de la sección anterior. Si no lo ha hecho, seleccione yes
, pero se recomienda encarecidamente actualizar al controlador más reciente después de instalar cuda toolkit.
Si rechazó la instalación del controlador del paquete CUDA 9.0, recibirá la siguiente advertencia al final de la instalación:
***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
Omita esta advertencia.
Si se detiene durante los pasos anteriores, inicie X Windows manager. Consulte la documentación de la plataforma para ver los comandos exactos.
Ejemplo: para Ubuntu, use el siguiente comando (en el caso de lightdm
como administrador de X Windows):
sudo start lightdm
Agregue la siguiente variable de entorno a la sesión actual y al .bashrc
perfil (si modificó las rutas de acceso predeterminadas durante la instalación de CUDA, cambie los valores siguientes en consecuencia):
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
El siguiente paso es opcional. Puede ir más allá a la sección siguiente.
OPCIONAL. Comprobación de la instalación de CUDA 9.0
Puede comprobar la instalación de CUDA mediante la compilación de los ejemplos de CUDA (se supone que se usaron las rutas de acceso predeterminadas durante la instalación de CUDA). Tenga en cuenta que compilar todos los ejemplos es una operación larga:
cd ~/NVIDIA_CUDA-9.0_Samples/
make
Después de la utilidad de invocación deviceQuery
de compilación correcta:
~/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery/deviceQuery
Si todo funciona bien, debería obtener una salida similar a la siguiente:
./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
Kit de implementación de GPU
A partir de la versión 8 de CUDA, el Kit de implementación de GPU forma parte del paquete CUDA y ya no es necesario instalarse por separado.
cuDNN
Instale la biblioteca de red neuronal profunda (cuDNN) de NVIDIA CUDA.
Importante
Si ha instalado previamente cuDNN para una versión anterior, asegúrese de actualizar a la versión compatible con CUDA 9.0.
Importante
Instale cuDNN mediante la versión exacta y la ruta de acceso de destino como se especifica a continuación. Esto es necesario porque el programa de configuración de compilación CNTK espera.
- Use los comandos siguientes:
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
OPCIONAL. NCCL
La biblioteca NCCL de NVIDIA proporciona primitivos optimizados para la comunicación colectiva con varias GPU en Linux. CNTK puede aprovechar estas primitivas aceleradas para trabajos paralelos que se ejecutan en un único host (cf. aquí para obtener una introducción al entrenamiento paralelo con CNTK).
Siga las instrucciones que encontrará aquí para descargar la biblioteca 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
A continuación, use la opción --with-nccl=<path>
de configuración CNTK para habilitar la compilación con NVIDIA NCCL.
Por ejemplo, si NCCL está instalado en la carpeta distinta de la carpeta /usr
predeterminada, use configure --with-nccl=<nccl install folder>
(más opciones adicionales) para compilar con compatibilidad con NVIDIA NCCL.
Nota
Actualmente, la compatibilidad de CNTK con NVIDIA NCCL se limita a SGD paralelo de datos con 32/64 bits de degradado, mediante el binario CNTK. La compatibilidad con métodos de paralelización adicionales y CNTK v2 se agregará en el futuro. La versión oficial de CNTK se compila con NCCL habilitado. Todas las ruedas de Python de Linux ya incluyen binario NCCL. Para los usuarios de Brainscript en Linux, debe instalarse NCCL. Si el usuario prefiere no usar NCCL, compile CNTK desde el origen. Tenga en cuenta que configurar detecta automáticamente NCCL instalado en /usr, por lo que desinstale NCCL antes de la compilación.
CUB
Si va a instalar CNTK para Python, puede ir directamente a la sección siguiente. De lo contrario, continúe.
Obtenga e instale NVIDIA CUB con los comandos siguientes.
Importante
Instale NVIDIA CUB con la versión exacta y la ruta de acceso de destino como se especifica a continuación. Esto es necesario porque el programa de configuración de compilación CNTK espera.
Use los comandos siguientes:
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