Instalacja NVidia CUDA 10 na ubuntu 18.04 dla Pytorch

Mnie też to przeraża, upgrade sterowników do CUDA jest tym, co powoduje dreszcze u każdego inżyniera uczenia maszynowego. Stąd skompilowałem instrukcję jak zainstalować CUDA 10 na Ubuntu 18.04 wraz z CuDNN z wykorzystaniem apt . Procedura jest prosta przetestowane i działa (przynajmniej u mnie)

Czytając początek, pewnie obleciał cię strach i ciarki przeszły po plecach. Wiem, mam tak samo, oddychaj.
Nie będzie aż tak źle, damy sobie radę.

Upgrade sterowników od CUDA jest dla mnie jak wizyta u dentysty, wiesz że trzeba, ale odciągasz w czasie. Upgrade wersji Pytorch pociągnął u mnie podbicie wersji CUDA, no cóż, ale

via GIPHY

Przejdźmy od razu do meritum. Poniższy skrypt dodaje do źródeł apt repozytorium od nVidia. Dzięki temu możemy zainstalować CUDA, wydając komendę

sudo apt install cuda

Skrypt do instalacji CUDA

Zakładam, że macie zainstalowane niezbędne sterowniki. Ja mam nvidia-driver-440

Usuwamy stare pozostałości po nVidia, upewniamy się, że system widzi kartę graficzną i instalujemy niezbędne pakiety. Ważny krok to upewnienie się, że karta jest widoczna w systemie.

#!/bin/bash

## This gist contains step by step instructions to install cuda v10.0 and cudnn 7.5 in Ubuntu 18.04
## Clean install 

### If you have previous installation remove it first. 
sudo apt-get purge nvidia*
sudo apt remove nvidia-*
sudo rm /etc/apt/sources.list.d/cuda*
sudo apt-get autoremove && sudo apt-get autoclean
sudo rm -rf /usr/local/cuda*

### to verify your gpu is cuda enable check
lspci | grep -i nvidia
### gcc compiler is required for development using the cuda toolkit. to verify the version of gcc install enter
gcc --version

# system update
sudo apt-get update
sudo apt-get upgrade

# install other import packages
sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev

# first get the PPA repository driver
sudo add-apt-repository ppa:graphics-drivers/ppa

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
sudo apt-get install cuda
sudo reboot

Ostatnie polecenie powinno spowodować, że w będziecie mieli działającą wersję CUDA 10.2 (taka wersja była najnowsza w chwili pisania 11.03.2020). W celu przetestowania czy wszystko jest ok wpiszcie w konsoli dwa polecenie

nvidia-smi
Wed Mar 11 12:54:24 2020       
 +-----------------------------------------------------------------------------+
 | NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    CUDA Version: 10.2     |
 |-------------------------------+----------------------+----------------------+
 | 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 GTX 960     On   | 00000000:01:00.0  On |                  N/A |
 | 41%   26C    P8    12W / 130W |    643MiB /  4040MiB |      0%      Default |
 +-------------------------------+----------------------+----------------------+
 +-----------------------------------------------------------------------------+
 | Processes:                                                       GPU Memory |
 |  GPU       PID   Type   Process name                             Usage      |
 |=============================================================================|
 |    0      1036      G   /usr/lib/xorg/Xorg                            24MiB |
 |    0      1139      G   /usr/bin/gnome-shell                          81MiB |
 |    0      1675      G   /usr/lib/xorg/Xorg                           240MiB |
 |    0      1809      G   /usr/bin/gnome-shell                         106MiB |
 |    0      2614      G   /proc/self/exe                               182MiB |
 +-----------------------------------------------------------------------------+
/usr/local/cuda/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
 Copyright (c) 2005-2019 NVIDIA Corporation
 Built on Wed_Oct_23_19:24:38_PDT_2019
 Cuda compilation tools, release 10.2, V10.2.89

Instalacja CuDNN

Warto, a w niektórych przypadkach należy zainstalować bibliotekę cuDNN (https://developer.nvidia.com/cudnn). W tym celu należy się zarejestrować w nVidia developer i wypełnić krótką ankietę. Następnie zostaniemy przeniesieni do strony z downloadem różnych wersji biblioteki.

Ja wybrałem paczkę dla Linux jako tar.gz. Ściągamy ją, rozpakowujemy i przekopiowujemy pliki do folderu.

tar -zxvf cudnn-_.0-linux-x64-v_.tgz
sudo cp -P cuda/lib64/* /usr/local/cuda/lib64/
sudo cp  cuda/include/* /usr/local/cuda/include
sudo chmod a+r /usr/local/cuda/include/cudnn.h

Warto także wyekspoertować zmienne środowiskowe aby sytem 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

Test czy Pytorch widzi GPU

Na zakończenie zostaje nam przetestować czy Pytorch widzi GPU. Uruchomcie skrypt, który powinien wypisać wam na konsoli szczegóły waszej karty.

from __future__ import print_function
import torch

if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    print(device)
    print(torch.cuda.get_device_properties(0))
    
    # allocate tensor on gpu
    x = torch.ones(5, 3).cuda()
    y = 2*x
    print(y)
else:
    print('GPU not enabled')
    

Podsumowanie

We wpisie opisałem sposób instalacji sterowników do CUDA na Ubuntu 18.04, w celu uruchamiania kodu Pytroch (1.4) wraz ze wsparciem GPU.

Gdybyście byli zainteresowani samym skryptem to tu jest link do Gist – https://gist.github.com/ksopyla/828012d8d6fa2493dde68179e5d7c85c

7 Comments Instalacja NVidia CUDA 10 na ubuntu 18.04 dla Pytorch

    1. ksopyla

      Z docera dużo korzystam w firmie, ma on swoje plusy. Jakoś nie przyszło mi do głowy, aby z niego skorzystać, jest nawet gotowy obraz i w niektórych usługach z niego korzystamy https://hub.docker.com/r/nvidia/cuda/
      Jednak jest to też jakiś narzut, bo trzeba biblioteki doinstalować i nie jest to aż tak proste.

      PS. Wow, wygrywasz nagrodę za najszybszy komentarz na blogu 🙂

  1. mawreckirecki

    Sposób instalacji działa. Dziękuję.

    Ale mam problem z aplikacją Steam. Ona wymaga bibliotek i386.

    Czy możesz pokazać jak jednocześnie zachować CUDA 10.2 z CUDNN, tak by działały z PyTorch a zatem wspierały Steam? Proszę.

    Reply
    1. ksopyla

      Niestety nie jestem w stanie tobie pomóc, nie korzystam z steam i ciężko mi odwzorować twoje środowisko. Jeżeli uda się tobie to zrobić to napisz, może innym się przyda

  2. mgab

    Trochę do końca nie rozumiem po co instalować cuda 10.2 skoro pytorch ma swoje własne biblioteki cuda i cudnn.

    Reply
  3. mgab

    Interesujący blog. Chyba jedyny o takiej tematyce w polskim internecie?
    Nie bardzo rozumiem po co instalować bibliteki cuda. Pytorch jest przecież dostarczany wraz z odpowiednimi bibliotekami i nie potrzeba instalować osobno samych cuda. Najważniejszy jest odpowiedni sterownik do karty graficznej, bo to od niego zależy jaka wersja cuda jest obsługiwana. Czyli – sprawdzamy jaka wersja cuda jest obsługiwana przez sterownik nvidii i taką wersję należy zainstalować pytorcha (poprzez pip, na stronie pytorcha generujemy link). Druga metoda to instalujemy najnowszą wersję pytorcha i do niego dopasowujemy sterownik nvidii. Same cuda nie są potrzebne.
    Co innego w tensorflow, bo te biblioteki korzystają z zewnętrznych bibliotek cuda i tam co opisałeś pewnie ma zastosowanie.
    Chyba, że chodzi jeszcze o coś innego?

    Reply
    1. ksopyla

      Instalacja Pytorch’a nie zawiera bibliotek CUDA więc musisz je mieć zainstalować osobno w systemie.
      Standardowa instalacja python + pip nie doinstaluje tobie CUDA, to trzeba samemu ogarnąć i stąd wpis.
      Nie wiem może anaconda to potrafi? 🙂

Dodaj komentarz

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