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 nvcc
sugiere, o estoy usando cuda10 como se nvidia-smi
sugiere?
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.
Respuestas:
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-smi
herramienta 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 -V
muestra 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 linuxTenga 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-smi
informa una versión de CUDA numéricamente igual o superior a la informada pornvcc -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, sinvidia-smi
informa CUDA 10.2 ynvcc -V
CUDA 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
nvcc
comando no informa nada en absoluto (por ejemploCommand '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 comofind
olocate
(use las páginas de manual para aprender cómo, por favor) para encontrar sunvcc
ejecutable. Suponiendo que solo hay uno, la ruta se puede usar para corregir su variable de entorno PATH.fuente
nvidia-smi
que hace que se muestre CUDA 10.2, actualmente) pero una versión anterior de CUDA (digamos, 10.1), habrá una diferencia informada pornvidia-smi
en comparación connvcc
. No es un problema en ese caso.nvcc
informa una versión superior (digamos 10.2) quenvidia-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.nvcc
está 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í ):
$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}}
$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
nvcc
ynvidia-smi
(onvtop
) informan la misma versión de CUDA ...fuente
NsightCompute-2019.1
se llamaNsightCompute-1.0
en CUDA 10.0..bashrc
obash_profile
para que se cargue automáticamente para cada sesión de bash. Vea aquí: stackoverflow.com/questions/14637979/…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.
fuente