Instalacja NVidia CUDA 10, 11 na ubuntu 18.04

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 na Ubuntu 18.04 wraz z CuDNN z wykorzystaniem apt . Procedura jest prosta przetestowane i działa (przynajmniej u mnie)

Historia edycji:

  • wpis przygotowany i sprawdzony dla wersji CUDA 10.2 (11.03.3030)
  • zakutalizowano dla CUDA 11.1 (4.12.2020)

Spieszysz się? Oto gist z listą kroków jak zainstalować CUDA na ubuntu 18.04 wraz z CuDNN

Aktualizacja: jak zauważyliście w komentarzach instalacja CUDA dla Pytorch nie jest wymagana, binarki instalowane przez pip lub conda mają już w sobie biblioteki dla CUDA i CuDNN. Jedynie w przypadku instalacji z źródeł trzeba mieć systemowo zainstalowaną CUDA. Może okazać się to potrzebne w sytuacji nowej karty lub najnowszych sterowników do czasu aż społeczonść PyTorch nie przygotuje odpowiednich paczek.

Aktualizacja2: Własna instancja CUDA i CUDA Tollkit jest także wymagana w stytuacji gdy będziecie wykorzystywali bibliotekę, która będzie kompilowna przy pierwszym użyciu. Wtedy zazwyczaj potrzebny jest nvcc dostępny w ścieżce. PyTorch ma tylko część bibliotek, niezbędnych do jego działania.

Instalacja CUDA, podróż czas zacząć

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żej opisane kroki pozwolą na zainstalowanie CUDA jednym poleceniem.

sudo apt install cuda

Ale zanim to nastąpi należy się przygotować, usunąć starsze wersje, oczyścić stare zależności, dodać repozytorium i zainstalować CUDA.

Skrypt do instalacji CUDA

Zakładam, że macie zainstalowane niezbędne sterowniki. Ja miałem nvidia-driver-440 (przy CUDA 10.2) obecnie 455.45.01 (CUDA 11.1)

Usuwamy stare pozostałości po nVidia, upewniamy się, że system widzi kartę graficzną i instalujemy niezbędne pakiety.

#!/bin/bash

### 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*

Ważny krok to upewnienie się, że karta jest widoczna w systemie (polecenie lspci). Następnie aktualizujemy listę pakietów i ewentualnie instalujemy te wymagane.

### 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

Na koniec dodajemy repozytorium ze sterowanikami oraz CUDA wraz z kluczem. I ostatecznie instalujemy CUDA, po czym dobrze zrestartować maszynę aby się upewnić że wszystko dobrze się podnosi.

# 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 będziecie mieli działającą wersję CUDA 11.1 (wersja z 04.12.2020). W celu przetestowania czy wszystko jest ok, wpisz w konsoli dwa polecenia

nvidia-smi
Wed Mar 11 12:54:24 2020       
 +-----------------------------------------------------------------------------+
 | NVIDIA-SMI 455.45.01    Driver Version: 455.45.01    CUDA Version: 11.1     |
 |-------------------------------+----------------------+----------------------+
 | 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-2020 NVIDIA Corporation
Built on Mon_Oct_12_20:09:46_PDT_2020
Cuda compilation tools, release 11.1, V11.1.105
Build cuda_11.1.TC455_06.29190527_0

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 wyeksportować zmienne środowiskowe i zapisać je na końcu pliku /home/$USER/.bashrc w aby system 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
export PATH="/usr/local/cuda/:$PATH"

Skrypt Pytorch sprawdzający wersję cuda i cudnn

Na zakończenie zostaje nam przetestować czy PyTorch widzi GPU. Uruchomcie skrypt, który powinien wypisać wam na konsoli szczegóły waszej karty. Weźcie pod uwagę, że jeżeli uruchamiacie ten skrypt w środowisku wirtualnym i tam macie zainstalowany PyTorch to pokaże wam wersję nie systemową, ale właśnie tę zainstalowaną przy instalacji PyTorch w środowisku wirtualnym.

import torch

if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    print(f'Cuda version: {torch.version.cuda}, CuDNN:{torch.backends.cudnn.version()}')
    print(torch.cuda.get_device_properties(0))
   
    # allocate tensor on gpu
    x = torch.ones(5, 3).cuda()
    print(x)
else:
    print('GPU not enabled')
    

Przykładowy output:

Cuda version: 11.1, CuDNN:8005
_CudaDeviceProperties(name='GeForce RTX 3090', major=8, minor=6, total_memory=24268MB, multi_processor_count=82)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], device='cuda:0')

Podsumowanie

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

Testowałem to na kartach RTX 3090 z CUDA 11.1 oraz Pytorch 1.7, choć oficjalnie jeszcze 1.7 nie wspiera CUDA 11.1 i samych RTX 3090

Jeżeli uważasz ten wpis za wartościowy to Zasubskrybuj bloga. Dostaniesz informacje o nowych artykułach.

Join 101 other subscribers

9 Comments Instalacja NVidia CUDA 10, 11 na ubuntu 18.04

    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

    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? 🙂

    2. mgab

      Instalowałem pytorcha przy pomocy poleceń generowanych na stronie https://pytorch.org/get-started/locally/ przy pomocy pip na czystym windowsie i ubuntu z najnowszym sterownikiem nvidii bez bibliotek cuda. Pytorch instaluje sobie sam biblioteki, co jest na plus w porównaniu np. do tensorflowa. Na przykład w windowsie biblioteki dll cuda znajdziesz w katalogu_witualnego_środowiska/lib/site-packages/torch/lib. Wynika z tego, że możesz utworzyć osobne środowiska wirtualne pythona z różnymi wersjami cuda. W ten sposób testowałem wydajność różnych wersji cuda i cudnn.

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

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