So beheben Sie OpenCL-Fehler (keine Plattform)
Diese Anleitung erklärt, was zu tun ist, wenn eine OpenCL-Anwendung nicht funktioniert. In den meisten Fällen liegt dies daran, dass die Anwendung kein verfügbares Rechengerät, in der Regel die GPU, finden kann.
GPU-Treiber überprüfen
Angenommen, wir haben einen Server mit Ubuntu 22.04 und einer Nvidia-GPU, die OpenCL unterstützt. Unser erster Schritt besteht darin, zu überprüfen, ob der GPU-Treiber korrekt installiert ist. Die einfachste Methode, dies zu überprüfen, ist die Verwendung des Überwachungsprogramms:
nvidia-smi
Wenn Sie einen Fehler feststellen, installieren Sie zunächst den GPU-Treiber. Folgen Sie dazu den Anweisungen unter Installieren Sie Nvidia-Treiber unter Linux. Wenn Sie eine Tabelle sehen, die alle Grafikkarten auflistet, prüfen Sie sorgfältig, welche Treiberversion installiert ist und welche Version von NVIDIA® CUDA® im System vorhanden ist.
Moderne Grafikkartentreiberversionen beginnen in der Regel mit 5, z. B. 535.XXX. Wenn Sie eine Version finden, die mit 4 beginnt (z. B. 4XX.XXX), bedeutet dies, dass Ihr Treiber aktualisiert werden muss. Das gleiche Prinzip gilt für CUDA® - aktuelle Versionen beginnen mit 12, z. B. 12.6. Wenn Sie eine ältere Version verwenden, aktualisieren Sie auf die neueste Version, indem Sie die Anleitung Installieren Sie das CUDA-Toolkit unter Linux verwenden.
Überprüfen wir, ob die Umgebungsvariablen den Pfad zu den ausführbaren Dateien des Compilers enthalten:
nvcc --version
Wenn alles in Ordnung ist, erhalten Sie die Ausgabe der verfügbaren Compiler-Version. Das bedeutet, dass jede Anwendung, die Sie ausführen, Zugriff auf den Compiler hat, ohne dass Sie den vollständigen Pfad angeben müssen. Wenn das System meldet, dass NVIDIA® CUDA® auf dem Server nicht vorhanden ist, das Dienstprogramm nvidia-smi aber eine installierte Version anzeigt, müssen Sie den Pfad zu den Umgebungsvariablen hinzufügen. Dies kann auf zwei Arten geschehen: vorübergehend oder dauerhaft.
Für eine temporäre Lösung benötigen Sie nur zwei Befehle. Hier ist ein Beispiel mit CUDA® 12.6, das auf dem Server installiert ist:
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}}
Um die Änderungen zu überprüfen, versuchen Sie erneut, die NVCC-Version anzuzeigen. Wenn die Umgebungsvariablen korrekt gesetzt wurden, sollte der Fehler behoben sein. Um eine dauerhafte Lösung zu finden, fügen Sie die beiden oben genannten Variablen zur Datei /etc/environment hinzu:
sudo nano /etc/environment
Fügen Sie als nächstes die Variable LD_LIBRARY_PATH hinzu und vervollständigen Sie die 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"
Speichern Sie die Datei mit Ctrl + O und verlassen Sie den Editor mit Ctrl + X. Nach dem Neustart funktioniert der NVCC-Aufrufbefehl ordnungsgemäß.
OpenCL-Verfügbarkeit prüfen
Werfen wir einen Blick auf OpenCL, ein Framework für die Entwicklung von Anwendungen, die für parallele Berechnungen optimiert sind. GPU-Treiber implementieren Unterstützung für dieses Framework, und die Leistung der Anwendung hängt von ihnen ab.
Um zu überprüfen, ob ein Server für die Arbeit mit OpenCL bereit ist, können Sie ein kleines Diagnoseprogramm namens clinfo installieren:
sudo apt -y install clinfo
Führen Sie es aus und sehen Sie sich die kurze Ausgabe an. Wir werden uns auf zwei wichtige Aspekte konzentrieren: die Anzahl der Plattformen und die Anzahl der verfügbaren Geräte:
clinfo | grep Number
Wenn das System für die Arbeit mit OpenCL bereit ist, sieht die Ausgabe wie folgt aus:
Number of platforms 1 Number of devices 2 Number of async copy engines 2 Number of async copy engines 2
In der OpenCL-Terminologie bezieht sich der Begriff "Plattform" auf die Art der verfügbaren Rechengeräte. Dies kann eine CPU, GPU oder sogar ein FPGA sein. In unserem Beispiel haben wir den Befehl auf einem Server mit zwei NVIDIA® RTX™ 3090-Grafikkarten ausgeführt, was diese Werte ergab. Im Wesentlichen haben wir zwei Rechengeräte, die zu einem Typ (GPU) gehören.
Wenn in der Spalte "Anzahl der Plattformen" 0 angezeigt wird, bedeutet dies, dass das Betriebssystem nicht bereit ist, OpenCL-Anwendungen auszuführen. Prüfen Sie in diesem Fall, ob die entsprechenden Treiber auf dem System installiert sind. Wenn die Probleme weiterhin bestehen, versuchen Sie, die GPU-Treiber vollständig zu entfernen, den Server neu zu starten und sie dann erneut zu installieren.
OpenCL-Bibliotheken überprüfen
Es ist auch sinnvoll, das Vorhandensein der erforderlichen OpenCL-Bibliotheken zu überprüfen:
ldconfig -p | grep -i opencl
Wenn die Bibliotheken korrekt installiert sind, sollte die Ausgabe in etwa so aussehen:
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
Wenn das System diese Bibliotheken nicht enthält, können Sie sie manuell installieren:
sudo apt install ocl-icd-opencl-dev && sudo apt install opencl-headers
Downgrade
Unter Ubuntu 22.04 kann es bei einigen GPU-Modellen vorkommen, dass OpenCL selbst nach einer Neuinstallation aller Treiber und des CUDA-Toolkits nicht mehr verfügbar ist. Die beste Lösung für dieses Problem ist ein Downgrade auf die vorherige Version des Betriebssystems, zusammen mit einem Downgrade der Treiber und CUDA®.
Wenn Sie zum Beispiel den Tesla® V100-Beschleuniger (eingeführt 2017) verwenden, ist es ratsam, Ubuntu 20.04 statt Ubuntu 22.04 zu wählen. Kombinieren Sie dies mit dem Treiber 535.183.01 und CUDA® 12.2. Diese Kombination gewährleistet, dass die meisten OpenCL-basierten Anwendungen korrekt funktionieren.
In einigen Fällen müssen Sie die Version des Betriebssystems nicht ändern. Allerdings müssen Sie stattdessen die Versionen des Treibers und von CUDA® herabsetzen.
Siehe auch:
Aktualisiert: 28.03.2025
Veröffentlicht: 23.09.2024