
Ich habe ein Problem bei der Installation von CUDA 10.2 und den Cublas-Bibliotheken.
Die Cuda-Dateien befinden sich in /usr/local und die Cublas-Dateien in der Datei /usr/include.
Nun habe ich ein Programm, wo ich für die Cuda-Installationen einen HOME_PATH eintragen muss, wo diese zu finden sind.
Ich habe versucht, einen symbolischen Link zu den Cublas-Dateien mit /usr/local herzustellen, aber das Programm kann die benötigten Dateien nicht finden.
Gibt es eine Möglichkeit, die Cublas-Dateien nach /usr/local zu kopieren (sie sind geschützt)? Oder den Installationspfad der Cublas-Dateien irgendwie zu ändern?
Vielen Dank im Voraus
Chris
Antwort1
Im Folgenden wird davon ausgegangen, dass Sie mit einem Ubuntu-System mit aktuellen Nvidia-Treibern beginnen.
CUDA ist nur eine Anwendung, die jedoch eine bestimmte (häufig alte) Compilerversion benötigt und ihre eigenen (mehrere Versionen veralteten) Grafiktreiber bereitstellt.
Eine CUDA-Version verfügt über eigene Verzeichnisse für:
- bin – für ausführbare Dateien
- lib64 – für Linkbibliotheken
- include -- Compilerdateien
Durch Hinzufügen des CUDA-Bin-Verzeichnisses am Anfang der Umgebungsvariable PATH können diese Programme aufgerufen werden und die Standardprogramme des Systems überschrieben werden (wie im Fall älterer Versionen von g++, gcc, ar, nm und ranlib).
Durch Hinzufügen des CUDA-lib64-Verzeichnisses am Anfang von LD_LIBRARY_PATH können diese (gemeinsam genutzten) Bibliotheken bei Standardladungen eines Programms berücksichtigt werden.
Das CUDA-Include-Verzeichnis wird normalerweise als Variable in den Makefile-Compiler-Flags hinzugefügt, sodass diese Dateien vom Compiler abgerufen werden können. Es besteht keine Notwendigkeit, diese CUDA-Dateien in die Systemverzeichnisse bin, lib und include zu verteilen. Anwendungen tun das normalerweise nicht. Wenn die CUDA-Bin-, lib64- und Include-Dateien in einem CUDA-Release-Verzeichnis aufbewahrt werden, können mehrere CUDA-Releases gleichzeitig unterstützt werden. Nehmen Sie einfach die PATH- und LD_LIBRARY_PATH-Änderungen in einem Skript vor, das jedem Release zugeordnet ist.
Die einzige Ausnahme von der Programmtrennung könnte die Installation eines vom System bereitgestellten älteren Compilers sein – gcc-8 und Tools (ar-8, nm-8, ranlib-) werden von CUDA 10.2 benötigt. Greifen Sie über Links (gcc, ar, nm, ranlib), die dem CUDA-Bin-Verzeichnis hinzugefügt werden, auf den alten Compiler zu. Vermeiden Sie es, die Systemvorgabe auf den alten Compiler zu ändern (z. B. über Links oder Update-Alternativen).
Andere Teile des Systems können kaputtgehen, wenn sie gezwungen werden, einen älteren Compiler zu verwenden (denken Sie an Grafiktreiber). Eine ausreichend alte CUDA-Version kann einen alten Compiler erfordern, der nicht in den Standard-Repositories enthalten ist (denken Sie an gcc-5 für CUDA 8.0). Sie müssten Ihre eigenen Kopien eines solchen Compilers und aller benötigten gemeinsam genutzten Bibliotheken bereitstellen – legen Sie diese in die Verzeichnisse bin und lib64 der CUDA-Version.
Das Einrichten einer CUDA-Version auf diese Weise ist einfach. Entpacken Sie einfach die mitgelieferte Deb-Datei an den von Ihnen gewählten Speicherort:
dpkg-deb --extract CUDAarchive YourDirectory
Früher war das alles, was nötig war, aber CUDA-Versionen wie 10.2 haben den Inhalt der bereitgestellten Deb-Datei für die Version einfach um weitere Deb-Dateien erweitert. Beachten Sie die unerwünschten Nvidia-Deb-Dateien für ältere Versionen, ignorieren oder löschen Sie sie und entpacken Sie alle einzelnen Deb-Dateien. Sie haben jetzt ein CUDA-Versionsverzeichnis. Richten Sie also ein Skript ein, um Ihren PATH und LD_LIBRARY_PATH zu ändern (oder wenn Sie sich nicht für mehrere CUDA-Versionen interessieren, fügen Sie diese Änderungen einfach in Ihr .profile ein (vorausgesetzt, Sie verwenden eine Shell vom Typ Bash).
Bei diesem Ansatz werden alle CUDA-Dateien außerhalb des Paketmanagers gehalten, sodass keine Aktualisierungen vorgenommen werden – was je nach Sichtweise gut oder schlecht sein kann.
Leider treten Probleme auf, wenn Sie nur das Skript „Datei ausführen“ ausführen oder das mitgelieferte CUDA-Release-Deb installieren.
- Alte Nvidia-Treiber ersetzen Ihre aktuellen Grafiktreiber. Hoffentlich können Sie sich weiterhin anmelden.
- Die Neuinstallation der aktuellen Nvidia-Treiber kann dazu führen, dass die alten Treiber UND ALLE IHRE ABHÄNGIGKEITEN (das sind alle CUDA-Dateien) gelöscht werden. Nun, hindern Sie den Paketmanager niemals daran, seine Arbeit zu tun, aber Sie können eine Kopie Ihrer gesamten CUDA-Version erstellen, sie vom Paketmanager löschen lassen und sie wiederherstellen.
Alle diese Workarounds mit dem Paketmanager führen schließlich zu einer paketmanagerfreien CUDA-Version wie oben beschrieben.