Instalacja Tensorflow r0.12 CUDA 8 na ubuntu 16.04

Z racji zakupu nowego laptopa, byłem zmuszony od nowa zainstalować TensorFlow, moje ostatnie doświadczenie były raczej trudne, lecz obecna wersja biblioteki jest już dojrzalsza, to samo można powiedzieć o sterownikach od NVidia. Ostatecznie wszystko przebiegło bardzo sprawnie.

W instrukcji dowiesz się jak zainstalować TensorFlow r0.12 z CUDA Toolkit 8.0 na ubuntu 16.04, można to traktować jako zaktualizowaną wersję poprzedniego wpisu, no może bez takiego dramatyzmu jak ostatnio (https://ksopyla.com/2016/07/instalacja-tensorflow-0-9-cuda-7-5-na-ubuntu-16-04/). Całość instaluję na laptopie Dell Vostro 5486 z dwoma kartami graficznymi wbudowaną Intel HD 620 oraz dedykowaną NVidia Geforce 940MX.

Krok pierwszy –  Instalacja sterowników do NVDIA 375.20

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
 
#Install the recommended driver (currently nvidia-375.20)
$ sudo ubuntu-drivers autoinstall
$ sudo reboot

Z racji tego, że instalacja przebiegała na laptopie z dwoma kartami, instalując sterowniki do karty musiałem pozwolić na „Insecure boot”. Po pierwszym restarcie nie uruchomiło mi się Unity w Ubuntu, lecz po kolejnych wszystko było już ok. Po instalacji sterowników należy sprawdzić jaką kartę mamy w danym momencie wybraną, czy wbudowaną czy GeForce, do szczegółów odsyłam do dwóch wpisów:

Po instalacji powinniśmy móc przełączać się pomiędzy kartami z wykorzystaniem poleceń:

prime-select query

sudo prime-select intel
# lub
sudo prime-select nvidia

Po instalacji powinniśmy mieć zainstalowane narzędzie nvidia-smi

ksopyla@mars:~/Downloads$ nvidia-smi 
Mon Dec  5 21:58:56 2016       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.20                 Driver Version: 375.20                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce 940MX       Off  | 0000:01:00.0     Off |                  N/A |
| N/A   53C    P5    N/A /  N/A |    364MiB /  4075MiB |      6%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1015    G   /usr/lib/xorg/Xorg                             213MiB |
|    0      1918    G   compiz                                          48MiB |
|    0      2527    G   ...d/OmniboxBundledExperimentV1/StandardR7/P   102MiB |
+-----------------------------------------------------------------------------+

Krok drugi – Instalacja CUDA Toolkit

Ściągamy CUDA Toolkit 8, na stronie NVidia wybieramy kolejno:

  • system – Linux
  • architekture – x86_64
  • dystrybucję – Ubuntu
  • wersję – 16.04
  • typ instalatora – runfile(local) – Uwaga plik zajmuje ~1.5GB.

Nadajemy uprawnienia do wykonywania i uruchamiamy z konsoli

./cuda_8.0.44_linux.run

W trakcie instalacji na ekranie zostaniemy zapytani o następujące informacje:

  • Do you accept the previously read EULA?
    accept
  • Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
    n (sterowniki mamy zainstalowane już wcześniej)
  • Install the CUDA 8.0 Toolkit?
    y
  • Enter Toolkit Location:
    /usr/local/cuda-8.0 (enter)
  • Do you wish to run the installation with 'sudo’?
    y
  • Do you want to install a symbolic link at /usr/local/cuda?
    y (ułatwi to nam późniejszą konfigurację)
  • Install the CUDA 8.0 Samples?
    y (ja dałem yes, lecz to czy chcesz mieć przykłady zależy od ciebie i wielkości twojego dysku)
  • Enter CUDA Samples Location:
    enter (domyślnie w katalogu domowym użytkownika)

Po kilku minutach w konsoli otrzymamy takie podsumowanie, nie przejmujcie się warningiem:

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-8.0
Samples:  Installed in /home/ksopyla, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-8.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.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

Logfile is /tmp/cuda_install_13647.log

Krok trzeci – cuDNN

Tensorflow wymaga biblioteki cuDNN v5 (https://developer.nvidia.com/cudnn), aby ją ściągnąć należy się zarejestrować i zalogować do NVidia developer. Ja ściągnąłem

#rozpakowujemy
ksopyla@mars:~/Downloads$ tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz 
cuda/include/cudnn.h
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.5
cuda/lib64/libcudnn.so.5.1.5
cuda/lib64/libcudnn_static.a

Następnie kopiujemy pliki do /usr/local/cuda

sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

Krok czwarty – instalacja TensorFlow w virtualenv

$ sudo apt install python3-pip
$ sudo apt install python3-venv
$ python3 -m venv tfenv

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Installing from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp35-cp35m-linux_x86_64.whl
(tfenv)$ pip3 install --upgrade $TF_BINARY_URL

 

Na koniec aby wszystko przetestować, uruchomiłem prosty skrypt

#vim test_tf.py

import tensorflow as tf
tf_session = tf.Session()
x = tf.constant(1)
y = tf.constant(1)
print(tf_session.run(x + y))

W wyniku powinniśmy zobaczyć:

(tfenv) ksopyla@mars:~/dev$ python test_tf.py 
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:936] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce 940MX
major: 5 minor: 0 memoryClockRate (GHz) 1.189
pciBusID 0000:01:00.0
Total memory: 3.98GiB
Free memory: 3.59GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce 940MX, pci bus id: 0000:01:00.0)
2

Dwójka na samym końcu jest wynikiem naszego skryptu. Ważne aby udało się załadować wszystkie biblioteki CUDA.

 

4 Comments Instalacja Tensorflow r0.12 CUDA 8 na ubuntu 16.04

  1. Kuba

    Dzięki za tutorial, przydał się i działa 🙂

    Warto tylko jeszcze napisać na końcu o eksporcie dwóch zmiennych (bez tego u mnie python nie wiedział gdzie szukać cuda):

    export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64″
    export CUDA_HOME=/usr/local/cuda

    Reply
    1. ksopyla

      Tak @KUBA, masz rację. Czasami zmienne nie są ustawione i tensorflow nie odnajduje bibliotek do CUDA.

Ciekawe, wartościowe, podziel się proszę opinią!

This site uses Akismet to reduce spam. Learn how your comment data is processed.