La versión del controlador Nvidia NVML/biblioteca no coincide [cerrado]
Cuando ejecuto nvidia-smi
, aparece el siguiente mensaje:
No se pudo inicializar NVML: la versión del controlador/biblioteca no coincide
Hace una hora recibí el mismo mensaje y desinstalé mi biblioteca CUDA y pude ejecutarla nvidia-smi
, obteniendo el siguiente resultado:
Después de esto descargué cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
de la página oficial de NVIDIA y luego simplemente:
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
Ahora tengo CUDA instalado, pero aparece el error de discrepancia mencionado.
Alguna información potencialmente útil:
Corriendo cat /proc/driver/nvidia/version
obtengo:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 378.13 Tue Feb 7 20:10:06 PST 2017
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
Estoy ejecutando Ubuntu 16.04.2 LTS (Xenial Xerus).
La versión del kernel es 4.4.0-66-genérica.
Sorpresa sorpresa, reiniciar resolvió el problema (pensé que ya lo había probado).
La solución que Robert Crovella mencionó en los comentarios también puede ser útil para otra persona, ya que es bastante similar a lo que hice para resolver el problema la primera vez que la tuve.
Como dijo etal , reiniciar puede resolver este problema, pero creo que un procedimiento sin reiniciar ayudará.
Para chino, consulte mi blog ->中文版
El mensaje de error
NVML: la versión del controlador/biblioteca no coincide
Díganos que el módulo del núcleo del controlador Nvidia (kmod) tiene una versión incorrecta, por lo que debemos descargar este controlador y luego cargar la versión correcta de kmod.
¿Cómo podemos hacer eso?
Primero, debemos saber qué controladores están cargados.
lsmod | grep nvidia
usted puede conseguir
nvidia_uvm 634880 8
nvidia_drm 53248 0
nvidia_modeset 790528 1 nvidia_drm
nvidia 12312576 86 nvidia_modeset,nvidia_uvm
Nuestro objetivo final es descargar nvidia
el mod, por lo que debemos descargar el módulo dependiendo de nvidia
:
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
Luego, descarganvidia
sudo rmmod nvidia
Solución de problemas
Si recibe un error como rmmod: ERROR: Module nvidia is in use
, que indica que el módulo del kernel está en uso, debe finalizar el proceso que usa kmod:
sudo lsof /dev/nvidia*
y luego finalice esos procesos, luego continúe descargando los kmods.
Prueba
Confirma que descargaste exitosamente esos kmods
lsmod | grep nvidia
No deberías conseguir nada. Luego confirme que puede cargar el controlador correcto:
nvidia-smi
Debería obtener el resultado correcto.
¿Por qué ocurre la discrepancia en la versión y cómo podemos evitar que vuelva a suceder?
Es posible que descubra que versions
son diferentes en estas ubicaciones:
dpkg -l | grep nvidia
(mira lanvidia-utils-xxx
versión del paquete). Esta versión se informaNVML
y se muestra ejecutandonvidia-smi
.cat /proc/driver/nvidia/version
(Mire la versión del módulo Kernel,535.146
por ejemplo). Esta versión se lee directamente desde elproc
sistema de archivos, poblado por el controlador NVIDIA.
El reinicio debería funcionar, pero es posible que desee prohibir la actualización automática de este paquete modificando /etc/apt/sources.list.d/
archivos. En mi experiencia, la mejor manera es simplemente retener los paquetes para evitar que se actualicen automáticamente ejecutando los siguientes comandos
sudo apt-mark hold nvidia-dkms-version_number
sudo apt-mark hold nvidia-driver-version_number
sudo apt-mark hold nvidia-utils-version_number
El version_number
aquí, por ejemplo, es 535
. Reemplácelo con la versión que desee.
PD: parte del contenido se inspiró en esto (las instrucciones originales estaban en chino, por lo que hice referencia a la versión traducida)
Estaba teniendo este problema y ninguno de los otros remedios funcionó. El mensaje de error era opaco, pero la clave era verificar la salida de dmesg :
[ 10.118255] NVRM: API mismatch: the client has the version 410.79, but
NVRM: this kernel module has the version 384.130. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.
Sin embargo, eliminé por completo la versión 384 y eliminé los controladores del kernel restantes nvidia-384*
. Pero incluso después de reiniciar, seguía recibiendo esto. Ver esto significaba que el kernel todavía estaba compilado con la referencia 384, pero solo encontraba 410. Así que volví a compilar mi kernel:
uname -a # Find the kernel it's using
Linux blah 4.13.0-43-generic #48~16.04.1-Ubuntu SMP Thu May 17 12:56:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
update-initramfs -c -k 4.13.0-43-generic # Recompile it
reboot
Y luego funcionó.
Después de eliminar 384, todavía tenía 384 archivos en: /var/lib/dkms/nvidia-XXX/XXX.YY/4.13.0-43-generic/x86_64/module /lib/modules/4.13.0-43-generic/ núcleo/controladores
Recomiendo usar el locate
comando (no instalado de forma predeterminada) en lugar de buscar en el sistema de archivos cada vez.
Las 2 respuestas principales no pueden resolver mi problema. Encontré una solución en el foro oficial de Nvidia que resolvió mi problema.
La siguiente información de error puede deberse a la instalación de dos versiones diferentes del controlador mediante enfoques diferentes. Por ejemplo, instale el controlador Nvidia de APT y el instalador oficial.
No se pudo inicializar NVML: la versión del controlador/biblioteca no coincide
Para solucionar este problema, sólo es necesario ejecutar uno de los siguientes dos comandos.
sudo apt-get --purge remove "*nvidia*"
sudo /usr/bin/nvidia-uninstall