Різні версії CUDA, показані nvcc та NVIDIA-smi


102

Мене дуже бентежать різні версії CUDA, показані запуском which nvccта nvidia-smi.

На моєму ubuntu 16.04 встановлені як cuda9.2, так і cuda10. Тепер я встановив PATH вказувати на cuda9.2. Отже, коли я біжу:

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

Однак коли я біжу

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

Тож я використовую cuda9.2, як which nvccпропонується, чи використовую cuda10, як nvidia-smiпропонується?

Я бачив цю відповідь, але вона не дає прямої відповіді на плутанину, вона просто просить нас перевстановити cudatoolkit, що я вже зробив.


24
Здається, я бачив, як саме це запитання виникало неодноразово протягом останніх кількох днів. Але я, здається, зараз не можу знайти дублікат. Відповідь: nvidia-smi показує версію CUDA, яку підтримує ваш драйвер. У вас встановлений один із останніх драйверів 410.x, який підтримує CUDA 10. Версія, яку підтримує драйвер, не має нічого спільного з версією, яку ви компілюєте та пов'язуєте свою програму. Драйвер, що підтримує CUDA 10.0, також зможе запустити додаток, розроблений для CUDA 9.2 ...
Michael Kenzel

@MichaelKenzel Я бачу. Дякую за роз'яснення! Здогадуюсь, я тоді використовую CUDA9.2 ..
yuqli

Подібне питання тут . @MichaelKenzel, якщо ви хочете додати відповідь, я б підтримав.
Роберт Кровелла,

@RobertCrovella так, це я шукав. Відповідь я дізнався лише з вашого коментаря там, тож якщо хтось заслуговує на підтримку, то це ви самі;)
Майкл Кензель

Відповіді:


157

CUDA має 2 основних API, середовища виконання та API драйверів. Обидва мають відповідну версію (наприклад, 8.0, 9.0 тощо)

Необхідна підтримка API драйвера (наприклад, libcuda.so в Linux) встановлюється установчиком драйвера GPU.

Необхідна підтримка API виконання (наприклад, libcudart.so на linux, а також nvcc) встановлюється програмою встановлення набору інструментів CUDA (яка також може мати в комплекті інсталятор драйвера GPU).

У будь-якому випадку, версія (встановленого) драйвера API може не завжди відповідати (встановленій) версії API виконання, особливо якщо ви встановлюєте драйвер графічного процесора незалежно від встановлення CUDA (тобто набору інструментів CUDA).

nvidia-smiІнструмент інсталюється монтажником драйвера GPU, і , як правило , має драйвер GPU в режимі, не що - то встановлений монтажником CUDA Toolkit.

Нещодавно (десь між версіями драйверів 410.48 і 410.73 на Linux) можливі повноваження NVIDIA вирішили додати звітність про версію драйвера API CUDA, встановлену драйвером, у вихідні дані з nvidia-smi.

Це не має зв’язку з інстальованою версією середовища виконання CUDA.

nvcc, інструмент драйвера компілятора CUDA, інстальований із набором інструментів CUDA, завжди повідомляє про версію середовища виконання CUDA, яку він був побудований для розпізнавання. Він нічого не знає про те, яка версія драйвера встановлена, або навіть якщо встановлений драйвер графічного процесора.

Тому за дизайном ці два числа не обов’язково збігаються, оскільки вони відображають дві різні речі.

Якщо вам цікаво, чому nvcc -Vвідображається версія CUDA, на яку ви не очікували (наприклад, вона відображає версію, відмінну від тієї, яку ви вважаєте встановленою), або взагалі нічого не відображає, мудро, можливо, тому, що ви виконував обов’язкові вказівки на кроці 7 (до CUDA 11) (або кроці 6 у посібнику з встановлення Linux CUDA 11) керівництва по установці cuda linux

Зауважте, що, хоча це питання здебільшого має на увазі Linux, ті самі поняття стосуються встановлення Windows CUDA. З драйвером пов’язана версія драйвера CUDA (яку можна nvidia-smi, наприклад, запитувати ). Виконавець CUDA також має пов'язану з ним версію середовища виконання CUDA. Це не обов’язково збігатиметься у всіх випадках.

У більшості випадків, якщо nvidia-smiповідомляється про версію CUDA, яка чисельно дорівнює або перевищує версію, про яку повідомляється nvcc -V, це не викликає занепокоєння. Це визначений шлях сумісності в CUDA (новіші драйвери / API драйверів підтримують «старіші» набори інструментів CUDA / API виконання). Наприклад, якщо nvidia-smiзвіти CUDA 10.2 та nvcc -Vзвіти CUDA 10.1, це, як правило, не викликає занепокоєння. Це повинно просто працювати, і це не обов'язково означає, що ви "фактично встановили CUDA 10.2, коли мали намір встановити CUDA 10.1"

Якщо nvccкоманда взагалі нічого не повідомляє (наприклад Command 'nvcc' not found...), це також може бути пов'язано з неправильною інсталяцією CUDA, тобто обов'язкові кроки, згадані вище, були виконані неправильно. Ви можете почати з’ясовувати це за допомогою утиліти linux, наприклад, findабо locate(використовуйте сторінки користувача, щоб дізнатися, як це зробити, будь ласка), щоб знайти свій nvccвиконуваний файл. Якщо припустити, що існує лише один, шлях до нього можна використовувати для виправлення змінної середовища PATH.



1
@Rober Crovella Дякуємо за чіткість. У мене така ж ситуація nvidia-smi показує CUDA версії 10.1 і nvcc показує 9.1. Тепер нормально тренувати мережу чи все ще працює нормально?
Dhiren Hamal

Я дотримувався кроків після встановлення, але все-таки nvcc та nvidia-smi показують різні версії
cuda

Це цілком можливо. Якщо ви встановили найновіший драйвер (внаслідок чого nvidia-smiвідображається CUDA 10.2, на даний момент), але попередню версію CUDA (скажімо, 10.1), тоді буде відмінна різниця nvidia-smiпорівняно з nvcc. У цьому випадку це не проблема.
Роберт Кровелла,

Коментар корисний, але не пояснює, що відбувається, якщо nvccповідомляється про вищу версію (скажімо, 10.2), ніж nvidia-smi(скажімо, 10.1). У цьому випадку Cuda намагається скомпілювати його як 10.2 і намагається запустити 10.1. Як "RuntimeError: CUDA error: no kernel image is available for execution on the device"приклад, це зазвичай призводить до помилки під час виконання .
TheSaurus

3

nvccзнаходиться в папці смітника CUDA - як такий перевірте, чи папку смітника CUDA додано до вашої $PATH.

Зокрема, переконайтеся, що ви виконували дії CUDA після встановлення (наприклад, звідси ):

  1. Додайте контейнер CUDA $PATH(тобто додайте наступний рядок до свого ~/.bashrc)
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

PS. Переконайтеся, що наведені вище два шляхи існують спочатку: /usr/local/cuda-10.1/binі /usr/local/cuda-10.1/NsightCompute-2019.1(шлях NsightCompute може мати дещо інше закінчення залежно від встановленої версії обчислення Nsight ...

  1. Оновіть $LD_LIBRARY_PATH(тобто додайте наступний рядок до свого ~/bashrc).
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Після цього обидва nvccта nvidia-smi(або nvtop) повідомляють про одну і ту ж версію CUDA ...


Це тому, що $ PATH $ визначає використання CUDA 10. Але деяке програмне забезпечення вимагає різних версій CUDA.
yuqli

NsightCompute-2019.1називається NsightCompute-1.0в CUDA 10.0.
Астрід

Я дотримувався кроків після встановлення, але все-таки nvcc та nvidia-smi показують різні версії
cuda

кожного разу, коли я відкриваю термінал, я повинен запускати команду two paths (з моменту встановлення cuda на кроці 7). чи є спосіб зберегти стан і не потрібно повторно запускати команди шляху?
Монті,

@monti Так, ви можете написати команду, .bashrcабо bash_profileвона автоматично завантажується для кожного сеансу bash. Дивіться тут: stackoverflow.com/questions/14637979 / ...
yuqli

-1

Якщо ви використовуєте Cuda 10.2:

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

може допомогти, тому що коли я перевірив, у cuda-10.2 не було каталогу для nsight-compute. Я не впевнений, що це була проблема лише зі мною, інакше чому б вони не згадували про це в офіційній документації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.