Różne wersje CUDA pokazane przez nvcc i NVIDIA-smi

122

Jestem bardzo zdezorientowany różnymi wersjami CUDA wyświetlanymi po uruchomieniu which nvcci nvidia-smi.

Mam zainstalowane cuda9.2 i cuda10 na moim ubuntu 16.04. Teraz ustawiłem PATH na cuda9.2. Więc kiedy biegnę:

 $ which nvcc
 /usr/local/cuda-9.2/bin/nvcc

Jednak kiedy biegnę

$ nvidia-smi
Wed Nov 21 19:41:32 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.72       Driver Version: 410.72       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| 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 106...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   53C    P0    26W /  N/A |    379MiB /  6078MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1324      G   /usr/lib/xorg/Xorg                           225MiB |
|    0      2844      G   compiz                                       146MiB |
|    0     15550      G   /usr/lib/firefox/firefox                       1MiB |
|    0     19992      G   /usr/lib/firefox/firefox                       1MiB |
|    0     23605      G   /usr/lib/firefox/firefox                       1MiB |

Więc używam cuda9.2, jak which nvccsugeruje, czy używam cuda10, jak nvidia-smisugeruje?

Ja zobaczyłem tę odpowiedź , ale to nie daje bezpośredniej odpowiedzi do zamieszania, po prostu prosi nas, aby ponownie zainstalować cudatoolkit, który już zrobił.

yuqli
źródło
29
Myślę, że w ciągu ostatnich kilku dni widziałem to pytanie wielokrotnie. Ale teraz nie mogę znaleźć duplikatu. Odpowiedź brzmi: nvidia-smi pokazuje wersję CUDA, którą obsługuje twój sterownik. Masz zainstalowany jeden z najnowszych sterowników 410.x, który obsługuje CUDA 10. Wersja obsługiwana przez sterownik nie ma nic wspólnego z wersją, którą kompilujesz i z którą łączysz swój program. Sterownik obsługujący CUDA 10.0 będzie również mógł uruchamiać aplikację zbudowaną dla CUDA 9.2…
Michael Kenzel
@MichaelKenzel Widzę. Dziękuję za wyjaśnienie! Chyba używam wtedy CUDA9.2 ..
yuqli
Podobne pytanie jest tutaj . @MichaelKenzel, jeśli chcesz dodać odpowiedź, zagłosowałbym za.
Robert Crovella
1
@RobertCrovella tak, to był ten, którego szukałem. Odpowiedzi nauczyłem się tylko z twojego komentarza, więc jeśli ktoś zasługuje na pochwałę, to ty sam;)
Michael Kenzel

Odpowiedzi:

179

CUDA ma 2 podstawowe interfejsy API, środowisko wykonawcze i interfejs API sterownika. Oba mają odpowiednią wersję (np. 8.0, 9.0 itd.)

Niezbędne wsparcie dla sterownika API (np. Libcuda.so w Linuksie) jest instalowane przez instalator sterownika GPU.

Niezbędne wsparcie dla runtime API (np. Libcudart.so w Linuksie, a także nvcc) jest instalowane przez instalator zestawu narzędzi CUDA (który może również zawierać dołączony instalator sterownika GPU).

W każdym razie (zainstalowana) wersja interfejsu API sterownika może nie zawsze odpowiadać (zainstalowanej) wersji interfejsu API środowiska wykonawczego, zwłaszcza jeśli instalujesz sterownik GPU niezależnie od instalacji CUDA (tj. Zestawu narzędzi CUDA).

nvidia-smiNarzędzie zostanie zainstalowane przez instalatora sterowników GPU, i na ogół ma sterownika karty graficznej w widoku, a nie coś instalowane przez instalatora CUDA Toolkit.

Niedawno (gdzieś pomiędzy wersją sterownika 410.48 a 410.73 na Linuksie) pracownicy firmy NVIDIA zdecydowali się dodać raportowanie wersji interfejsu API sterownika CUDA zainstalowanej przez sterownik, w danych wyjściowych z pliku nvidia-smi.

Nie ma to związku z zainstalowaną wersją środowiska wykonawczego CUDA.

nvcc, narzędzie sterownika kompilatora CUDA, które jest instalowane z zestawem narzędzi CUDA, zawsze zgłasza wersję środowiska wykonawczego CUDA, do rozpoznania której zostało stworzone. Nie wie nic o zainstalowanej wersji sterownika, ani nawet o tym, czy jest zainstalowany sterownik GPU.

Dlatego też, zgodnie z projektem, te dwie liczby niekoniecznie są zgodne, ponieważ odzwierciedlają dwie różne rzeczy.

Jeśli zastanawiasz się, dlaczego nvcc -Vwyświetla wersję CUDA, której się nie spodziewałeś (np. Wyświetla wersję inną niż ta, którą myślisz, że zainstalowałeś) lub w ogóle nic nie wyświetla, jeśli chodzi o wersję, może to być spowodowane tym, że nie postępował zgodnie z obowiązkowymi instrukcjami w kroku 7 (przed CUDA 11) (lub kroku 6 w przewodniku instalacji CUDA 11 linux) w cuda linux

Zauważ, że chociaż to pytanie dotyczy głównie Linuksa, te same pojęcia dotyczą instalacji CUDA w systemie Windows . Ze sterownikiem jest powiązana wersja sterownika CUDA ( nvidia-smina przykład można zapytać ). Środowisko wykonawcze CUDA ma również powiązaną wersję środowiska wykonawczego CUDA. Nie zawsze będą one pasować do siebie.

W większości przypadków, jeśli nvidia-smizgłasza wersję CUDA, która jest numerycznie równa lub wyższa od wersji zgłoszonej przez nvcc -V, nie jest to powodem do niepokoju. To jest zdefiniowana ścieżka zgodności w CUDA (nowsze sterowniki / API sterowników obsługują "starsze" zestawy narzędzi CUDA / API runtime). Na przykład, jeśli nvidia-smizgłasza CUDA 10.2 i nvcc -Vraportuje CUDA 10.1, generalnie nie jest to powodem do niepokoju. Powinien po prostu działać i niekoniecznie oznacza, że ​​„faktycznie zainstalowałeś CUDA 10.2, kiedy zamierzałeś zainstalować CUDA 10.1”

Jeśli nvccpolecenie w ogóle nic nie zgłasza (np. Command 'nvcc' not found...), Może to być również spowodowane nieprawidłową instalacją CUDA, tj. Wymienione powyżej czynności obowiązkowe nie zostały wykonane poprawnie. Możesz zacząć to rozumieć, używając narzędzia linuksowego, takiego jak findlub locate(skorzystaj ze stron man, aby dowiedzieć się, jak to zrobić), aby znaleźć nvccplik wykonywalny. Zakładając, że istnieje tylko jeden, ścieżka do niego może zostać następnie wykorzystana do naprawienia zmiennej środowiskowej PATH.

Robert Crovella
źródło
1
@Rober Crovella Dzięki za jasność. Mam taką samą sytuację nvidia-smi pokazuje CUDA w wersji 10.1, a nvcc pokazuje 9.1. Czy teraz można trenować sieć, czy też instalacja jest w porządku?
Dhiren Hamal
Postępowałem zgodnie z krokami po instalacji, ale nadal nvcc i nvidia-smi pokazują różne wersje
cuda
To jest całkowicie możliwe. Jeśli zainstalowałeś najnowszy sterownik (powodujący nvidia-smiwyświetlanie CUDA 10.2, obecnie), ale wcześniejszą wersję CUDA (powiedzmy, 10.1), wystąpi różnica zgłoszona przez nvidia-smiw porównaniu z nvcc. W tym przypadku nie stanowi to problemu.
Robert Crovella
Komentarz jest pomocny, ale nie wyjaśnia, co się stanie, jeśli nvcczgłosi wyższą wersję (powiedzmy 10.2) niż nvidia-smi(powiedzmy 10.1). W takim przypadku Cuda próbuje skompilować go jako 10.2 i próbuje uruchomić go w 10.1. Zwykle powoduje "RuntimeError: CUDA error: no kernel image is available for execution on the device"to na przykład błąd w czasie wykonywania .
TheSaurus
5

nvccznajduje się w folderze bin CUDA - jako taki sprawdź, czy folder bin CUDA został dodany do twojego $PATH.

W szczególności upewnij się, że wykonałeś akcje CUDA po instalacji (np. Z tego miejsca ):

  1. Dodaj pojemnik CUDA do $PATH(tj. Dodaj następujący wiersz do swojego ~/.bashrc)
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

PS. Upewnij się, że następujące dwie ścieżki powyżej istnieją jako pierwsze: /usr/local/cuda-10.1/bini /usr/local/cuda-10.1/NsightCompute-2019.1(ścieżka NsightCompute może mieć nieco inne zakończenie w zależności od zainstalowanej wersji obliczeniowej Nsight ...

  1. Zaktualizuj $LD_LIBRARY_PATH(tj. Dodaj następujący wiersz do swojego ~/bashrc).
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Następnie obaj nvcci nvidia-smi(lub nvtop) zgłaszają tę samą wersję CUDA ...

Ismail Moghul
źródło
Dzieje się tak, ponieważ $ PATH $ określa użycie CUDA 10. Jednak niektóre programy wymagają różnych wersji CUDA.
yuqli
NsightCompute-2019.1nazywa się NsightCompute-1.0w CUDA 10.0.
Astrid,
Postępowałem zgodnie z krokami po instalacji, ale nadal nvcc i nvidia-smi pokazują różne wersje
cuda
za każdym razem, gdy otwieram terminal, muszę uruchomić polecenie dwie ścieżki (z instalacji CUDA po instalacji w kroku 7). czy istnieje sposób, w jaki mogę utrzymać stan i nie muszę wielokrotnie uruchamiać poleceń ścieżki?
monti
@monti Tak, możesz napisać polecenie .bashrclub bash_profiletak, aby było ono automatycznie ładowane dla każdej sesji bash. Zobacz tutaj: stackoverflow.com/questions/14637979/…
yuqli
0

Jeśli używasz CUDA 10.2:

export PATH=/usr/local/cuda-10.2/bin:/opt/nvidia/nsight-compute/2019.5.0${PATH:+:${PATH}}

może pomóc, ponieważ kiedy sprawdzałem, w cuda-10.2 nie było katalogu dla nsight-compute. Nie jestem pewien, czy to był tylko problem ze mną, czy inaczej, dlaczego nie mieliby o tym wspomnieć w oficjalnej dokumentacji.

Słoneczny
źródło