¡Pregunte, nosotros le respondemos!

Cómo solucionar errores de OpenCL sin plataforma

Esta guía explica qué hacer cuando una aplicación OpenCL no funciona. La mayoría de las veces, esto ocurre porque la aplicación no puede encontrar un dispositivo de cálculo disponible, normalmente la GPU.

Comprobar los controladores de la GPU

Supongamos que tenemos un servidor ejecutando Ubuntu 22.04 con una GPU NVIDIA® que soporta OpenCL. Nuestro primer paso es comprobar si el controlador de la GPU está instalado correctamente. El método más sencillo para comprobarlo es utilizar la utilidad de monitorización:

nvidia-smi

Si encuentra un error, instale primero el controlador de la GPU. Puedes hacerlo siguiendo las instrucciones Instalar controladores NVIDIA® en Linux. Si ves una tabla con una lista de todas las tarjetas de vídeo, comprueba cuidadosamente qué versión del controlador está instalada y qué versión de NVIDIA® CUDA® está presente en el sistema.

Las versiones modernas de controladores de tarjetas de vídeo suelen empezar por 5, como 535.XXX. Si encuentras una versión que empieza por 4 (por ejemplo, 4XX.XXX), indica que tu controlador necesita actualizarse. El mismo principio se aplica a CUDA: las versiones actuales empiezan por 12, como 12.6. Si estás ejecutando una versión anterior, actualízala a la última utilizando la guía Instalar el kit de herramientas CUDA® en Linux.

Verifiquemos si las variables de entorno incluyen la ruta a los archivos ejecutables del compilador:

nvcc --version

Si todo es correcto, recibirás la salida de la versión disponible del compilador. Esto significa que cualquier aplicación que ejecutes tendrá acceso al compilador sin necesidad de especificar la ruta completa. Si el sistema informa de que NVIDIA® CUDA® está ausente en el servidor, pero la utilidad nvidia-smi muestra una versión instalada, es necesario añadir la ruta a las variables de entorno. Esto puede hacerse de dos maneras: temporal o permanentemente.

Para una solución temporal, sólo necesitas dos comandos. He aquí un ejemplo utilizando CUDA® 12.6 instalado en el servidor:

export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64\
    ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=/usr/local/cuda-12.6/bin${PATH:+:${PATH}}

Para verificar los cambios, intente mostrar de nuevo la versión de NVCC. Si las variables de entorno se configuraron correctamente, el error debería resolverse. Para una solución permanente, añada las dos variables anteriores al archivo /etc/environment:

sudo nano /etc/environment

A continuación, añada la variable LD_LIBRARY_PATH y complete la variable PATH:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-12.6/bin"
LD_LIBRARY_PATH="/usr/local/cuda-12.6/lib64"

Guarde el archivo pulsando Ctrl + O, luego salga del editor con Ctrl + X. Tras reiniciar, el comando de llamada NVCC funcionará correctamente.

Comprobar la disponibilidad de OpenCL

Echemos un vistazo a OpenCL, un framework para desarrollar aplicaciones optimizadas para computación paralela. Los controladores de GPU implementan soporte para este framework, y el rendimiento de la aplicación depende de ellos.

Para comprobar si un servidor está preparado para trabajar con OpenCL, puedes instalar una pequeña utilidad de diagnóstico llamada clinfo:

sudo apt -y install clinfo

Ejecútala y examina la breve salida. Nos centraremos en dos aspectos clave: el número de plataformas y el número de dispositivos disponibles:

clinfo | grep Number

Cuando el sistema esté listo para trabajar con OpenCL, el resultado será el siguiente:

Number of platforms                1
Number of devices                  2
Number of async copy engines                  2
Number of async copy engines                  2

En la terminología de OpenCL, "plataforma" se refiere al tipo de dispositivos informáticos disponibles. Puede tratarse de una CPU, una GPU o incluso una FPGA. En nuestro ejemplo, ejecutamos el comando en un servidor con dos tarjetas gráficas NVIDIA® RTX™ 3090, lo que arrojó estos valores. Esencialmente, tenemos dos dispositivos informáticos que pertenecen a un mismo tipo (GPU).

Si la columna "Número de plataformas" muestra 0, indica que el sistema operativo no está preparado para ejecutar aplicaciones OpenCL. En este caso, comprueba si los controladores adecuados están instalados en el sistema. Si el problema persiste, pruebe a eliminar por completo los controladores de la GPU, reinicie el servidor y vuelva a instalarlos.

Comprueba las bibliotecas OpenCL

También tiene sentido comprobar la presencia de las librerías OpenCL necesarias:

ldconfig -p | grep -i opencl

Cuando las librerías están instaladas correctamente, el resultado debería ser algo parecido a esto:

libnvidia-opencl.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libnvidia-opencl.so.1                                                                                                                                               
libnvidia-opencl.so.1 (libc6) => /lib/i386-linux-gnu/libnvidia-opencl.so.1                                                                                                                                                        
libOpenCL.so.1 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libOpenCL.so.1                                                                                                                                          
libOpenCL.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libOpenCL.so.1                                                                                                                                                             
libOpenCL.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libOpenCL.so                                                                                                                                              
libOpenCL.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libOpenCL.so

Si el sistema carece de estas bibliotecas, puede instalarlas manualmente:

sudo apt install ocl-icd-opencl-dev && sudo apt install opencl-headers

Downgrade

En Ubuntu 22.04, algunos modelos de GPU pueden experimentar la inaccesibilidad completa de OpenCL, incluso después de reinstalar todos los controladores y el kit de herramientas CUDA®. La mejor solución para este problema es downgradear a la versión anterior del sistema operativo, junto con downgradear los drivers y CUDA®.

Por ejemplo, si utilizas el acelerador Tesla® V100 (introducido en 2017), es aconsejable elegir Ubuntu 20.04 en lugar de Ubuntu 22.04. Combina esto con el controlador 535.183.01 y CUDA® 12.2. Esta combinación garantiza que la mayoría de las aplicaciones basadas en OpenCL funcionen correctamente.

En algunos casos, puede que no necesites cambiar la versión del sistema operativo. Sin embargo, necesitarás bajar las versiones del driver y CUDA® en su lugar.

Ver también:



Actualizado: 28.03.2025

Publicado: 23.09.2024


?Tiene más preguntas? ?Escribanos!

By clicking «I Accept» you confirm that you have read and accepted the website Terms and Conditions, Privacy Policy, and Moneyback Policy.