Jestem bardzo zdezorientowany różnymi wersjami CUDA wyświetlanymi po uruchomieniu which nvcc
i 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 nvcc
sugeruje, czy używam cuda10, jak nvidia-smi
sugeruje?
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ł.
Odpowiedzi:
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-smi
Narzę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 -V
wyś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 linuxZauważ, ż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-smi
na 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-smi
zgłasza wersję CUDA, która jest numerycznie równa lub wyższa od wersji zgłoszonej przeznvcc -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ślinvidia-smi
zgłasza CUDA 10.2 invcc -V
raportuje 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
nvcc
polecenie 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 jakfind
lublocate
(skorzystaj ze stron man, aby dowiedzieć się, jak to zrobić), aby znaleźćnvcc
plik wykonywalny. Zakładając, że istnieje tylko jeden, ścieżka do niego może zostać następnie wykorzystana do naprawienia zmiennej środowiskowej PATH.źródło
nvidia-smi
wyświetlanie CUDA 10.2, obecnie), ale wcześniejszą wersję CUDA (powiedzmy, 10.1), wystąpi różnica zgłoszona przeznvidia-smi
w porównaniu znvcc
. W tym przypadku nie stanowi to problemu.nvcc
zgł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 .nvcc
znajduje 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 ):
$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}}
$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
nvcc
invidia-smi
(lubnvtop
) zgłaszają tę samą wersję CUDA ...źródło
NsightCompute-2019.1
nazywa sięNsightCompute-1.0
w CUDA 10.0..bashrc
lubbash_profile
tak, aby było ono automatycznie ładowane dla każdej sesji bash. Zobacz tutaj: stackoverflow.com/questions/14637979/…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.
źródło