Diferentes versiones de CUDA mostradas por nvcc y NVIDIA-smi

101

Estoy muy confundido por las diferentes versiones de CUDA que se muestran al ejecutar which nvcc y nvidia-smi.

Tengo tanto cuda9.2 como cuda10 instalados en mi ubuntu 16.04. Ahora configuro el PATH para que apunte a cuda9.2. Entonces cuando corro:

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

Sin embargo, cuando corro

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

Entonces, ¿estoy usando cuda9.2 como se which nvccsugiere, o estoy usando cuda10 como se nvidia-smisugiere?

Yo vi esta respuesta , pero no proporciona una respuesta directa a la confusión, sólo nos pide que vuelva a instalar el cudatoolkit, que ya lo hice.

Yuqli
fuente
24
Creo que he visto esta pregunta exacta surgir varias veces durante los últimos días. Pero parece que no puedo encontrar un duplicado ahora. La respuesta es: nvidia-smi le muestra la versión CUDA que admite su controlador. Tiene uno de los controladores 410.x recientes instalados que admiten CUDA 10. La versión que admite el controlador no tiene nada que ver con la versión que compila y vincula su programa. Un controlador que admita CUDA 10.0 también podrá ejecutar una aplicación que fue construida para CUDA 9.2…
Michael Kenzel
@MichaelKenzel Ya veo. ¡Gracias por la aclaración! Supongo que estoy usando CUDA9.2 entonces ...
Yuqli
Aquí hay una pregunta similar . @MichaelKenzel, si desea agregar una respuesta, votaría a favor.
Robert Crovella
@RobertCrovella sí, ese era el que estaba buscando. Solo aprendí la respuesta de su comentario allí, así que si alguien merece un voto positivo, entonces es usted mismo;)
Michael Kenzel

Respuestas:

156

CUDA tiene 2 API principales, el tiempo de ejecución y la API del controlador. Ambos tienen una versión correspondiente (por ejemplo, 8.0, 9.0, etc.)

El soporte necesario para la API del controlador (por ejemplo, libcuda.so en Linux) lo instala el instalador del controlador de la GPU.

El soporte necesario para la API en tiempo de ejecución (por ejemplo, libcudart.so en linux y también nvcc) lo instala el instalador del kit de herramientas CUDA (que también puede tener un instalador de controlador de GPU incluido).

En cualquier caso, es posible que la versión de la API del controlador (instalada) no siempre coincida con la versión de la API en tiempo de ejecución (instalada), especialmente si instala un controlador de GPU independientemente de la instalación de CUDA (es decir, el kit de herramientas de CUDA).

La nvidia-smiherramienta la instala el instalador del controlador de la GPU y, por lo general, tiene el controlador de la GPU a la vista, no nada instalado por el instalador del kit de herramientas CUDA.

Recientemente (en algún lugar entre la versión del controlador 410.48 y 410.73 en Linux) los poderes fácticos de NVIDIA decidieron agregar informes de la versión de la API del controlador CUDA instalada por el controlador, en la salida de nvidia-smi.

Esto no tiene conexión con la versión de tiempo de ejecución de CUDA instalada.

nvcc, la herramienta del controlador del compilador de CUDA que se instala con el kit de herramientas de CUDA, siempre informará de la versión en tiempo de ejecución de CUDA que se creó para reconocer. No sabe nada sobre qué versión de controlador está instalada, o incluso si está instalado un controlador de GPU.

Por lo tanto, por diseño, estos dos números no coinciden necesariamente, ya que reflejan dos cosas diferentes.

Si se pregunta por qué nvcc -Vmuestra una versión de CUDA que no esperaba (por ejemplo, muestra una versión diferente a la que cree que instaló) o no muestra nada, en cuanto a la versión, puede ser porque no siguió las instrucciones obligatorias en el paso 7 (antes de CUDA 11) (o el paso 6 en la guía de instalación de CUDA 11 linux) de la guía de instalación de cuda linux

Tenga en cuenta que aunque esta pregunta tiene principalmente a linux a la vista, los mismos conceptos se aplican a las instalaciones de Windows CUDA. El controlador tiene asociada una versión de controlador CUDA (con la que se puede consultar nvidia-smi, por ejemplo). El tiempo de ejecución de CUDA también tiene una versión de tiempo de ejecución de CUDA asociada. Los dos no coincidirán necesariamente en todos los casos.

En la mayoría de los casos, si nvidia-smiinforma una versión de CUDA numéricamente igual o superior a la informada por nvcc -V, esto no es motivo de preocupación. Esa es una ruta de compatibilidad definida en CUDA (los controladores / API de controladores más nuevos admiten kits de herramientas CUDA / API de tiempo de ejecución "más antiguos"). Por ejemplo, si nvidia-smiinforma CUDA 10.2 y nvcc -VCUDA 10.1, generalmente no es motivo de preocupación. Simplemente debería funcionar, y no necesariamente significa que "realmente instaló CUDA 10.2 cuando tenía la intención de instalar CUDA 10.1"

Si el nvcccomando no informa nada en absoluto (por ejemplo Command 'nvcc' not found...), esto también puede deberse a una instalación incorrecta de CUDA, es decir, los pasos obligatorios mencionados anteriormente no se realizaron correctamente. Puede comenzar a resolver esto usando una utilidad de Linux como findo locate(use las páginas de manual para aprender cómo, por favor) para encontrar su nvccejecutable. Suponiendo que solo hay uno, la ruta se puede usar para corregir su variable de entorno PATH.

Robert Crovella
fuente
1
@Rober Crovella Gracias por la claridad. Tengo la misma situación nvidia-smi muestra CUDA versión 10.1 y nvcc muestra 9.1. Ahora, ¿está bien entrenar la red o la instalación sigue funcionando?
Dhiren Hamal
Seguí los pasos posteriores a la instalación, pero aún así, nvcc y nvidia-smi muestran una versión de cuda diferente
BeingMIAkashs
Eso es completamente posible. Si instaló el controlador más reciente (lo nvidia-smique hace que se muestre CUDA 10.2, actualmente) pero una versión anterior de CUDA (digamos, 10.1), habrá una diferencia informada por nvidia-smien comparación con nvcc. No es un problema en ese caso.
Robert Crovella
El comentario es útil, pero no explica qué sucede si nvccinforma una versión superior (digamos 10.2) que nvidia-smi(digamos 10.1). En ese caso, Cuda intenta compilarlo como 10.2 e intenta ejecutarlo en 10.1. Por lo general, esto da como resultado un error de tiempo de ejecución, "RuntimeError: CUDA error: no kernel image is available for execution on the device"por ejemplo.
TheSaurus
3

nvccestá en la carpeta bin de CUDA; como tal, compruebe si la carpeta bin de CUDA se ha agregado a su archivo $PATH.

Específicamente, asegúrese de haber realizado las acciones posteriores a la instalación de CUDA (por ejemplo, desde aquí ):

  1. Agregue el contenedor CUDA a $PATH(es decir, agregue la siguiente línea a su ~/.bashrc)
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

PD. Asegúrese de que las siguientes dos rutas anteriores existan primero: /usr/local/cuda-10.1/biny /usr/local/cuda-10.1/NsightCompute-2019.1(la ruta NsightCompute podría tener un final ligeramente diferente dependiendo de la versión de Nsight compute instalada ...

  1. Actualice $LD_LIBRARY_PATH(es decir, agregue la siguiente línea a su ~/bashrc).
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Después de esto, ambos nvccy nvidia-smi(o nvtop) informan la misma versión de CUDA ...

Ismail Moghul
fuente
Eso es porque $ PATH $ especifica el uso de CUDA 10. Pero algunos programas requieren diferentes versiones de CUDA.
Yuqli
NsightCompute-2019.1se llama NsightCompute-1.0en CUDA 10.0.
Astrid
Seguí los pasos posteriores a la instalación, pero aún así, nvcc y nvidia-smi muestran una versión de cuda diferente
BeingMIAkashs
cada vez que abro la terminal tengo que ejecutar el comando de dos rutas (desde cuda post instalación en el paso 7). ¿Hay alguna manera de que pueda conservar el estado y no tener que ejecutar los comandos de ruta repetidamente?
lunes
@monti Sí, puede escribir el comando .bashrco bash_profilepara que se cargue automáticamente para cada sesión de bash. Vea aquí: stackoverflow.com/questions/14637979/…
Yuqli
-1

Si está utilizando cuda 10.2:

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

podría ayudar porque cuando verifiqué, no había un directorio para nsight-compute en cuda-10.2. No estoy seguro de si este fue solo mi problema o por qué no lo mencionarían en la documentación oficial.

Soleado
fuente