Interrogez-nous, nous vous répondrons !

Comment corriger les erreurs d'absence de plate-forme OpenCL

Ce guide explique ce qu'il faut faire lorsqu'une application OpenCL ne fonctionne pas. Le plus souvent, cela se produit parce que l'application ne parvient pas à trouver un périphérique de calcul disponible, généralement le GPU.

Vérifier les pilotes de GPU

Supposons que nous ayons un serveur fonctionnant sous Ubuntu 22.04 avec un GPU NVIDIA® qui prend en charge OpenCL. La première étape consiste à vérifier que le pilote du GPU est correctement installé. La méthode la plus simple consiste à utiliser l'utilitaire de surveillance :

nvidia-smi

Si vous rencontrez une erreur, installez d'abord le pilote GPU. Vous pouvez le faire en suivant les instructions Installer les pilotes NVIDIA® sous Linux. Si un tableau répertoriant toutes les cartes vidéo s'affiche, vérifiez soigneusement quelle version de pilote est installée et quelle version de NVIDIA® CUDA® est présente dans le système.

Les versions des pilotes de cartes vidéo modernes commencent généralement par 5, par exemple 535.XXX. Si vous rencontrez une version commençant par 4 (par exemple 4XX.XXX), cela indique que votre pilote doit être mis à jour. Le même principe s'applique à CUDA® : les versions actuelles commencent par 12, comme 12.6. Si vous utilisez une version plus ancienne, mettez-la à jour à l'aide du guide Installer la boîte à outils CUDA® sous Linux.

Vérifions que les variables d'environnement incluent le chemin d'accès aux fichiers exécutables du compilateur :

nvcc --version

Si tout est correct, vous recevrez le résultat de la version du compilateur disponible. Cela signifie que toute application que vous exécutez aura accès au compilateur sans avoir besoin de spécifier le chemin complet. Si le système signale que NVIDIA® CUDA® est absent du serveur, mais que l'utilitaire nvidia-smi indique une version installée, vous devez ajouter le chemin d'accès aux variables d'environnement. Cette opération peut être effectuée de deux manières : de manière temporaire ou permanente.

Pour une solution temporaire, vous n'avez besoin que de deux commandes. Voici un exemple utilisant CUDA® 12.6 installé sur le serveur :

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

Pour vérifier les changements, essayez d'afficher à nouveau la version du NVCC. Si les variables d'environnement ont été définies correctement, l'erreur devrait être résolue. Pour une solution permanente, ajoutez les deux variables ci-dessus au fichier /etc/environment :

sudo nano /etc/environment

Ensuite, ajoutez la variable LD_LIBRARY_PATH et complétez 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"

Sauvegardez le fichier en appuyant sur Ctrl + O, puis quittez l'éditeur avec Ctrl + X. Après le redémarrage, la commande d'appel NVCC fonctionnera correctement.

Vérifier la disponibilité d'OpenCL

Jetons un coup d'œil à OpenCL, un cadre permettant de développer des applications optimisées pour le calcul parallèle. Les pilotes de GPU prennent en charge ce cadre et les performances de l'application en dépendent.

Pour vérifier si un serveur est prêt à travailler avec OpenCL, vous pouvez installer un petit utilitaire de diagnostic appelé clinfo :

sudo apt -y install clinfo

Exécutez-le et examinez le bref résultat. Nous nous concentrerons sur deux aspects clés : le nombre de plateformes et le nombre de périphériques disponibles :

clinfo | grep Number

Lorsque le système est prêt à fonctionner avec OpenCL, la sortie se présente comme suit :

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

Dans la terminologie OpenCL, le terme "plateforme" fait référence au type d'appareils informatiques disponibles. Il peut s'agir d'un CPU, d'un GPU ou même d'un FPGA. Dans notre exemple, nous avons exécuté la commande sur un serveur équipé de deux cartes graphiques NVIDIA® RTX™ 3090, ce qui a donné les valeurs suivantes. En fait, nous avons deux dispositifs informatiques appartenant à un seul type (GPU).

Si la colonne "Number of platforms" affiche 0, cela indique que le système d'exploitation n'est pas prêt à exécuter des applications OpenCL. Dans ce cas, vérifiez si les pilotes appropriés sont installés sur le système. Si le problème persiste, essayez de supprimer complètement les pilotes GPU, de redémarrer le serveur, puis de les réinstaller.

Vérifier les bibliothèques OpenCL

Il est également utile de vérifier la présence des bibliothèques OpenCL nécessaires :

ldconfig -p | grep -i opencl

Lorsque les bibliothèques sont installées correctement, le résultat devrait ressembler à ceci :

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 le système ne dispose pas de ces bibliothèques, vous pouvez les installer manuellement :

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

Rétrogradation

Dans Ubuntu 22.04, certains modèles de GPU peuvent être complètement inaccessibles à OpenCL, même après avoir réinstallé tous les pilotes et la boîte à outils CUDA®. La meilleure solution à ce problème est de rétrograder vers la version précédente du système d'exploitation, tout en rétrogradant les pilotes et CUDA®.

Par exemple, si vous utilisez l'accélérateur Tesla® V100 (introduit en 2017), il est conseillé de choisir Ubuntu 20.04 au lieu d'Ubuntu 22.04. Associez cela au pilote 535.183.01 et à CUDA® 12.2. Cette combinaison garantit que la plupart des applications basées sur OpenCL fonctionneront correctement.

Dans certains cas, il n'est pas nécessaire de modifier la version du système d'exploitation. En revanche, vous devrez rétrograder les versions du pilote et de CUDA®.

Voir aussi :



Mis à jour: 28.03.2025

Publié: 23.09.2024


Des questions ? Écrivez-nous!

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