Ceci est une ancienne révision du document !


Rétroportage de pilote Nvidia & Cuda sur une Debian Jessie

Rétroportage de CUDA 6.5 sous Jessie

La Debian Jessie ne dispose que de la version 6.0.37 de CUDA et du pilote 340.46. Ces versions peuvent rapidement sembler insuffisantes pour ceux qui désirent utiliser les dernières fonctionnalités de CUDA 6 ou simplement utiliser les dernières cartes video Nvidia.

Voici la méthode permettant d'installer à partir d'un rétro-portage les paquets Nvidia ainsi que tout l'environnement associé. Au 28 mai 2015, il n'est pas possible de récupérer la version 346.59 se trouvant dans l'archive experimental : le module NVIDIA casse à l'installation par DKMS. Il est donc nécessaire d'installer le dernier pilote opérationnel issu des snaphots Debian, le pilote 343.36. L'environnement de développement, le 6.5.14, sera rétroporté directement de l'archive experimental.

Pour une compilation dans SIDUS, ne pas oublier de monter le /proc

Purge des paquets Nvidia et CUDA originels

dpkg -l | egrep "nvidia|cuda|cupti|nvtoolsext|nvvm|nvctrl|nvcuvid|curand|cublas|cufft|cudart|cuinj|cusparse|libnpp" | awk '{ print $2 }' | xargs -I '{}' apt-get -y purge '{}'
dpkg -l | grep opencl | grep -v openclip | awk '{ print $2 }' | xargs -I '{}' apt-get -y purge '{}'

Préparation du système

Il est nécessaire d'insérer les sources des paquets sid et expérimentaux pour disposer de la dernière version de CUDA packagée (la 6.5.14).

apt-get install -y pbuilder pciutils debhelper quilt libgtk2.0-dev libjansson-dev libvdpau-dev libxv-dev libxxf86vm-dev dh-autoreconf

[ $(grep wheezy /etc/apt/sources.list | grep deb-src | wc -l) -gt 0 ] && echo "Already present" || echo "deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free" >> /etc/apt/sources.list
[ $(grep sid /etc/apt/sources.list | grep deb-src | wc -l) -gt 0 ] && echo "Already present" || echo "deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free" >> /etc/apt/sources.list
[ $(grep experimental /etc/apt/sources.list | grep deb-src | wc -l) -gt 0 ] && echo "Already present" || echo "deb-src http://ftp.fr.debian.org/debian/ experimental main contrib non-free" >> /etc/apt/sources.list
aptitude -y update

Rétroportage des composants Système

mkdir -p /root/nvidia/debian
cd /root/nvidia
apt-get source glx-alternatives
apt-get build-dep glx-alternatives -y
cd glx-alternatives-*
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

glx-alternative-fglrx_0.5.1_amd64.deb
glx-alternative-mesa_0.5.1_amd64.deb
glx-alternative-nvidia_0.5.1_amd64.deb
glx-diversions_0.5.1_amd64.deb

Rétroportage des composants Nvidia

cd /root/nvidia
apt-get source -y nvidia-xconfig nvidia-support nvidia-modprobe libvdpau-dev
apt-get build-dep -y libvdpau-dev
cd /root/nvidia/libvdpau-*
debuild
cd ..
dpkg -i libvdpau1_*_amd64.deb libvdpau-dev_*_amd64.deb
# Telechargement des composants nvidia-graphics-drivers
wget http://snapshot.debian.org/archive/debian/20150319T032616Z/pool/non-free/n/nvidia-graphics-drivers/nvidia-graphics-drivers_343.36-2.debian.tar.xz
wget http://snapshot.debian.org/archive/debian/20150319T032616Z/pool/non-free/n/nvidia-graphics-drivers/nvidia-graphics-drivers_343.36-2.dsc
wget http://snapshot.debian.org/archive/debian/20141213T040722Z/pool/non-free/n/nvidia-graphics-drivers/nvidia-graphics-drivers_343.36.orig.tar.gz
# Telechargement des composants 
wget http://snapshot.debian.org/archive/debian/20150318T212435Z/pool/main/n/nvidia-settings/nvidia-settings_343.36-1.debian.tar.xz
wget http://snapshot.debian.org/archive/debian/20150318T212435Z/pool/main/n/nvidia-settings/nvidia-settings_343.36-1.dsc
wget http://snapshot.debian.org/archive/debian/20150318T212435Z/pool/main/n/nvidia-settings/nvidia-settings_343.36.orig.tar.bz2
# 
apt-get -y build-dep nvidia-xconfig nvidia-support nvidia-modprobe nvidia-settings nvidia-graphics-drivers
cd /root/nvidia/
tar xzf nvidia-graphics-drivers_343.36.orig.tar.gz
mv nvidia-graphics-drivers-343.36.orig nvidia-graphics-drivers-343.36-2
cd nvidia-graphics-drivers-343.36-2
tar xJf ../nvidia-graphics-drivers_343.36-2.debian.tar.xz
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

libcuda1_343.36-2_amd64.deb
libegl1-nvidia_343.36-2_amd64.deb
libgl1-nvidia-glx_343.36-2_amd64.deb
libgles1-nvidia_343.36-2_amd64.deb
libgles2-nvidia_343.36-2_amd64.deb
libnvcuvid1_343.36-2_amd64.deb
libnvidia-compiler_343.36-2_amd64.deb
libnvidia-eglcore_343.36-2_amd64.deb
libnvidia-encode1_343.36-2_amd64.deb
libnvidia-fbc1_343.36-2_amd64.deb
libnvidia-ifr1_343.36-2_amd64.deb
libnvidia-ml1_343.36-2_amd64.deb
libvdpau1_1.1-1_amd64.deb
libvdpau1-dbg_1.1-1_amd64.deb
libvdpau-dev_1.1-1_amd64.deb
libvdpau-doc_1.1-1_all.deb
nvidia-alternative_343.36-2_amd64.deb
nvidia-cuda-mps_343.36-2_amd64.deb
nvidia-detect_343.36-2_amd64.deb
nvidia-driver_343.36-2_amd64.deb
nvidia-driver-bin_343.36-2_amd64.deb
nvidia-glx_343.36-2_amd64.deb
nvidia-kernel-dkms_343.36-2_amd64.deb
nvidia-kernel-source_343.36-2_amd64.deb
nvidia-libopencl1_343.36-2_amd64.deb
nvidia-opencl-common_343.36-2_amd64.deb
nvidia-opencl-icd_343.36-2_amd64.deb
nvidia-smi_343.36-2_amd64.deb
nvidia-vdpau-driver_343.36-2_amd64.deb
xserver-xorg-video-nvidia_343.36-2_amd64.deb
cd /root/nvidia/nvidia-modprobe-*/
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

nvidia-modprobe_340.46-1_amd64.deb
cd /root/nvidia
tar jxf nvidia-settings_343.36.orig.tar.bz2
cd /root/nvidia/nvidia-settings-*/
tar xJf ../nvidia-settings_343.36-1.debian.tar.xz
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

libxnvctrl0_343.36-1_amd64.deb
libxnvctrl-dev_343.36-1_amd64.deb
nvidia-settings_343.36-1_amd64.deb
cd /root/nvidia/nvidia-xconfig-*/
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Le paquet créé est le suivant :

nvidia-xconfig_340.46-1_amd64.deb
cd /root/nvidia/nvidia-support-*/
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

nvidia-installer-cleanup_20141201+1_amd64.deb
nvidia-kernel-common_20141201+1_amd64.deb
nvidia-support_20141201+1_amd64.deb

Installation des composants Nvidia

cd /root/nvidia/debian

rmmod nvidia
sync
rmmod -f nouveau

dpkg -i nvidia-installer-cleanup_*_amd64.deb
dpkg -i glx-diversions_*_amd64.deb glx-alternative-mesa_*_amd64.deb
dpkg -i nvidia-support_*_amd64.deb
dpkg -i glx-alternative-nvidia_*_amd64.deb

dpkg -i nvidia-modprobe_*_amd64.deb

dpkg -i nvidia-alternative_*_amd64.deb

dpkg -i libgl1-nvidia-glx_*_amd64.deb 

apt-get install -y xserver-xorg-core libaudit1 libxkbfile1 x11-xkb-utils xfonts-base xserver-common

dpkg -i nvidia-kernel-common_*_amd64.deb 
dpkg -i nvidia-kernel-source_*_amd64.deb
dpkg -i nvidia-kernel-dkms_*_amd64.deb

ls -1 lib*343.36*deb | xargs -I '{}' dpkg -i '{}'

apt-get -f install

dpkg -i xserver-xorg-video-nvidia_*

dpkg -i nvidia-vdpau-driver_*_amd64.deb nvidia-driver_*_amd64.deb

ls *343.36*deb  | grep -v ^lib | grep -v nvidia-kernel | grep -v libopencl | xargs -I '{}' dpkg -i '{}'

dpkg -i nvidia-driver-bin_*deb nvidia-driver_*deb nvidia-xconfig* nvidia-settings* libxnvctrl* nvidia-smi_*

apt-get -f install

Rétroportage des composants Cuda

cd /root/nvidia
apt-get -y source nvidia-cuda-toolkit
apt-get -y build-dep nvidia-cuda-toolkit
cd nvidia-cuda-toolkit-*
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

libcublas6.5_6.5.14-1_amd64.deb
libcudart6.5_6.5.14-1_amd64.deb
libcufft6.5_6.5.14-1_amd64.deb
libcufftw6.5_6.5.14-1_amd64.deb
libcuinj64-6.5_6.5.14-1_amd64.deb
libcupti6.5_6.5.14-1_amd64.deb
libcupti-dev_6.5.14-1_amd64.deb
libcupti-doc_6.5.14-1_all.deb
libcurand6.5_6.5.14-1_amd64.deb
libcusparse6.5_6.5.14-1_amd64.deb
libnppc6.5_6.5.14-1_amd64.deb
libnppi6.5_6.5.14-1_amd64.deb
libnpps6.5_6.5.14-1_amd64.deb
libnvblas6.5_6.5.14-1_amd64.deb
libnvtoolsext1_6.5.14-1_amd64.deb
libnvvm2_6.5.14-1_amd64.deb
nvidia-cuda-dev_6.5.14-1_amd64.deb
nvidia-cuda-doc_6.5.14-1_all.deb
nvidia-cuda-gdb_6.5.14-1_amd64.deb
nvidia-cuda-toolkit_6.5.14-1_amd64.deb
nvidia-nsight_6.5.14-1_amd64.deb
nvidia-opencl-dev_6.5.14-1_amd64.deb
nvidia-profiler_6.5.14-1_amd64.deb
nvidia-visual-profiler_6.5.14-1_amd64.deb

Installation des composants Cuda & OpenCL

apt-get install -y opencl-headers ocl-icd-opencl-dev 
cd /root/nvidia/debian
ls *6.5.14*deb | grep -v opencl | xargs -I '{}' dpkg -i '{}'
# Il arrive que l'installeur rale sur nvidia-cuda-toolkit. Si c'est le cas, la commande suivante s'impose
apt-get -f install

Rétroportage du composant Python PyOpenCL

cd /root/nvidia
apt-get -y source python-pyopencl
apt-get -y build-dep python-pyopencl
cd pyopencl-*
debuild
cd ..
ls -1 *.deb
mv *.deb debian

Les paquets créés sont les suivants :

python3-pyopencl_2014.1-3_amd64.deb
python3-pyopencl-dbg_2014.1-3_amd64.deb
python-pyopencl_2014.1-3_amd64.deb
python-pyopencl-dbg_2014.1-3_amd64.deb
python-pyopencl-doc_2014.1-3_all.deb

Rétroportage du composants Python PyCUDA

Réinstallation du composant ICD associé au périphérique Nvidia

cd /root/nvidia/debian
dpkg -i nvidia-opencl-common_*_amd64.deb nvidia-opencl-icd_*_amd64.deb
cd /root/nvidia
apt-get source -y pycuda
apt-get -y build-dep pycuda
cd pycuda-*/
debuild
cd ..
ls -1 *.deb
mv *.deb debian
python3-pycuda_2014.1-3_amd64.deb
python3-pycuda-dbg_2014.1-3_amd64.deb
python-pycuda_2014.1-3_amd64.deb
python-pycuda-dbg_2014.1-3_amd64.deb
python-pycuda-doc_2014.1-3_all.deb

Installation des composants Python

cd /root/nvidia/debian
# Les paquets suivants issus de AMD sont necessaires pour le premier et bien utile pour le second
apt-get install -y ocl-icd-libopencl1 ocl-icd-dev opencl-headers
apt-get install -y amd-opencl-icd amd-clinfo
# Les paquets icd standard ocl-icd-opencl-dev ocl-icd-libopencl1
dpkg -i python-pyopencl*.deb  python3-pyopencl*.deb
cd /root/nvidia/debian
apt-get install -y python-pytest python3-pytest 
dpkg -i python-pycuda*deb python3-pycuda*deb

Exécution des exemples

 
python /usr/share/doc/python-pyopencl-doc/examples/benchmark.py 

Sur des cartes Tesla C1060 & Quadro FX 580 (et un Dell Precision 3500):

('Execution time of test without OpenCL: ', 7.415176868438721, 's')
===============================================================
('Platform name:', 'NVIDIA CUDA')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'NVIDIA Corporation')
('Platform version:', 'OpenCL 1.1 CUDA 6.0.1')
---------------------------------------------------------------
('Device name:', 'Tesla C1060')
('Device type:', 'GPU')
('Device memory: ', 4095, 'MB')
('Device max clock speed:', 1296, 'MHz')
('Device compute units:', 30)
Execution time of test: 0.00188525 s
Results OK
===============================================================
('Platform name:', 'NVIDIA CUDA')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'NVIDIA Corporation')
('Platform version:', 'OpenCL 1.1 CUDA 6.0.1')
---------------------------------------------------------------
('Device name:', 'Quadro FX 580')
('Device type:', 'GPU')
('Device memory: ', 511, 'MB')
('Device max clock speed:', 1125, 'MHz')
('Device compute units:', 4)
Execution time of test: 0.0126466 s
Results OK
===============================================================
('Platform name:', 'AMD Accelerated Parallel Processing')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'Advanced Micro Devices, Inc.')
('Platform version:', 'OpenCL 1.2 AMD-APP (938.2)')
---------------------------------------------------------------
('Device name:', 'Intel(R) Xeon(R) CPU           W3565  @ 3.20GHz')
('Device type:', 'CPU')
('Device memory: ', 12041, 'MB')
('Device max clock speed:', 3199, 'MHz')
('Device compute units:', 4)
Execution time of test: 0.00191834 s
Results OK

Sur une carte GT650M (et un Mac Book Pro):

('Execution time of test without OpenCL: ', 7.595532178878784, 's')
===============================================================
('Platform name:', 'NVIDIA CUDA')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'NVIDIA Corporation')
('Platform version:', 'OpenCL 1.1 CUDA 6.0.1')
---------------------------------------------------------------
('Device name:', 'GeForce GT 650M')
('Device type:', 'GPU')
('Device memory: ', 511, 'MB')
('Device max clock speed:', 405, 'MHz')
('Device compute units:', 2)
Execution time of test: 0.0011792 s
Results OK
===============================================================
('Platform name:', 'AMD Accelerated Parallel Processing')
('Platform profile:', 'FULL_PROFILE')
('Platform vendor:', 'Advanced Micro Devices, Inc.')
('Platform version:', 'OpenCL 1.2 AMD-APP (938.2)')
---------------------------------------------------------------
('Device name:', 'Intel(R) Core(TM) i7-3615QM CPU @ 2.30GHz')
('Device type:', 'CPU')
('Device memory: ', 7942, 'MB')
('Device max clock speed:', 1388, 'MHz')
('Device compute units:', 8)
Execution time of test: 0.00280508 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

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

developpement/activites/integration/cuda4jessie.1432847616.txt.gz · Dernière modification: 2015/05/28 23:13 par equemene