* [[developpement:activites:integration:|Intégration]]
====== Utilisation des librairies Cuda sur une Debian Squeeze ======
Mise à jour le 8 août 2012 : passage en pilote 295.71 suite à un avis de sécurité de Nvidia
===== Installation de Cuda 4.2 =====
Au 27 mai 2012, le pilote Cuda version 4.2 ne nécessite plus d'inscription préalable pour être téléchargé.
Le lien suivant défini les différents paquets à installer :
* le pilote : la version 295.71 pour [[http://us.download.nvidia.com/XFree86/Linux-x86_64/295.71/NVIDIA-Linux-x86_64-295.71.run|64 bits]] et [[http://us.download.nvidia.com/XFree86/Linux-x86/295.71/NVIDIA-Linux-x86-295.71.run|32 bits]]
cd /root
# Dans sa version 64 bits
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/295.71/NVIDIA-Linux-x86_64-295.71.run
# Dans sa version 32 bits
wget http://us.download.nvidia.com/XFree86/Linux-x86/295.71/NVIDIA-Linux-x86-295.71.run
* la boîte à outils : la version 4.2.9 pour [[http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_64_ubuntu10.04.run|64 bits]] et [[http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_32_ubuntu10.04.run|32 bits]]
# Dans sa version 64 bits
wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_64_ubuntu10.04.run
# Dans sa version 32 bits
wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_32_ubuntu10.04.run
La version disponible pour Ubuntu 11.04 n'est pas utilisable sous Debian Squeeze : elle requiert des dépendances trop fortes pour la version 3.4 de la librairie C !
* les exemples (?) : version [[http://developer.download.nvidia.com/compute/cuda/4_2/rel/sdk/gpucomputingsdk_4.2.9_linux.run|4.2.9]]
wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/sdk/gpucomputingsdk_4.2.9_linux.run
==== Installation du pilote ====
Toutes ces commandes sont à effectuer comme ''root''
Pour commencer, installation et configuration minimale :apt-get install module-assistant
# téléchargement des prototypes du noyau courant si nécessaire
m-a prepare
# pour les noyaux récents (par exemple comme le 2.6.32, il faut blacklister nouveau
echo blacklist nouveau >> /etc/modprobe.d/blacklist.conf
# arret de GDM s'il est lancé
/etc/init.d/gdm stop
# arret de GDM3 s'il est lancé
/etc/init.d/gdm3 stop
# arret de KDM s'il est lancé
/etc/init.d/kdm stop
Le redémarrage semble nécessaire pour que le pilote ''nouveau'' ne soit pas chargé.
Puis, même lancement de l'installation du pilote :
* dans sa version 64 bits :
sh /root/NVIDIA-Linux-x86_64-295.59.run -a -d -kernel-name=$(uname -r)
* dans sa version 32 bits :
sh /root/NVIDIA-Linux-x86-295.59.run -a -d -kernel-name=$(uname -r)
.
==== Installation de la boîte à outils ====
Toutes ces commandes sont à effectuer comme ''root''
Pour le SDK, toujours aussi simple, mais, pour uniformiser les usages, nous décidons d'installer ces librairies non pas dans ''usr/local/cuda'' mais ''/opt/cuda''. De plus, nous désirons conserver l'ancienne version :
cd /opt
# Suppression du lien
[ -e /opt/cuda ] && rm -r /opt/cuda
# Lancer l'installation
sh /root/cudatoolkit_4.2.9_linux_64_ubuntu10.04.run
# Entrer la racine du repertoire d'installation
/opt
# Renommer le repertoire en le suffixant du numero de version
mv cuda cuda-4.2.9
ln -s cuda-4.2.9 cuda
# Creer le document contenant les libraires dynamiques de Cuda (la version 64 bits est pointee)
echo /opt/cuda/lib64 > /etc/ld.so.conf.d/cuda.conf
# Mettre a jour la base
ldconfig
# Ajouter le chemin vers les executables de Cuda (notamment nvcc)
sed -e "s/:\/bin/:\/bin:\/opt\/cuda\/bin/" -e "s/:\/usr\/games/:\/usr\/games:\/opt\/cuda\/bin/" -i~ /etc/profile
# Placer un lien sur la librairie cuda installe par le pilote graphique
cd /opt/cuda/lib64
ln -s /usr/lib/libcuda.so libcuda.so
==== Installation des exemples ====
Toutes ces commandes sont à effectuer comme ''root''
Ensuite, même lancement de l'installation des exemples, pour une installation du SDK dans ''/opt'' : cd /opt
# Suppression du lien
[ -e /opt/NVIDIA_GPU_Computing_SDK ] && rm -r /opt/NVIDIA_GPU_Computing_SDK
# Lancement du script d'installation (il est supposé que l'archive est dans /opt)
sh /root/gpucomputingsdk_4.2.9_linux.run
# Entrer le chemin d'installation
/opt/NVIDIA_GPU_Computing_SDK-4.2.9
# Entrer le chemin d'installation des librairies Cuda
/opt/cuda
# Etablir un lien en ce SDK et la version standard
ln -sf NVIDIA_GPU_Computing_SDK-4.2.9 NVIDIA_GPU_Computing_SDK
Enfin, la compilation des exemples : d'abord ceux de Cuda, ensuite les exemples OpenCL :
apt-get --yes install libxi-dev libxmu-dev libglut3-dev
cd /opt/NVIDIA_GPU_Computing_SDK/C
make
cd /opt/NVIDIA_GPU_Computing_SDK/OpenCL
make
===== Installation de PyCUDA =====
Téléchargement des sources sur : http://mathema.tician.de/software/pycuda
==== Préparation de la compilation ====
apt-get install git libboost-python1.42-dev libboost-thread1.42-dev libboost1.42-all-dev libboost1.42-dev python-setuptools
Toutes ces commandes sont à effectuer comme ''root''
==== Téléchargement des sources ====
Directement en téléchargeant par Git
cd /opt
git clone http://git.tiker.net/trees/pycuda.git
cd pycuda
git submodule init
git submodule update
En récupérant l'archive
cd /root
wget http://pypi.python.org/packages/source/p/pycuda/pycuda-2012.1.tar.gz#md5=b67c4fce6c258834339073f2537fa84f
cd /opt
tar xzf /root/pycuda-2012.1.tar.gz
ln -s pycuda-2012.1 pycuda
chown -R root.root pycuda
cd pycuda
==== Compilation et installation ====
export PATH=$PATH:/opt/cuda/bin
export PYCUDA=$PWD
# On 2011-12-12, Andreas Klockner has corrected !
# On 2011-12-08, PyCUDA needs a slightly patch to compile
#cd src/cpp
#wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/GPU/patch-cuda.hpp
#patch src/cuda/cuda.hpp patch-cuda.hpp
#cd ../..
# Sorry, I don't understand why diff -u/patch -p3 don't work on this tiny patch !
# Configuration
export CUDA_ROOT=/opt/cuda
#./configure.py --cuda-enable-gl --no-use-shipped-boost --cudadrv-lib-dir=/opt/cuda/lib64 --cuda-root=/opt/cuda --cuda-inc-dir=/opt/cuda/include/ --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python-py26 --boost-thread-libname=boost_python-mt-py26 --boost-compiler=/opt/cuda/bin/nvcc
./configure.py --cuda-enable-gl --no-use-shipped-boost
# Compilation
make
# Installation
make install
#
python setup.py build
python setup.py install
==== Exécution des tests d'intégration ====
cd $PYCUDA/test
Premier exemple : ''python test_cumath.py'' donne
============================= test session starts ==============================
platform linux2 -- Python 2.6.6 -- pytest-2.2.3
collected 20 items
test_cumath.py ....................
========================== 20 passed in 37.14 seconds ==========================
Deuxième exemple : ''python test_driver.py'' donne
============================= test session starts ==============================
platform linux2 -- Python 2.6.6 -- pytest-2.2.3
collected 21 items
test_driver.py .....................
========================== 21 passed in 13.75 seconds ==========================
Troisième exemple : ''python test_gpuarray.py'' donne
============================= test session starts ==============================
platform linux2 -- Python 2.6.6 -- pytest-2.2.3
collected 45 items
test_gpuarray.py .............................................
========================= 45 passed in 129.98 seconds ==========================
==== Exécution des exemples ====
cd $PYCUDA/examples
python download-examples-from-wiki.py
===== Installation de PyOpenCL =====
Téléchargement des sources sur : http://mathema.tician.de/software/pyopencl
==== Préparation de la compilation ====
apt-get install libboost-thread-dev
Au 20 juin 2012, la version courante est la ''2012.1'' :
cd /opt
git clone http://git.tiker.net/trees/pyopencl.git
cd pyopencl
git submodule init
git submodule update
cd /root
wget http://pypi.python.org/packages/source/p/pyopencl/pyopencl-2012.1.tar.gz#md5=e6ae70d89d086af4636e4fbb2c806368
cd /opt
tar xzf /root/pyopencl-2012.1.tar.gz
ln -s pyopencl-2012.1 pyopencl
cd pyopencl
==== Compilation et installation de PyOpenCL ====
Avec l'installation des librairies Cuda comme présentée ci-dessus, la compilation se prépare de la façon suivante :
./configure.py --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python-mt-py26 --cl-inc-dir=/opt/cuda/include/ --cl-lib-dir=/usr/lib/ --boost-compiler=/opt/cuda/bin/nvcc
make
make install
python setup.py build
python setup.py install
==== Exécution des exemples ====
cd examples
python benchmark-all.py
Sur une carte Quadro 4000 (et un Dell Precision 7500):
===============================================================
('Platform name:', 'NVIDIA CUDA')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'NVIDIA Corporation')
('Platform version:', 'OpenCL 1.1 CUDA 4.1.1')
---------------------------------------------------------------
('Device name:', 'Quadro 4000')
('Device type:', 'GPU')
('Device memory: ', 2047, 'MB')
('Device max clock speed:', 950, 'MHz')
('Device compute units:', 8)
Execution time of test: 0.000847584 s
Results OK
Sur une carte Quadro 2000 (et un Dell Precision M4600):
('Execution time of test without OpenCL: ', 7.520247220993042, 's')
===============================================================
('Platform name:', 'AMD Accelerated Parallel Processing')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'Advanced Micro Devices, Inc.')
('Platform version:', 'OpenCL 1.1 AMD-APP (831.4)')
---------------------------------------------------------------
('Device name:', 'Intel(R) Core(TM) i7-2860QM CPU @ 2.50GHz')
('Device type:', 'CPU')
('Device memory: ', 16042, 'MB')
('Device max clock speed:', 800, 'MHz')
('Device compute units:', 4)
/usr/local/lib/python2.6/dist-packages/pyopencl-2012.1-py2.6-linux-x86_64.egg/pyopencl/__init__.py:36: CompilerWarning: Non-empty compiler output encountered. Set the environment variable PYOPENCL_COMPILER_OUTPUT=1 to see more.
"to see more.", CompilerWarning)
Execution time of test: 0.00134103 s
Results OK
===============================================================
('Platform name:', 'NVIDIA CUDA')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'NVIDIA Corporation')
('Platform version:', 'OpenCL 1.1 CUDA 4.2.1')
---------------------------------------------------------------
('Device name:', 'Quadro 2000M')
('Device type:', 'GPU')
('Device memory: ', 2047, 'MB')
('Device max clock speed:', 1100, 'MHz')
('Device compute units:', 4)
Execution time of test: 0.00202246 s
Results OK
Vous aurez noter que l'installation préalable d'un SDK AMD a permis de disposer d'un support OpenCL sur le processeur.
====== Installation de PyFFT ======
[[http://packages.python.org/pyfft/|PyFFT]] permet l'exploitation de PyCUDA et PyOpenCL pour effectuer tranquillement ses FFT directement à partir de ses scripts Python.
Pour son installation, suivre la page : http://www.cbp.ens-lyon.fr/emmanuel.quemener/dokuwiki/doku.php?id=pyfft4squeeze