Hier sind die Schritte zum Installieren von PyCUDA auf Ihrem Mac. Diejenigen, die unter die folgenden fallen, können gezielt werden. --Verwenden Sie Python 3.x.
Die technischen Daten des verwendeten Mac lauten wie folgt.
Xcode7 Installation Zum Zeitpunkt des Schreibens war Xcode 7.3.1 das neueste in Xcode 7. Wählen Sie unter Downloads für Apple Developer die Option ** Weitere Downloads anzeigen ** aus und geben Sie "Xcode 7" in das Suchfeld ein. Laden Sie ** Xcode 7.3.1 ** und ** Befehlszeilentools für Xcode 7.3.1 ** herunter.
Öffnen Sie die heruntergeladene dmg-Datei und installieren Sie Xcode 7.3.1. Installieren Sie dann auch die Befehlszeilentools für Xcode 7.3.1.
Öffnen Sie dann dmg von Command Line Tools und installieren Sie es.
Wenn Sie Xcode8 bereits installiert haben, kopieren Sie Xcode7 als Xcode7.app nach / Applications. So aktivieren Sie Xcode 7
$ sudo mv /Applications/Xcode.app /Applications/Xcode8.app
$ sudo mv /Applications/Xcode7.app /Applications/Xcode.app
$ sudo xcode-select -s /Applications/Xcode.app
Umgekehrt, um Xcode 8 zu aktivieren
$ sudo mv /Applications/Xcode.app /Applications/Xcode7.app
$ sudo mv /Applications/Xcode8.app /Applications/Xcode.app
$ sudo xcode-select -s /Applications/Xcode.app
*** Aktivieren Sie Xcode7, um CUDA / PyCUDA zu verwenden. CUDA8 unterstützt Xcode8 nicht. *** ***
CUDA8 Installation CUDA ist eine integrierte Entwicklungsumgebung für GPGPU-Bibliotheken, Kompilierungen usw., die von NVIDIA bereitgestellt wird. Kurz gesagt, es handelt sich um eine Gruppe von Tools für die parallele Berechnung mit der von NVIDIA erstellten GPU. Installieren Sie CUDA8, da PyCUDA CUDA benötigt. CUDA8 Installation Wählen Sie das Betriebssystem und die Version unter CUDA Toolkit Download | NVIDIA Developer aus und laden Sie das Paket herunter. Installieren Sie das Gerät gemäß den Anweisungen des Installationsprogramms.
Wählen Sie nach der Installation ** CUDA ** aus den ** Systemeinstellungen ** von MacOS aus und klicken Sie auf ** CUDA-Update installieren **, um CUDA zu aktualisieren.
cuDNN Installation Laden Sie cudnn von NVIDIA cuDNN | NVIDIA Developer herunter. Möglicherweise müssen Sie sich als Mitglied registrieren.
Entpacken Sie das heruntergeladene cudnn-8.0-osx-x64-v6.0.tgz.
$ tar zxvf cudnn-8.0-osx-x64-v6.0.tgz
Stellen Sie die Datei auf Ihrem System bereit.
```$ sudo mv <Ordner entpacken>/lib/libcudnn* /usr/local/cuda/lib```
#### **`$ sudo mv <Ordner entpacken>/include/cudnn.h /usr/local/cuda/include`**
Setze ** DYLD_LIBRARY_PATH ** und ** PATH ** Fügen Sie es zu .bashrc hinzu.
export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:/Developer/NVIDIA/CUDA-8.0/lib:$DYLD_LIBRARY_PATH
#### **`$PATH`**
```export path=/developer/nvidia/cuda-8.0/bin
Reflektieren Sie die Änderungen.
#### **`$ source .bashrc`**
```bashrc
### CUDA-Beispielprogramm
Sie können die Installation mit dem Beispielprogramm überprüfen. Das Kompilieren dauert jedoch lange, sodass Sie es überspringen können.
#### **`$ /Developer/NVIDIA/CUDA-8.0/bin/cuda-install-samples-8.0.sh ~/Downloads`**
$ cd ~/downloads
$ make -c 1_utilities/devicequery
$ 1_utilities/devicequery/devicequery
$ make -c 5_simulations/smokeparticles
$ 5_simulations/smokeparticles/smokeparticles
Wenn Sie einen Kompilierungsfehler erhalten, überprüfen Sie die Einstellungen für Xcode-Umschaltung, DYLD_LIBRARY_PATH und PATH sowie ** Systemeinstellungen ** ** Energiespareinstellungen ** (** Automatische Grafikumschaltung ** deaktiviert).
Homebrew Installation
Wenn Sie Homebrew noch nicht installiert haben
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
Wenn Sie Python3 noch nicht installiert haben
$ brew install python3
Python3-Bestätigung
$ python3 --version
pip Installation
Wenn Sie pip noch nicht installiert haben
$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.p
Numpy Installation
Wenn Sie numpy noch nicht installiert haben
$ pip3 install numpy
$ pip3 install scipy
*** Hinweis) Auch wenn Numpy unter Python 2.x installiert ist, muss es für Python 3.x installiert werden. *** ***
numpy Bestätigung
$ python3
>>> import numpy as np
PyCUDA Installation
Es ist endlich Zeit, PyCUDA zu installieren.
$ pip3 install pycuda
PyCUDA-Bestätigung
$ python3 -c "import pycuda.autoinit
Wenn kein Fehler vorliegt, ist dies vorerst in Ordnung. Wenn Sie eine Fehlermeldung erhalten, vermuten Sie den Wechsel zu den Einstellungen Xcode7, DYLD_LIBRARY_PATH und PATH, ** Systemeinstellungen ** ** Energiespareinstellungen ** (** Grafik automatisch umschalten ** aus) ..
Dann installieren Sie scicit-cuda (skcuda).
$ pip3 install scikit-cuda
import pycuda.autoinit
import pycuda.driver as cuda
from pycuda import gpuarray
from skcuda import linalg
import numpy as np
linalg.init()
a = np.random.rand(2, 1).astype(np.float32)
b = np.ones(2).astype(np.float32).reshape(1, 2)
a_gpu = gpuarray.to_gpu(a)
b_gpu = gpuarray.to_gpu(b)
c_gpu = linalg.dot(a_gpu, b_gpu)
c = c_gpu.get()
print(a)
print(b)
#Das Ergebnis der Berechnung des inneren Produkts mit der CPU
print(np.dot(a, b))
#Ergebnis der Berechnung des inneren Produkts mit GPU
print(c)
Speichern Sie das obige Skript als test_gpu.py und führen Sie es aus.
$ python3 test_gpu.py
[[ 0.85600704]
[ 0.02441464]]
[[ 1. 1.]]
[[ 0.85600704 0.85600704]
[ 0.02441464 0.02441464]]
[[ 0.85600704 0.85600704]
[ 0.02441464 0.02441464]]
Beschreibt das Testskript test_gpu.py.
Bereiten Sie sich zunächst auf die Initialisierungsverarbeitung usw. vor, um die GPU mit Python zu verwenden.
import pycuda.autoinit
...
linalg.init()
Erstellen Sie ein Numpy-ndarray einmal, bevor Sie es auf der GPU verarbeiten. Der Datentyp verwendet float32.
a = random.rand(2, 1).astype(np.float32)
b = np.ones(2).astype(np.float32).reshape(1, 2)
Konvertieren Sie dann den ndarray in einen gpuarray.
a_gpu = gpuarray.to_gpu(a)
b_gpu = gpuarray.to_gpu(b)
Dabei werden Array-Daten konvertiert und vom Speicher für die CPU in den Speicher für die GPU (CPU → GPU) übertragen.
Es handelt sich um eine GPU-interne Produktoperation, die np.dot von Numpy entspricht.
c_gpu = linalg.dot(ga, gb)
Sie müssen von gpuarray (GPU) zu ndarray (CPU) zurückkehren, um das Ergebnis zu sehen.
c = c_gpu.get()
print(c)
Diesmal ist es der Fluss von GPU → CPU.
Bei der Programmierung mit PyCUDA ist es wichtig, immer zu wissen, ob die Variable ndarray oder gpuarray ist, da sie zwischen CPU und GPU hin und her wechselt. Die Datenkonvertierung zwischen CPU / GPU hat erhebliche Auswirkungen auf die Leistung und sollte auf ein Minimum beschränkt werden.
Durch Erhöhen der GPuarray-Größe auf einem Mac mit geringem GPU-Speicher kann das System extrem träge und leicht funktionsunfähig werden. Wenn Sie ein Skript auf einem Computer mit wenig GPU-Speicher ausführen, ist es sicherer, das Fenster zu schließen und die Anwendung vollständig zu beenden. Bitte beachten Sie, dass Safari viel Speicherplatz beansprucht.
gpuarray und linalg haben die folgenden nützlichen Funktionen. X, y und z seien jedoch gpuarray. --linalg.dot (x, y): Inneres Produkt --linalg.transpose (x): Transponieren Sie die Matrix --gpuarray.max (x): Maximalwert --abs (x): Absolutwert --x.shape: Entspricht der Form von ndarray --gpuarray.if_positive (x> z, x, z): relu wenn z ** 0 ** ist --linalg.mdot (x, y): Kann durch Umformen als Außenprodukt verwendet werden
API Docs
Recommended Posts