U vraagt, wij geven antwoord!

Hoe OpenCL no platform fouten op te lossen

Deze handleiding legt uit wat je moet doen als een OpenCL toepassing niet werkt. Meestal gebeurt dit omdat de toepassing geen beschikbaar rekenapparaat kan vinden, meestal de GPU.

GPU-stuurprogramma's controleren

Stel we hebben een server met Ubuntu 22.04 met een NVIDIA® GPU die OpenCL ondersteunt. Onze eerste stap is om te controleren of de GPU driver correct is geïnstalleerd. De eenvoudigste methode om dit te controleren is door gebruik te maken van het monitoring hulpprogramma:

nvidia-smi

Als je een foutmelding krijgt, installeer dan eerst het GPU-stuurprogramma. Je kunt dit doen door de instructies Installeer Nvidia-stuurprogramma's in Linux te volgen. Als je een tabel ziet met alle videokaarten, controleer dan zorgvuldig welke driverversie is geïnstalleerd en welke versie van NVIDIA® CUDA® aanwezig is in het systeem.

Moderne videokaartstuurprogrammaversies beginnen meestal met 5, zoals 535.XXX. Als je een versie tegenkomt die begint met 4 (bijvoorbeeld 4XX.XXX), geeft dit aan dat je stuurprogramma moet worden bijgewerkt. Hetzelfde principe geldt voor CUDA® - de huidige versies beginnen met 12, zoals 12.6. Als je een oudere versie gebruikt, werk dan bij naar de nieuwste versie met behulp van de Installeer CUDA-toolkit onder Linux gids.

Laten we controleren of de omgevingsvariabelen het pad naar de uitvoerbare bestanden van de compiler bevatten:

nvcc --version

Als alles in orde is, krijg je de uitvoer van de beschikbare compilerversie. Dit betekent dat elke toepassing die je uitvoert toegang heeft tot de compiler zonder dat je het volledige pad hoeft op te geven. Als het systeem meldt dat NVIDIA® CUDA® niet aanwezig is op de server, maar het hulpprogramma nvidia-smi toont een geïnstalleerde versie, dan moet je het pad toevoegen aan de omgevingsvariabelen. Dit kan op twee manieren: tijdelijk of permanent.

Voor een tijdelijke oplossing heb je maar twee commando's nodig. Hier is een voorbeeld waarbij CUDA® 12.6 op de server is geïnstalleerd:

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

Probeer de NVCC-versie opnieuw weer te geven om de wijzigingen te controleren. Als de omgevingsvariabelen correct zijn ingesteld, zou de fout opgelost moeten zijn. Voor een permanente oplossing voegt u beide bovenstaande variabelen toe aan het bestand /etc/environment:

sudo nano /etc/environment

Voeg vervolgens de variabele LD_LIBRARY_PATH toe en vul de variabele PATH aan:

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"

Sla het bestand op door op Ctrl + O te drukken en sluit de editor af met Ctrl + X. Na het herstarten zal het NVCC-aanroepcommando goed werken.

OpenCL beschikbaarheid controleren

Laten we eens kijken naar OpenCL, een framework voor het ontwikkelen van toepassingen die geoptimaliseerd zijn voor parallel computing. GPU-stuurprogramma's implementeren ondersteuning voor dit framework en de prestaties van de toepassing zijn ervan afhankelijk.

Om te controleren of een server klaar is om met OpenCL te werken, kun je een klein diagnostisch hulpprogramma genaamd clinfo installeren:

sudo apt -y install clinfo

Voer het uit en bekijk de korte uitvoer. We zullen ons richten op twee belangrijke aspecten: het aantal platformen en het aantal beschikbare apparaten:

clinfo | grep Number

Wanneer het systeem klaar is om met OpenCL te werken, ziet de uitvoer er als volgt uit:

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

In OpenCL terminologie verwijst "platform" naar het type beschikbare rekenapparaten. Dit kan een CPU, GPU of zelfs een FPGA zijn. In ons voorbeeld hebben we het commando uitgevoerd op een server met twee NVIDIA® RTX™ 3090 grafische kaarten, wat deze waarden opleverde. In wezen hebben we twee rekenapparaten van één type (GPU).

Als de kolom "Aantal platformen" 0 aangeeft, geeft dit aan dat het besturingssysteem niet klaar is om OpenCL-toepassingen uit te voeren. Controleer in dat geval of de juiste stuurprogramma's zijn geïnstalleerd op het systeem. Als de problemen aanhouden, probeer dan de GPU-stuurprogramma's volledig te verwijderen, de server opnieuw op te starten en ze vervolgens opnieuw te installeren.

OpenCL-bibliotheken controleren

Het is ook zinvol om te controleren of de benodigde OpenCL-bibliotheken aanwezig zijn:

ldconfig -p | grep -i opencl

Als de bibliotheken correct zijn geïnstalleerd, zou de uitvoer er ongeveer zo uit moeten zien:

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

Als deze bibliotheken op het systeem ontbreken, kun je ze handmatig installeren:

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

Downgrade

In Ubuntu 22.04 kunnen sommige GPU-modellen volledige OpenCL ontoegankelijkheid ervaren, zelfs na het opnieuw installeren van alle stuurprogramma's en de CUDA® toolkit. De beste oplossing voor dit probleem is om te downgraden naar de vorige versie van het besturingssysteem, samen met het downgraden van de stuurprogramma's en CUDA®.

Als je bijvoorbeeld de Tesla® V100 versneller gebruikt (geïntroduceerd in 2017), is het aan te raden om Ubuntu 20.04 te kiezen in plaats van Ubuntu 22.04. Combineer dit met het stuurprogramma 535.183.01 en CUDA® 12.2. Deze combinatie zorgt ervoor dat de meeste OpenCL-gebaseerde toepassingen correct zullen werken.

In sommige gevallen hoef je de versie van het besturingssysteem niet te veranderen. In plaats daarvan moet je echter de versies van het stuurprogramma en CUDA® downgraden.

Zie ook:



Bijgewerkt: 28.03.2025

Gepubliceerd: 23.09.2024


Hebt u nog vragen? Schrijf ons!

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