Меня очень смущают разные версии 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, что я уже сделал.
Ответы:
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.источник
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"
Например, это обычно приводит к ошибке выполнения .nvcc
находится в папке bin CUDA - в качестве таковой проверьте, добавлена ли папка bin CUDA в ваш$PATH
.В частности, убедитесь, что вы выполнили действия CUDA после установки (например, отсюда ):
$PATH
(т.е. добавьте следующую строку в свой~/.bashrc
)export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}
$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 ...источник
NsightCompute-2019.1
вызываетсяNsightCompute-1.0
в CUDA 10.0..bashrc
илиbash_profile
она автоматически загружается для каждого сеанса bash. Смотрите здесь: stackoverflow.com/questions/14637979/…Если вы используете 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. Я не уверен, была ли это проблема только в мне, или почему бы им не упомянуть об этом в официальной документации.
источник