
Ich habe versucht, PyOpenCL und PyCUDA auf einer Linux Mint-Maschine zum Laufen zu bringen. Ich habe alles installiert, aber die Demoskripte schlagen mit folgendem Fehler fehl:
pyopencl.cffi_cl.LogicError: clgetplatformids failed: PLATFORM_NOT_FOUND_KHR
Aufbau
$ 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)
Relevante installierte Pakete:
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
Forschung
Da ich hier nicht alle entsprechenden Links posten kann,Links zu meinen früheren Versuchen, dieses Problem zu lösen, finden Sie im zugehörigen Stack-Overflow-Beitrag.
In einem Beitrag wurde ein Szenario beschrieben, in dem die im Paketmanager installierte OpenCL/CUDA-Implementierung einige Symlinks nicht richtig einrichtete. Dieses Problem scheint auf meinem System nicht aufzutreten.
Es gab eine Versionsnummerninkongruenz zwischen den Grafiktreibern (waren nvidia-340) und dem nvidia-opencl-Paket (352). Ich aktualisiere die Grafiktreiber, nvidia-352-updates-dev
aber das Problem besteht weiterhin.
Es gibt einen Fehler in Arch Linux, der anscheinend damit zusammenhängt, dass die erforderlichen Gerätedateien nicht erstellt werden. Ich habe jedoch überprüft, dass die /dev/nvidia0
und /dev/nvidiactl
vorhanden sind und über Berechtigungen verfügen 666
, sodass sie zugänglich sein sollten.
Ein anderer Stackoverflow-Beitrag schlägt vor, die Demos als Root auszuführen. Ich habe das versucht und das Verhalten ändert sich nicht.
Ältere Installationsanweisungen für cuda/opencl sagen, dass man Treiber direkt von der NVidia-Website herunterladen soll. Bitte sehen Sie sich am Ende des Beitrags ein Update zum Ergebnis an (es war katastrophal).
Derselbe Fehler wurde für ATI-Karten auf einem anderen Linux-System gemeldet und konnte durch Einfügen der richtigen Dateien in behoben werden /usr/lib/OpenCL/vendors
. Dieser Pfad wird auf meinem System nicht verwendet. Ich habe jedoch , /etc/OpenCL/vendors/nvidia.icd
das die Zeile enthält libnvidia-opencl.so.1
, was darauf hindeutet, dass mein Problem anders ist.
Dieser Fehler wurde unter OSX beobachtet, allerdings aus anderen Gründen. Ähnliche Fehlermeldungen für PyCUDA unter OSX scheinen ebenfalls nicht damit in Zusammenhang zu stehen.
Dieser Fehler kann beim Fernzugriff auftreten, da die Gerätedateien nicht initialisiert werden, wenn X nicht geladen ist. Ich teste dies jedoch in einer Desktop-Umgebung. Außerdem habe ich zur Sicherheit die in diesem Thread vorgeschlagenen manuellen Befehle ausgeführt, und sie sind überflüssig, da die entsprechenden /dev
Einträge bereits vorhanden sind.
Manche Leute schlagen vor, die Beispiele ein paarmal auszuführen oder sie als sudo auszuführen, um die Dinge in Gang zu bringen. Das scheint nicht zu helfen.
In einem Beitrag wurde beschrieben, wie der ähnliche cuInit failed: no device
CUDA-Fehler dadurch verursacht wurde, dass der Benutzer nicht in der video
Gruppe war. Zur Überprüfung habe ich ausgeführt usermod -a -G video $USER
, aber das hat mein Problem nicht gelöst.
In der Vergangenheit haben routinemäßige Updates die CUDA-Unterstützung unterbrochen. Ich habe mir nicht die Zeit genommen, jede Permutation der Paketversionsnummern zu untersuchen, und es ist möglich, dass ein Downgrade einiger Pakete die Situation ändern könnte. Ohne weitere Intuition über die Ursache des Problems werde ich jedoch keine Zeit darauf verwenden, da ich nicht weiß, ob es funktionieren wird.
Das häufigste Google-Suchergebnis für diesen Fehler, das viermal von verschiedenen Websites auf den ersten Seiten der Suchergebnisse auftaucht, ist ein kurzer und ungelöster E-Mail-Thread auf der PyOpenCL-Liste. Es wird empfohlen, die Berechtigungsbits für /dev/nvidia0
und zu überprüfen /dev/nvidiactl
. Auf meinem Rechner user/group/other
haben alle Lese- und Schreibzugriff auf diese Geräte, daher glaube ich nicht, dass das die Ursache des Problems ist.
Ich habe auch versucht, PyOpenCL aus der neuesten Quelle zu erstellen und zu installieren, anstatt die Version in den Repositorys zu verwenden. Dies schlägt in einer früheren Phase fehl, was für mich darauf hindeutet, dass es nicht richtig erstellt wird.
Zusammenfassung
Das Problem scheint zu sein, dass PyCUDA/PyOpenCL die Grafikkarte nicht finden kann. Es gibt mehrere bekannte Probleme, die dies verursachen können, aber keines davon scheint hier zuzutreffen. Mir fehlt etwas und ich bin nicht sicher, was ich sonst tun soll.
Weitere Updates
Ich habe versucht, es über das cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
direkt von NVidia heruntergeladene deb neu zu installieren, aber es scheint nicht zu funktionieren – ich konnte nicht einmal den Befehl deviceQuery finden. Ich habe versucht, es über das runfile neu zu installieren cuda_7.5.18_linux.run
. Das Installationsprogramm stellte fest, dass die Konfiguration meines Computers nicht unterstützt wurde. Ich habe es trotzdem als letzten Versuch fortgesetzt. Tatsächlich ist die X-Konfiguration jetzt völlig kaputt und der Computer kann nicht bis zum Anmeldebildschirm booten. Ich konnte das nicht reparieren.