Instalacja środowiska do Tensorflow z GPU w Python 3 i virtualenv

Jak przygotować środowisko do Tensorflow, jak poprawnie zainstalować niezbędne biblioteki: CUDA, cuDNN oraz jak najlepiej zorganizować sobie strukturę folderów.

Co jakiś czas zmuszony jestem do zainstalowania środowiska do Tensorflow, a to u siebie na laptopie, a to na serwerach, a to na stacjonarnym w firmie. Oczywiście pełen sposób instalacji TF jest dostępny na stronie tej biblioteki, ja chciałbym wam przedstawić, ten który u mnie sprawdza się najlepiej.

Gdy zacząłem pracować z TF to zastanawiałem się jak to wszystko zorganizować aby było łatwo odtwarzalne, powtarzalne i w jak najmniejszym stopniu ingerowało w moje dotychczasowe konfiguracje i instalacje. Przez ten czas wyrobiłem już sobie pewne podejście, które u mnie działa dobrze. Na proces instalacji miało wpływ kilka decyzji:

  • będę wykorzystywał Pythona 3 (v3.5 dokładnie),
  • chcę utrzymać kompatybilność z poprzednimi wersjami TF, mam kilka skryptów pisanych w wersjach 0.10, czy 0.12,
  • chcę mieć elatyczne środowisko tak aby być przygotowanym na kolejne wersje (obecnie aktualna jest wersja 1.0),
  • chcę mieć dwie wersje TF na CPU i GPU, często u siebie na laptopie testuję na CPU, potem uruchamiam testowo na GPU zobaczyć czy „chodzi”. Ostatecznie obliczenia uruchamiam na serwerze z kartami GPU.

Jeżeli chcesz przejść do konkretów to całość została spisana w gist’cie ubuntu16_tensorflow_cuda8.sh

Post ten jest uaktualnioną i poprawioną wersją poprzednich postów:

Instalacja sterowników NVidia

Na początku należy zainstalować (lub zaktualizować) sterowniki karty graficznej od NVidi. Sterowniki będą pobrane z dodanego repozytorium ppa:graphics-drivers/ppa

# update packages
sudo apt-get update
sudo apt-get upgrade

#Add the ppa repo for NVIDIA graphics driver
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

#Install the recommended driver (currently nvidia-378)
sudo ubuntu-drivers autoinstall
sudo reboot

#check if drivers were installed
nvidia-smi

Instalujemy sterowniki i na końcu poleceniem nvidia-smi sprawdzamy czy wszystko poprawnie się zainstalowało.

Instalacja bibliotek CUDA i cuDNN

Gdy mamy już sterowniki to należy zainstalować biblioteki CUDA Toolkit oraz cuDNN. Obie można ściągnąć z stron NVidia. W chwili pisania posta CUDA dostępna była w wersji 8.0 a cuDNN w wersji 5.1, takie też wersje zalecane są na stronach Tensorflow.

wget -O cuda_8_linux.run https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run
sudo chmod +x cuda_8_linux.run
./cuda_8.0.61_375.26_linux.run

Instalacja cuDNN wymaga zaakceptowania licencji i odpowiedzi na stronie NVidi, ściągamy ją na dysk, rozpakowujemy i kopiujemy do folderu z bibliotekami CUDA Toolkit

tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz 

# copy libs to /usr/local/cuda folder
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*

Instalacja Tensorflow w virtualenv Python 3

Ostatnim krokiem jest instalacja Pythona 3, pakietu python3-venv oraz stworzenie wirtualnego środowisko przy pomocy virtualenv. Dzięki virtualenv będziemy mogli tworzyć niezależne od siebie wersje Pythona z różnym zestawem paczek, czyli poprzednie projekty nie będą sobie wchodziły w paradę z powodu zależności.

sudo apt install python3-pip
sudo apt install python3-venv

# create virtual environment for tensorflow
python3 -m venv tfenv

# activate the virtualenv workspace
source tfenv/bin/activate

# Instal tensorflow package with gpu support
(tfenv)$ pip install tensorflow-gpu
#or CPU version
(tfenv)$ pip install tensorflow

W przykładzie stworzyliśmy środowisko nazwane tfenv (nazwa jest dowolna), w którym instalujemy tensorflow, wersję na GPU lub CPU. Ja zazwyczaj tworzę dwa środowiska tfenv-gpu i tfenv-cpu każde z odpowiednią wersją biblioteki.

Sprawdzenie poprawności instalacji

Po zainstalowaniu bibliotek, a w szczególności z wspaciem dla GPU, ja zazwyczaj uruchamiam prosty skrypt w TF dodający dwie liczby. Uruchamiamy konsolę pythona importujemy tensorflow, tworzymy sesję, dwie stałe i dodajemy je do siebie. Istotne abyśmy zaraz po imporcie dostali informację o tym że biblioteki CUDA zostały odnalezione.

(tfenv)$ python

import tensorflow as tf
#I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
#I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally
#I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
#I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally
#I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
tf_session = tf.Session()
x = tf.constant(1)
y = tf.constant(1)
print(tf_session.run(x + y))
# 2
tf_session.close()

 

Błędy podczas instalacji lub uruchamiania?

Oczywiście jak to w informatyce, każdy ma inne środowisko i inne ustawienia, poniżej znajduje się aktuaizowana lista błędów, które mogą wystąpić:

  • Nie odnajduje bibliotek CUDA. Zazwyczaj jest to spowodowane nie ustawieniem ścieżek do CUDA, można to naprawić ustawiajć zmienne:
    export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64″
    export CUDA_HOME=/usr/local/cuda
    
  • Po aktualizacji Ubuntu 16.04 zostało mi zaktualizowane jądro vmlinuz-4.4.0-53-generic do vmlinuz-4.4.0-53-generic, przez co sterowniki do Nvidia także przestały działać, posuł się obraz i nie mogłem się zalogować do systemu! Pomogło uruchomienie w trybie rescu z siecią(wtedy system plików jest do zapisu), z konsoli usunąłem sterowniki
    sudo apt-get remove --purge nvidia*
    sudo shutdown -r now

    Po restarcie mogłęm się już zalogować i ponownie zainstalowałem sterowniki do nvidi, zostały one przebudowane z wsparciem dla nowego jądra.

7 Comments Instalacja środowiska do Tensorflow z GPU w Python 3 i virtualenv

    1. ksopyla

      Uuu, to powodzenia. Jeżeli to seria 10xx to zapas mocy obliczeniowej jest 🙂

    2. Nixus

      Dzięki za ściągawkę i dobre słowa. Udało się 🙂 Tylko trzeba było Secure Boota wyłączyć przy instalacji sterowników Nvidii.
      Pozdrawiam!
      P.S. to tylko 1050Ti szkoda, że nie 1080Ti 😛

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

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.