Различные версии CUDA, показанные nvcc и NVIDIA-smi

101

Меня очень смущают разные версии 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…
Майкл Кензел
@MichaelKenzel Понятно. Благодарю за разъяснение! Думаю, я тогда использую CUDA9.2 ..
yuqli
Аналогичный вопрос здесь . @MichaelKenzel, если вы хотите добавить ответ, я бы поддержал.
Роберт Кровелла
@RobertCrovella, да, это было то, что я искал. Я узнал ответ только из вашего комментария, так что если кто-то и заслуживает положительного голоса, так это вы сами;)
Майкл Кензел

Ответы:

156

CUDA имеет 2 основных API: среду выполнения и API драйвера. У обоих есть соответствующая версия (например, 8.0, 9.0 и т. Д.)

Необходимая поддержка API драйвера (например, libcuda.so в Linux) устанавливается установщиком драйвера графического процессора.

Необходимая поддержка API среды выполнения (например, libcudart.so в Linux, а также nvcc) устанавливается установщиком набора инструментов CUDA (в который также может быть включен установщик драйвера графического процессора).

В любом случае (установленная) версия 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 в руководстве по установке CUDA 11 linux) руководства по установке 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
@ Робер Кровелла Спасибо за ясность. У меня такая же ситуация, что nvidia-smi показывает версию CUDA 10.1, а nvcc показывает 9.1. Теперь можно обучать сеть или установка все еще работает?
Дхирен Хамал
Я выполнил шаги после установки, но все же 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находится в папке bin CUDA - в качестве таковой проверьте, добавлена ​​ли папка bin CUDA в ваш $PATH.

В частности, убедитесь, что вы выполнили действия CUDA после установки (например, отсюда ):

  1. Добавьте CUDA Bin в $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 post на шаге 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. Я не уверен, была ли это проблема только в мне, или почему бы им не упомянуть об этом в официальной документации.

Солнечный
источник