Voici les étapes pour installer PyCUDA sur votre Mac. Ceux qui relèvent de ce qui suit peuvent être ciblés. --Utilisez Python 3.x
Les spécifications du Mac utilisé sont les suivantes.
Xcode7 Installation Au moment de la rédaction de cet article, Xcode 7.3.1 était le dernier de Xcode 7. À partir de Téléchargements pour Apple Developer , sélectionnez ** Voir plus de téléchargements ** et saisissez "Xcode 7" dans le champ de recherche. Téléchargez ** Xcode 7.3.1 ** et ** Outils de ligne de commande pour Xcode 7.3.1 **.
Ouvrez le fichier dmg téléchargé et installez Xcode 7.3.1. Ensuite, installez également les outils de ligne de commande pour Xcode 7.3.1.
Ensuite, ouvrez dmg des outils de ligne de commande et installez.
Si vous avez déjà installé Xcode8, copiez Xcode7 en tant que Xcode7.app dans / Applications. Pour activer 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
Inversement, pour activer Xcode 8
$ sudo mv /Applications/Xcode.app /Applications/Xcode7.app
$ sudo mv /Applications/Xcode8.app /Applications/Xcode.app
$ sudo xcode-select -s /Applications/Xcode.app
*** Activez Xcode 7 pour utiliser CUDA / PyCUDA. CUDA8 ne prend pas en charge Xcode8. *** ***
CUDA8 Installation CUDA est un environnement de développement intégré pour les bibliothèques GPGPU, les compilations, etc. fourni par NVIDIA. En bref, c'est un groupe d'outils de calcul parallèle utilisant le GPU fabriqué par NVIDIA. Installez CUDA8 car PyCUDA nécessite CUDA. CUDA8 Installation Sélectionnez le système d'exploitation et la version sur CUDA Toolkit Download | NVIDIA Developer et téléchargez le package. Installez comme indiqué par l'installateur.
Après l'installation, sélectionnez ** CUDA ** dans les ** Préférences système ** de MacOS et cliquez sur ** Installer la mise à jour CUDA ** pour mettre à jour CUDA.
cuDNN Installation Téléchargez cudnn depuis NVIDIA cuDNN | NVIDIA Developer . Vous devrez peut-être vous inscrire en tant que membre.
Décompressez le fichier cudnn-8.0-osx-x64-v6.0.tgz téléchargé.
$ tar zxvf cudnn-8.0-osx-x64-v6.0.tgz
Déployez le fichier sur votre système.
```$ sudo mv <Décompressez le dossier>/lib/libcudnn* /usr/local/cuda/lib```
#### **`$ sudo mv <Décompressez le dossier>/include/cudnn.h /usr/local/cuda/include`**
Définissez ** DYLD_LIBRARY_PATH ** et ** PATH ** Ajoutez-le à .bashrc.
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
Reflétez les changements.
#### **`$ source .bashrc`**
```bashrc
### Exemple de programme CUDA
Vous pouvez vérifier l'installation avec l'exemple de programme. Cependant, la compilation prend beaucoup de temps, vous pouvez donc l'ignorer.
#### **`$ /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
Si vous obtenez une erreur de compilation, vérifiez la commutation Xcode, les paramètres DYLD_LIBRARY_PATH et PATH et ** Préférences système ** ** Paramètres d'économie d'énergie ** (** Arrêt automatique des graphiques **).
Homebrew Installation
Si vous n'avez pas encore installé Homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
Si vous n'avez pas encore installé Python3
$ brew install python3
Confirmation Python3
$ python3 --version
pip Installation
Si vous n'avez pas encore installé pip
$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.p
Numpy Installation
Si vous n'avez pas encore installé numpy
$ pip3 install numpy
$ pip3 install scipy
*** Note) Même si Numpy est installé sur Python 2.x, il doit être installé pour Python 3.x. *** ***
confirmation numpy
$ python3
>>> import numpy as np
PyCUDA Installation
Il est enfin temps d'installer PyCUDA.
$ pip3 install pycuda
Confirmation PyCUDA
$ python3 -c "import pycuda.autoinit
S'il n'y a pas d'erreur, c'est OK pour le moment. Si vous obtenez une erreur, suspectez le passage aux paramètres Xcode7, DYLD_LIBRARY_PATH et PATH, ** préférences système ** ** paramètres d'économie d'énergie ** (** commutation automatique des graphiques ** désactivée) ..
Ensuite, installez 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)
#Le résultat du calcul du produit interne avec le CPU
print(np.dot(a, b))
#Résultat du calcul du produit interne avec GPU
print(c)
Enregistrez le script ci-dessus sous test_gpu.py et exécutez-le.
$ 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]]
Décrit le script de test test_gpu.py.
Tout d'abord, préparez-vous au traitement d'initialisation, etc. pour utiliser le GPU avec Python.
import pycuda.autoinit
...
linalg.init()
Créez un ndarray Numpy une fois avant de le traiter sur le GPU. Le type de données utilise float32.
a = random.rand(2, 1).astype(np.float32)
b = np.ones(2).astype(np.float32).reshape(1, 2)
Puis convertissez le ndarray en gpuarray.
a_gpu = gpuarray.to_gpu(a)
b_gpu = gpuarray.to_gpu(b)
Dans ce processus, les données du tableau sont converties et transférées de la mémoire du CPU vers la mémoire du GPU (CPU → GPU).
Il s'agit d'une opération de produit interne GPU équivalente à np.dot de Numpy.
c_gpu = linalg.dot(ga, gb)
Vous devez revenir de gpuarray (GPU) à ndarray (CPU) pour voir le résultat.
c = c_gpu.get()
print(c)
Cette fois, c'est le flux GPU → CPU.
Dans la programmation avec PyCUDA, il est important de toujours savoir si la variable est ndarray ou gpuarray car elle va et vient entre le CPU et le GPU. En outre, la conversion de données entre CPU / GPU a un impact significatif sur les performances et doit être réduite au minimum.
L'augmentation de la taille du gpuarray sur un Mac avec une mémoire GPU faible peut rendre le système extrêmement lent et facilement inopérant. Lors de l'exécution d'un script sur une machine avec une mémoire GPU faible, il est plus sûr de fermer la fenêtre et de quitter complètement l'application. Veuillez noter que Safari consomme beaucoup de mémoire.
gpuarray et linalg ont les fonctions utiles suivantes. Cependant, soit x, y et z gpuarray. --linalg.dot (x, y): produit intérieur --linalg.transpose (x): matrice de transposition --gpuarray.max (x): valeur maximale --abs (x): valeur absolue --x.shape: Identique à la forme de ndarray --gpuarray.if_positive (x> z, x, z): relu si z est ** 0 ** --linalg.mdot (x, y): peut être utilisé comme produit extérieur en remodelant
API Docs