
He estado intentando ejecutar PyOpenCL y PyCUDA en una máquina Linux Mint. Tengo cosas instaladas pero los scripts de demostración fallan con el error:
pyopencl.cffi_cl.LogicError: clgetplatformids failed: PLATFORM_NOT_FOUND_KHR
Configuración
$ uname -a && cat /etc/lsb-release && lspci | grep NV
Linux 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
DISTRIB_DESCRIPTION="Linux Mint 17.3 Rosa"
01:00.0 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 730] (rev a1)
Paquetes instalados relevantes:
libcuda1-352-updates
libcudart5.5:amd64
nvidia-352-updates
nvidia-352-updates-dev
nvidia-cuda-dev
nvidia-cuda-toolkit
nvidia-opencl-icd-352-updates
nvidia-profiler
nvidia-settings
ocl-icd-libopencl1:amd64
ocl-icd-opencl-dev:amd64
opencl-headers
python-pycuda
python-pyopencl
python3-pycuda
python3-pyopencl
Investigación
Debido a que no puedo publicar todos los enlaces apropiados aquí,consulte la publicación de desbordamiento de pila asociada para ver enlaces que reflejan mis intentos anteriores de resolver este problema.
Una publicación describió un escenario en el que la implementación opencl/cuda instalada del administrador de paquetes no configura algunos enlaces simbólicos correctamente. Ese problema no parece estar presente en mi sistema.
Hubo una discrepancia en el número de versión entre los controladores de gráficos (eran nvidia-340) y el paquete nvidia-opencl (352). Actualizo los controladores de gráficos nvidia-352-updates-dev
pero el problema persiste.
Hay un error en Arch Linux que parece girar en torno a que no se crean los archivos necesarios del dispositivo. Sin embargo, he verificado que /dev/nvidia0
existen /dev/nvidiactl
y tienen permisos 666
, por lo que deberían ser accesibles.
Otra publicación de Stackoverflow sugiere ejecutar las demostraciones como root. He probado esto y el comportamiento no cambia.
Las instrucciones de instalación anteriores para cuda/opencl dicen descargar los controladores directamente desde el sitio web de NVidia. Consulte una actualización sobre el resultado de esto al final de la publicación (fue catastrófico)
Se informó el mismo error para tarjetas ATI en un sistema Linux diferente y se resolvió colocando los archivos adecuados en formato /usr/lib/OpenCL/vendors
. Esa ruta no se usa en mi sistema. Sin embargo, tengo una /etc/OpenCL/vendors/nvidia.icd
que contiene la línea libnvidia-opencl.so.1
, lo que sugiere que mi problema es diferente.
Este error se ha observado en OSX, pero por motivos no relacionados. Mensajes de error similares para PyCUDA en OSX tampoco parecen estar relacionados.
Este error puede ocurrir bajo acceso remoto ya que los archivos del dispositivo no se inicializan si X no está cargado. Sin embargo, estoy probando esto en un entorno de escritorio. Además, ejecuté los comandos manuales sugeridos en ese hilo solo para estar seguro, y son redundantes ya que las /dev
entradas relevantes ya existen.
Algunas personas sugieren ejecutar los ejemplos varias veces, o ejecutarlos como sudo, para comenzar. Esto no parece ayudar.
Una publicación describió cómo cuInit failed: no device
se produjo un error CUDA similar al no tener al usuario en el video
grupo. Para comprobarlo, ejecuté usermod -a -G video $USER
, pero no resolvió mi problema.
En el pasado, las actualizaciones de rutina interrumpieron la compatibilidad con CUDA. No me he tomado el tiempo para explorar cada permutación de los números de versión de los paquetes y es posible que degradar algunos paquetes cambie la situación. Sin embargo, sin más intuición sobre el origen del problema, no voy a invertir tiempo en hacerlo porque no sé si funcionará.
El resultado de búsqueda de Google más común para este error, que aparece cuatro veces en diferentes sitios en las primeras páginas de resultados de búsqueda, es un hilo de correo electrónico corto y sin resolver en la lista PyOpenCL. Se sugiere verificar los bits de permisos para /dev/nvidia0
y . /dev/nvidiactl
En mi máquina, user/group/other
todos tienen acceso de lectura y escritura a estos dispositivos, por lo que no creo que esa sea la fuente del problema.
También intenté compilar e instalar PyOpenCL desde la fuente más reciente, en lugar de usar la versión en los repositorios. Esto falla en una fase anterior, lo que me sugiere que no se está construyendo correctamente.
Resumen
El problema parece ser que PyCUDA/PyOpenCL no puede localizar la tarjeta gráfica. Hay varios problemas conocidos que pueden causar esto, pero ninguno de ellos parece aplicarse aquí. Me falta algo y no estoy seguro de qué más hacer.
Más actualizaciones
Intenté reinstalar desde deb cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
, lo descargué directamente desde NVidia, pero parece que no se instala; ni siquiera he podido encontrar el comando deviceQuery. Intenté reinstalar desde el archivo de ejecución cuda_7.5.18_linux.run
. El instalador notó que la configuración de mi máquina no era compatible. Procedí de todos modos como un último esfuerzo. De hecho, ahora la configuración X está completamente rota y la máquina no puede iniciarse en la pantalla de inicio de sesión. No he podido reparar esto.