Configurare pacchetti specifici della GPU in Linux
Questa sezione descrive i pacchetti che è necessario configurare per poter CNTK sfruttare le GPU NVIDIA.
Controllare la compatibilità della GPU e ottenere il driver più recente
È necessaria una scheda grafica compatibile con CUDA disponibile per l'uso di funzionalità GPU CNTK. È possibile verificare se la scheda è compatibile con CUDA qui e qui (per le schede meno recenti). La funzionalità di calcolo della scheda GPU deve essere 3.0 o più.
Se si dispone della scheda necessaria, installare il driver più recente:
Selezionare la scheda e scaricare il pacchetto driver da qui (in genere disponibile come
.run
file)Se il gestore di Windows X è in esecuzione, l'installazione del driver avrà probabilmente esito negativo. Aprire una sessione del terminale remoto nel computer e arrestare il gestore di Windows X. Vedere la documentazione della piattaforma per i comandi esatti.
Esempio: per Ubuntu, usare il comando seguente (presupponendo lightdm
che sia il gestore X Windows):
sudo stop lightdm
- Installare il driver come nell'esempio seguente (si noti che il nome del file può essere diverso per il sistema):
sudo chmod +x ./NVIDIA-Linux-x86_64-384.111.run
sudo ./NVIDIA-Linux-x86_64-384.111.run
È consigliabile accettare le opzioni di installazione predefinite
Si noti che il programma di installazione del driver può lamentarsi del driver kernel nouveau. Per istruzioni per disabilitarla, vedere la documentazione della piattaforma. Per Ubuntu è possibile usare questo set di istruzioni.
- Se interrotto durante i passaggi precedenti, avviare X Windows manager. Vedere la documentazione della piattaforma per i comandi esatti.
Esempio: per Ubuntu, usare il comando seguente (nel caso di lightdm
come gestore di Windows X):
sudo start lightdm
CUDA 9
La procedura seguente illustra come installare CUDA usando .run
la distribuzione di file. È anche possibile usare o RPM
installare DEB
pacchetti. Il pacchetto per il sistema è disponibile nella pagina di download e nelle istruzioni di installazione di NVIDIA CUDA 9.0 nella documentazione di CUDA Online.
Scaricare e installare la Toolkit NVIDIA CUDA 9.0:
Trovare il
.run
file per la piattaforma qui e scaricarlo.Se il gestore di Windows X è in esecuzione, l'installazione avrà esito negativo. Aprire una sessione del terminale remoto nel computer e arrestare il gestore di Windows X. Vedere la documentazione della piattaforma per i comandi esatti.
Esempio: per Ubuntu usare il comando seguente (nel caso di lightdm
come gestore di Windows X):
sudo stop lightdm
- Installare il Toolkit CUDA 9.0 (si noti che il nome del file può essere diverso per il
.run
sistema):
chmod +x ./cuda_9.0.176_384.81_linux.run
sudo ./cuda_9.0.176_384.81_linux.run
Quando richiesto dal programma di installazione:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit:
Selezionare no
se il driver più recente è già stato installato eseguendo i passaggi nella sezione precedente. Se non è stato fatto, selezionare , ma è consigliabile aggiornare yes
il driver più recente dopo l'installazione del toolkit CUDA.
Se l'installazione del driver è stata rifiutata dal pacchetto CUDA 9.0, verrà visualizzato l'avviso seguente alla fine dell'installazione:
***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
Ignorare questo avviso.
Se interrotto durante i passaggi precedenti, avviare X Windows manager. Per i comandi esatti, vedere la documentazione della piattaforma.
Esempio: per Ubuntu usare il comando seguente (nel caso di lightdm
come gestore di Windows X):
sudo start lightdm
Aggiungere la variabile di ambiente seguente alla sessione corrente e .bashrc
al profilo (se sono stati modificati i percorsi predefiniti durante l'installazione di CUDA, modificare i valori seguenti):
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
Il passaggio successivo è facoltativo. È possibile ignorare ulteriormente la sezione successiva.
FACOLTATIVO Verifica dell'installazione di CUDA 9.0
È possibile verificare l'installazione di CUDA compilando gli esempi CUDA (si presuppone che i percorsi predefiniti siano stati usati durante l'installazione di CUDA). Si noti che la compilazione di tutti gli esempi è un'operazione prolungata:
cd ~/NVIDIA_CUDA-9.0_Samples/
make
Dopo aver completato l'utilità di richiamare deviceQuery
la compilazione:
~/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery/deviceQuery
Se tutto funziona bene, è consigliabile ottenere un output simile a quello seguente:
./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 di distribuzione GPU
A partire da CUDA versione 8, il Kit di distribuzione GPU fa parte del pacchetto CUDA e non è più necessario installare separatamente.
cuDNN
Installare la libreria di rete neurale profonda NVIDIA CUDA (cuDNN).
Importante
Se in precedenza è stato installato cuDNN per una versione precedente, assicurarsi di eseguire l'aggiornamento alla versione compatibile con CUDA 9.0
Importante
Installare cuDNN usando la versione esatta e il percorso di destinazione come specificato di seguito. Questo è necessario perché è previsto dal programma di configurazione di compilazione CNTK.
- Usare il seguente comando:
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
FACOLTATIVO NCCL
La libreria NCCL di NVIDIA offre primitive ottimizzate per la comunicazione multi-GPU collettiva in Linux. CNTK può sfruttare queste primitive accelerate per i processi paralleli in esecuzione su un singolo host (vedere qui per un'introduzione al training parallelo con CNTK).
Seguire le istruzioni qui per scaricare la libreria NCCL NVIDIA.
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
Usare quindi l'opzione --with-nccl=<path>
di configurazione CNTK per abilitare la compilazione con NVIDIA NCCL.
Ad esempio, se l'NCCL viene installato nella cartella diversa dalla cartella /usr
predefinita, usare configure --with-nccl=<nccl install folder>
(più opzioni aggiuntive) per compilare con il supporto NCCL NVIDIA.
Nota
Attualmente, il supporto di CNTK per NVIDIA NCCL è limitato a SGD parallelo ai dati con 32/64 bit sfumature, usando il CNTK binario. Il supporto per altri metodi di parallelizzazione e CNTK v2 verranno aggiunti in futuro. La versione ufficiale di CNTK viene compilata con NCCL abilitata. Tutte le ruote Python linux includono già il binario NCCL. Per gli utenti brainscript in Linux, l'ncCL deve essere installato. Se l'utente preferisce non usare NCCL, compilare CNTK dall'origine. Si noti che la configurazione rileva automaticamente l'NCCL installata in /usr, quindi disinstallare NCCL prima della compilazione.
CUB
Se si installa CNTK per Python, è possibile passare alla sezione successiva. In caso contrario, procedere ulteriormente.
Ottenere e installare NVIDIA CUB usando i comandi seguenti.
Importante
Installare NVIDIA CUB usando la versione esatta e il percorso di destinazione come specificato di seguito. Questo è necessario perché è previsto dal programma di configurazione di compilazione CNTK.
Usare il seguente comando:
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