Installation CUDA (10.2) + cuDNN (7.6) + OpenCV (4.2)

Installation CUDA (10.2) + cuDNN (7.6) + OpenCV (4.2)

Comment installer OpenCV 4.2 avec CUDA 10.2 & cuDNN 7.6 sur Ubuntu 18.04 ?


Tout d'abord, installez la mise à jour et mettez à niveau votre système :
    
$ sudo apt update
$ sudo apt upgrade

Installation des drivers CUDA (10.2) pour Ubuntu 18.04 (64bits) :

Si la version à changer vous pouvez vous rendre : https://developer.nvidia.com/cuda-downloads



$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600        
$ mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
$ apt update
$ apt install cuda

Verification après reboot :

  $ nvidia-smi

Téléchargement et  installation de la librairies cuDNN :

Allez sur le site de NVIDIA (vous devez avoir un compte developper pour accéder au téléchargement) : https://developer.nvidia.com/rdp/cudnn-download



Sélectionner les trois fichiers comme ci-dessous qui correspond à votre version de CUDA :



Il faut ensuite les installer :

  $ dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb 
$ dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb 
Verification de l'installation cuDNN :

  $ cd /usr/src/cudnn_samples_v7/mnistCUDNN/
$ make clean && sudo make
$ ./mnistCUDNN
Ensuite, installez les bibliothèques requises :

Outils génériques :

  $ sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall
    
* Image I/O libs

  $ sudo apt install libjpeg-dev libpng-dev libtiff-dev

* Video/Audio Libs - FFMPEG, GSTREAMER, x264 and so on.

  $ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev 
$ sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev

* OpenCore - Adaptive Multi Rate Narrow Band (AMRNB) and Wide Band (AMRWB) speech codec

  $ sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev

* Cameras programming interface libs

  $ sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
$ cd /usr/include/linux
$ sudo ln -s -f ../libv4l1-videodev.h videodev.h
$ cd ~

* Librairie GTK pour la fonctionnalité graphique de l'utilisateur issue du module OpenCV highgui :

  $ sudo apt-get install libgtk-3-dev

* Python libraries pour python3:

  $ sudo apt-get install python3-dev python3-pip
$ sudo -H pip3 install -U pip numpy
$ sudo apt install python3-testresources

* Parallelism library C++ pour CPU

  $ sudo apt-get install libtbb-dev
* Optimization libraries pour OpenCV

  $ sudo apt-get install libatlas-base-dev gfortran
* libraries optionnelles :

    $ sudo apt-get install libprotobuf-dev protobuf-compiler
    $ sudo apt-get install libgoogle-glog-dev libgflags-dev
    $ sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
Nous allons maintenant procéder à l'installation (voir l'indicateur Qt qui est désactivé pour ne pas avoir de conflits avec Qt5.0).

    $ cd ~
    $ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
    $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
    $ unzip opencv.zip
    $ unzip opencv_contrib.zip
Créer un environnement virtuel pour le module de liaison python :

    $ sudo pip install virtualenv virtualenvwrapper
    $ sudo rm -rf ~/.cache/pip

    $ nano ~/.bashrc"
    $ export WORKON_HOME=$HOME/.virtualenvs
    $ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

    $ source /usr/local/bin/virtualenvwrapper.sh
    $ mkvirtualenv cv -p python3
    $ pip install numpy
    
Procéder à l'installation :

    $ cd opencv-4.2.0
    $ mkdir build
    $ cd build

    $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D WITH_TBB=ON \
    -D WITH_CUDA=ON \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D BUILD_opencv_cudacodec=OFF \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D WITH_V4L=ON \
    -D WITH_QT=OFF \
    -D WITH_OPENGL=ON \
    -D WITH_GSTREAMER=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_PC_FILE_NAME=opencv.pc \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D CUDA_ARCH_BIN:STRING=6.1 \
    -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.2.0/modules \
    -D PYTHON_EXECUTABLE=$(which python3) \
    -D BUILD_EXAMPLES=ON ..
Avant la compilation, vous devez vérifier que CUDA a été activé dans le résumé de configuration imprimé à l'écran.
(Si vous rencontrez des problèmes avec l'architecture CUDA, voir à la fin du document)

--   NVIDIA CUDA:                   YES (ver 10.2, CUFFT CUBLAS NVCUVID FAST_MATH)
--   NVIDIA GPU arch:             30 35 37 50 52 60 61 70 75
--   NVIDIA PTX archs:

Si tout va bien, procédez à la compilation (utilisez nproc pour connaître le nombre de cœurs de processeur) :
Vous pouvez aller boire un café, ça prend un temps fou à compiler ... 😊
    
    $ nproc
    $ make -j8
    $ sudo make install

Incluez les bibliothèques dans votre environnement
    
    $ sudo /bin/bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
    $ sudo ldconfig
    
Si vous souhaitez disposer de liaisons python opencv disponibles dans l'environnement système, vous devez copier le dossier créé lors de l'installation d'OpenCV :
(* -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages *) dans le dossier *dist-packages* de l'interpréteur python cible:

 $ sudo cp -r ~/.virtualenvs/cv/lib/python3.6/site-packages/cv2 /usr/local/lib/python3.6/dist-packages
    
 $ echo "Modify config-3.6.py to point to the target directory" 
 $ sudo nano /usr/local/lib/python3.6/dist-packages/cv2/config-3.6.py 
    
   PYTHON_EXTENSIONS_PATHS = [
   os.path.join('/usr/local/lib/python3.6/dist-packages/cv2', 'python-3.6')
   ] + PYTHON_EXTENSIONS_PATHS

### Liste des problèmes

Si vous rencontrez des problèmes avec les architectures non prises en charge de votre carte graphique avec les exigences minimales d'Opencv, vous obtiendrez l'erreur suivante :

CUDA backend for DNN module requires CC 5.3 or higher.
Veuillez supprimer les architectures non prises en charge avec l'option :  CUDA_ARCH_BIN

Cela signifie que le module DNN a besoin que votre carte graphique prenne en charge la version 5.3 Compute Capability (CC); dans ce lien : https://developer.nvidia.com/cuda-gpus, vous pouvez afficher le CC de votre carte. Certaines versions opencv ont fixé la version minimale à 3.0 mais il y a un mouvement clair pour filtrer au-dessus de 5.3 puisque les opérations de précision à demi-précision sont disponibles à partir de la version 5.3. Pour résoudre ce problème, vous pouvez modifier le fichier * CMakeList.txt * situé dans * opencv> modules> dnn> CMakeList.txt * et définir la version minimale à celle que vous avez mais gardez à l'esprit que le bon fonctionnement de ce module être compromis. Cependant, si vous ne voulez que du GPU pour le reste des modules, cela pourrait fonctionner.

Vous pouvez également sélectionner l'option cible CUDA_ARCH_BIN dans la commande pour générer le makefile pour votre cible actuelle ou modifier la liste des architectures prises en charge:

$ grep -r 'CUDA_ARCH_BIN' .  ./CMakeCache.txt

La solution est d'avoir une version supérieure à 5.3, vous pouvez donc modifier le fichier en supprimant tous les arc inférieur à 5.3

CUDA_ARCH_BIN:STRING=6.0 6.1 7.0 7.5

Maintenant, le makefile a été créé avec succès. Avant la compilation, vous devez vérifier que CUDA a été activé dans le résumé de configuration imprimé à l'écran.

--   NVIDIA CUDA:                   YES (ver 10.2, CUFFT CUBLAS NVCUVID FAST_MATH)
--   NVIDIA GPU arch:             60 61 70 75
--   NVIDIA PTX archs:

Partager :

Ajouter un nouveau commentaire

 Votre commentaire a été envoyé avec succès. Je vous remercie !   Rafraichir
Erreur: essayez à nouveau