Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

developpement:activites:integration:cuda4wheezy [2014/10/14 10:50]
equemene [Rétroportage des composants Système]
developpement:activites:integration:cuda4wheezy [2015/01/07 10:04]
Ligne 1: Ligne 1:
-====== Utilisation des librairies Cuda sur une Debian Wheezy ====== 
- 
-<note important>​Au 25 mai 2014, Debian a corrigé l'​implémentation OpenCL dans sa version 331.79 des pilotes.</​note>​ 
- 
-===== Rétroportage de CUDA 5.5 sous Wheezy ===== 
- 
-La Debian Wheezy ne dispose que de la version 4.2.9 de CUDA et du pilote 304.88. Ces versions peuvent rapidement sembler insuffisantes pour ceux qui désirent utiliser les dernières fonctionnalités de CUDA 5 ou simplement utiliser les dernières cartes video Nvidia. 
- 
-La Debian Wheezy dispose de ses propres paquets rétroportés mais, même s'ils sont plus récents, ils ne proposent que les versions 5.0.35 de CUDA et 3.19.72 du pilote. L'​exploitation des dernières cartes peut donc poser problème, même dans ces versions. 
- 
-Voici la méthode permettant d'​installer à partir d'un rétro-portage les paquets Nvidia ainsi que tout l'​environnement associé. 
- 
-<note warning>​Pour une compilation dans SIDUS, ne pas oublier de monter le ''/​proc''</​note>​ 
-==== Purge des paquets Nvidia et CUDA originels ==== 
- 
-<​code>​ 
-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 '​{}'​ 
-</​code>​ 
- 
-==== 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 5.5.22) et du dernier pilote Nvidia qui fonctionne (le 331.49). 
- 
-<​code>​ 
-apt-get install -y pbuilder pciutils debhelper quilt libgtk2.0-dev libjansson-dev libvdpau-dev libxv-dev libxxf86vm-dev 
- 
-[ $(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 
-</​code>​ 
- 
-==== Rétroportage des composants Système ==== 
- 
-<​code>​ 
-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 
-</​code>​ 
- 
-Les paquets créés sont les suivants : 
-<​code>​ 
-glx-alternative-fglrx_0.4.2_amd64.deb 
-glx-alternative-mesa_0.4.2_amd64.deb 
-glx-alternative-nvidia_0.4.2_amd64.deb 
-glx-diversions_0.4.2_amd64.deb 
-</​code>​ 
- 
-==== Rétroportage des composants Nvidia ==== 
- 
-<​code>​ 
-cd /​root/​nvidia 
-apt-get source nvidia-xconfig nvidia-settings nvidia-support nvidia-modprobe nvidia-graphics-drivers=331.79-1 
-apt-get -y build-dep nvidia-xconfig nvidia-settings nvidia-graphics-drivers ​ nvidia-support nvidia-modprobe nvidia-graphics-drivers=331.79-1 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​ 
-apt-get source nvidia-graphics-drivers=331.79-1 
-cd nvidia-graphics-drivers-331.79 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Les paquets créés sont les suivants :  
-<​code>​ 
-libcuda1_331.79-1_amd64.deb 
-libgl1-nvidia-glx_331.79-1_amd64.deb 
-libnvcuvid1_331.79-1_amd64.deb 
-libnvidia-compiler_331.79-1_amd64.deb 
-libnvidia-encode1_331.79-1_amd64.deb 
-libnvidia-fbc1_331.79-1_amd64.deb 
-libnvidia-ifr1_331.79-1_amd64.deb 
-libnvidia-ml1_331.79-1_amd64.deb 
-nvidia-alternative_331.79-1_amd64.deb 
-nvidia-cuda-mps_331.79-1_amd64.deb 
-nvidia-detect_331.79-1_amd64.deb 
-nvidia-driver_331.79-1_amd64.deb 
-nvidia-glx_331.79-1_amd64.deb 
-nvidia-kernel-dkms_331.79-1_amd64.deb 
-nvidia-kernel-source_331.79-1_amd64.deb 
-nvidia-libopencl1_331.79-1_amd64.deb 
-nvidia-opencl-common_331.79-1_amd64.deb 
-nvidia-opencl-icd_331.79-1_amd64.deb 
-nvidia-smi_331.79-1_amd64.deb 
-nvidia-vdpau-driver_331.79-1_amd64.deb 
-xserver-xorg-video-nvidia_331.79-1_amd64.deb 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​nvidia-modprobe-*/​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Les paquets créés sont les suivants :  
-<​code>​ 
-nvidia-modprobe_334.16-1_amd64.deb 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​nvidia-settings-*/​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Les paquets créés sont les suivants :  
-<​code>​ 
-libxnvctrl0_331.67-1_amd64.deb 
-libxnvctrl-dev_331.67-1_amd64.deb 
-nvidia-settings_331.67-1_amd64.deb 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​nvidia-xconfig-*/​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Le paquet créé est le suivant :  
-<​code>​ 
-nvidia-xconfig_331.67-1_amd64.deb 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​nvidia-support-*/​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Les paquets créés sont les suivants :  
-<​code>​ 
-nvidia-installer-cleanup_20131102+1_amd64.deb 
-nvidia-kernel-common_20131102+1_amd64.deb 
-nvidia-support_20131102+1_amd64.deb 
-</​code>​ 
- 
- 
-==== Installation des composants Nvidia ==== 
- 
-<​code>​ 
-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 libaudit0 libxkbfile1 x11-xkb-utils xfonts-base xserver-common 
- 
-dpkg -i nvidia-kernel-common_*_amd64.deb ​ 
- 
-dpkg -i nvidia-kernel-dkms_*_amd64.deb 
- 
-ls -1 lib*331.79* lib*334.16* | 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 *331.79* *334.16* ​ | grep -v ^lib | grep -v nvidia-kernel | grep -v libopencl | xargs -I '​{}'​ dpkg -i '​{}'​ 
- 
-dpkg -i nvidia-xconfig* nvidia-settings* libxnvctrl* 
- 
-apt-get -f install 
-</​code>​ 
- 
- 
-==== Rétroportage des composants Cuda ==== 
- 
-<​code>​ 
-cd /​root/​nvidia 
-apt-get source nvidia-cuda-toolkit 
-apt-get -y build-dep nvidia-cuda-toolkit 
-cd nvidia-cuda-toolkit-5.5.22 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Les paquets créés sont les suivants :  
-<​code>​ 
-libcublas5.5_5.5.22-4_amd64.deb 
-libcudart5.5_5.5.22-4_amd64.deb 
-libcufft5.5_5.5.22-4_amd64.deb 
-libcufftw5.5_5.5.22-4_amd64.deb 
-libcuinj64-5.5_5.5.22-4_amd64.deb 
-libcupti5.5_5.5.22-4_amd64.deb 
-libcupti-dev_5.5.22-4_amd64.deb 
-libcupti-doc_5.5.22-4_all.deb 
-libcurand5.5_5.5.22-4_amd64.deb 
-libcusparse5.5_5.5.22-4_amd64.deb 
-libnppc5.5_5.5.22-4_amd64.deb 
-libnppi5.5_5.5.22-4_amd64.deb 
-libnpps5.5_5.5.22-4_amd64.deb 
-libnvtoolsext1_5.5.22-4_amd64.deb 
-libnvvm2_5.5.22-4_amd64.deb 
-nvidia-cuda-dev_5.5.22-4_amd64.deb 
-nvidia-cuda-doc_5.5.22-4_all.deb 
-nvidia-cuda-gdb_5.5.22-4_amd64.deb 
-nvidia-cuda-toolkit_5.5.22-4_amd64.deb 
-nvidia-nsight_5.5.22-4_amd64.deb 
-nvidia-opencl-dev_5.5.22-4_amd64.deb 
-nvidia-profiler_5.5.22-4_amd64.deb 
-nvidia-visual-profiler_5.5.22-4_amd64.deb 
- 
-</​code>​ 
- 
-==== Installation des composants Cuda & OpenCL ==== 
- 
-<​code>​ 
-apt-get install -y opencl-headers ocl-icd-opencl-dev g++-4.6 libthrust-dev libstdc++6-4.6-dev 
-cd /​root/​nvidia/​debian 
-ls *5.5.22* | 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 
-</​code>​ 
- 
-==== Rétroportage du composant Python PyOpenCL ==== 
- 
-La dépendance sur une version plus récente de PyTools impose le rétroportage de cette dernière. 
- 
-<​code>​ 
-cd /​root/​nvidia 
-apt-get source python-pytools 
-apt-get -y build-dep python-pytools 
-cd /​root/​nvidia/​pytools-*/​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-<​code>​ 
-python-pytools_2014.2.1-1_all.deb 
-python3-pytools_2014.2.1-1_all.deb 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​debian 
-dpkg -i python3-pytools_*.deb python-pytools_*.deb ​ 
-</​code>​ 
- 
- 
-La Debian Wheezy devient trop ancienne pour rétroporter le dernier paquet Debian ​ 
-<​code>​ 
-cd /​root/​nvidia 
-wget http://​snapshot.debian.org/​archive/​debian/​20131129T144754Z/​pool/​contrib/​p/​pyopencl/​pyopencl_2013.2-1.debian.tar.gz 
-wget http://​snapshot.debian.org/​archive/​debian/​20131129T144754Z/​pool/​contrib/​p/​pyopencl/​pyopencl_2013.2-1.dsc 
-wget http://​snapshot.debian.org/​archive/​debian/​20131129T144754Z/​pool/​contrib/​p/​pyopencl/​pyopencl_2013.2.orig.tar.gz 
-tar xzf pyopencl_2013.2.orig.tar.gz ​ 
-cd pyopencl-2013.2/​ 
-tar xzf ../​pyopencl_2013.2-1.debian.tar.gz ​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-Les paquets créés sont les suivants :  
-<​code>​ 
-python-pyopencl-dbg_2013.2-1_amd64.deb 
-python-pyopencl-doc_2013.2-1_all.deb 
-python-pyopencl_2013.2-1_amd64.deb 
-python3-pyopencl-dbg_2013.2-1_amd64.deb 
-python3-pyopencl_2013.2-1_amd64.deb 
-</​code>​ 
- 
-==== Rétroportage du composants Python PyCUDA ==== 
- 
-Réinstallation du composant ICD associé au périphérique Nvidia 
-<​code>​ 
-cd /​root/​nvidia/​debian 
-dpkg -i nvidia-opencl-common_*_amd64.deb nvidia-opencl-icd_*_amd64.deb 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​debian 
-apt-get purge -y ocl-icd-libopencl1 amd-libopencl1:​amd64 
-dpkg -i nvidia-libopencl1_*_amd64.deb 
-dpkg -i --force-all $(ls *5.5.22-*.deb) ​ 
-</​code>​ 
- 
-La version la plus récente de PuCUDA disponible dans la Debian en source est la version 2013.1.1+git20140310 mais elle n'est pas rétroportable. Il est donc nécessaire de construire les paquets par rapport au PyCUDA de la Wheezy, lequel ne peut pas être installé tel que (il dépend d'un CUDA 4.2.9 alors que nous installons un CUDA 5.5.22). 
- 
-<​code>​ 
-cd /​root/​nvidia 
-apt-cache showsrc pycuda | grep ^Version: | head -1 | awk '{ print $2 }' | xargs -I '​{}'​ apt-get source pycuda='​{}'​ 
-apt-get -y build-dep pycuda 
-cd /​root/​nvidia/​pycuda-*/​ 
-debuild 
-cd .. 
-ls -1 *.deb 
-mv *.deb debian 
-</​code>​ 
- 
-<​code>​ 
-python-pycuda_2012.1-1_amd64.deb 
-python-pycuda-doc_2012.1-1_all.deb 
-python-pycuda-headers_2012.1-1_all.deb 
-</​code>​ 
- 
-==== Installation des composants Python ==== 
- 
-<​code>​ 
-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 
-</​code>​ 
- 
-<​code>​ 
-cd /​root/​nvidia/​debian 
-dpkg -i python-pycuda*deb 
-</​code>​ 
- 
-==== Exécution des exemples ==== 
- 
-<​code> ​ 
-python /​usr/​share/​doc/​python-pyopencl-doc/​examples/​benchmark-all.py ​ 
-</​code>​ 
- 
-Sur des cartes Tesla C1060 & Quadro FX 580 (et un Dell Precision 3500):<​code>​ 
-('​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 
-</​code>​ 
- 
-Sur une carte GT650M (et un Mac Book Pro):<​code>​ 
-('​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 
-</​code>​ 
- 
-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 
  
developpement/activites/integration/cuda4wheezy.txt · Dernière modification: 2015/01/07 10:04 (modification externe)