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
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.
A myśleliście nad konteneryzacją środowiska ? Ja się bawiłem z tym amatorsko na Jetson Nano. https://wchmurze.cloud/index.php/2019/11/11/jetson-nano-z-wykorzystaniem-konteneryzacji/ Narzutu konteneryzacji na wydajność jeszcze nie testowałem. Pełna zgoda, że konfiguracja CUDA jest coraz bardziej „cudowna”.
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 🙂
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ę.
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
Trochę do końca nie rozumiem po co instalować cuda 10.2 skoro pytorch ma swoje własne biblioteki cuda i cudnn.
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?
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? 🙂
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.
Masz rację instalacja CUDA nie jest potrzebna Pytorch powinen sobie ją zainstalować sam https://discuss.pytorch.org/t/please-help-me-understand-installation-for-cuda-on-linux/14217/8
ale w innych sytuacjach może się to przydać