Caffe2 avec accélération GPU

Exploitez le plein potentiel de Caffe2 avec notre guide de démarrage pour application GPU.

Caffe2

Caffe2 est un framework de Deep Learning à hautes performances aussi accessible que polyvalent. Basé sur l’instance originale de la solution logicielle Caffe, Caffe2 met l’accent sur la vitesse, l’expression et la modularité afin d’offrir une méthode plus flexible pour organiser les opérations de calcul informatique.

Caffe2 permet de profiter encore plus efficacement et rapidement des nombreux avantages du Deep Learning, en partageant avec sa communauté de contributeurs de tout nouveaux modèles et algorithmes. Caffe2 intègre nativement les API Python et C++, désormais entièrement interchangeables, pour que vous puissiez effectuer plus vite vos opérations de prototypage et optimiser vos modèles à tout moment.

Caffe2 est accéléré par les nouveaux GPU NVIDIA Pascal™ et offre d’importants gains de performance sur les nœuds à GPU multiples. Vous pouvez désormais entraîner vos modèles en quelques heures, contre plusieurs jours auparavant.

NVIDIA et Facebook s’associent pour optimiser le framework de Deep Learning Caffe2.

Installation

Instructions de téléchargement et d’installation

INSTALLATION ET EXÉCUTION DE CAFFE2

Caffe2 est un framework de Deep Learning qui prend en charge les réseaux neuronaux convolutifs et récurrents.

DÉPENDANCES DE FRAMEWORK

Caffe2 requiert protobuf, atlas, glog, gtest, limdb, leveldb, snappy, OpenMP, OpenCV, pthread-stubs, cmake, python-protobuf et numpy.

CUDA et cuDNN sont requis pour l’accélération GPU. La version actuelle de cuDNN (5.1.10) est prise en charge.

Des exemples de procédure d’installation des dépendances sur les systèmes Ubuntu 16.04 sont listés ci-dessous.

sudo apt-get install libprotobuf-dev protobuf-compiler libatlas-base-dev libgoogle-glog-dev libgtest-dev liblmdb-dev libleveldb-dev libsnappy-dev python-dev python-pip libiomp-dev libopencv-dev libpthread-stubs0-dev cmake python-protobuf git
sudo pip install numpy [matplotlib ipython (en cas d’utilisation avec des terminaux ipython)]

INSTALLATION DES BIBLIOTHÈQUES GPU

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
wget http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/libcudnn5_5.1.10-1+cuda8.0_amd64.deb
wget http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/libcudnn5-dev_5.1.10-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn5*

CONFIGURATION DE CAFFE2

git clone --recursive https://github.com/caffe2/caffe2.git
cd caffe2
mkdir build && cd build
cmake ..
make

TEST DE CAFFE2

Plusieurs méthodes permettent de vérifier que votre version de Caffe2 fonctionne correctement. L’une d’entre elles consiste à utiliser les fichiers binaires du dossier "$CAFFE2_ROOT/build/caffe2/binaries", mais vous pouvez aussi utiliser les scripts python stockés dans "$CAFFE2_ROOT/build/caffe2/python". Les fichiers binaires avec un suffixe de type "_test" peuvent tous être utilisés afin de vérifier que votre version de Caffe2 fonctionne correctement. Retrouvez ci-dessous un exemple de sortie à partir de "elementwise_op_gpu_test".

user@gpu-platform:~/framework/caffe2/build/caffe2/binaries$ ./elementwise_op_gpu_test
Running main() from gtest_main.cc
[==========] Running 4 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 4 tests from ElementwiseGPUTest
[ RUN ] ElementwiseGPUTest.And
[ OK ] ElementwiseGPUTest.And (118 ms)
[ RUN ] ElementwiseGPUTest.Or
[ OK ] ElementwiseGPUTest.Or (2 ms)
[ RUN ] ElementwiseGPUTest.Xor
[ OK ] ElementwiseGPUTest.Xor (1 ms)
[ RUN ] ElementwiseGPUTest.Not
[ OK ] ElementwiseGPUTest.Not (1 ms)
[----------] 4 tests from ElementwiseGPUTest (122 ms total)

[----------] Global test environment tear-down
[==========] 4 tests from 1 test case ran. (122 ms total)
[ PASSED ] 4 tests.
user@gpu-platform:~/framework/caffe2/build/caffe2/binaries$

De multiples scripts python vous sont fournis pour permettre un test plus facile de Caffe2 avec différentes architectures de réseaux neuronaux. Des exemples de résultats à partir de "convnet_benchmarks.py" vous sont présentés ci-dessous.

user@gpu-platform:~/frameworks/caffe2/build/caffe2/python$ python convnet_benchmarks.py --batch_size 1 --model AlexNet --cudnn_ws 500 --iterations 50
AlexNet: running forward-backward.
I0313 09:52:50.316722 9201 net_dag.cc:112] Operator graph pruning prior to chain compute took: 3.1274e-05 secs
I0313 09:52:50.316797 9201 net_dag.cc:363] Number of parallel execution chains 34 Number of operators = 61
I0313 09:52:50.316933 9201 net_dag.cc:525] Starting benchmark.
I0313 09:52:50.316938 9201 net_dag.cc:526] Running warmup runs.
I0313 09:52:51.110822 9201 net_dag.cc:536] Main runs.
I0313 09:52:52.975484 9201 net_dag.cc:547] Main run finished. Milliseconds per iter: 37.2928. Iters per second: 26.8149

Si vous expérimentez une erreur d’importation lorsque vous essayez d’exécuter l’un des scripts python, veuillez ajouter caffe2 au PYTHONPATH ou procédez à un ajout manuel dans le script. Voici des lignes d’exemple pour le terminal :

export PYTHONPATH=$PYTHONPATH:$CAFFE2_ROOT/build

Il est également possible d’utiliser le module système Python à l’intérieur du script Python afin d’ajouter le chemin d’accès.

CAFFE_ROOT=path/to/caffe2
import sys
sys.path.insert(0, CAFFE_ROOT+'/build')

Ce script peut être utilisé pour tester différents réseaux et tailles de batch (autres que AlexNet). Cette commande fournit des résultats optimaux avec deux différentes tailles de batch (16 et 32) via la configuration de réseau "inception". Retrouvez ci-dessous un exemple de sortie en utilisant une configuration K80 mono-GPU.

for BS in 16 32; do python convnet_benchmarks.py --batch_size $BS --model Inception --cudnn_ws 1000 ; done

user@sas03:~/frameworks/caffe2/build/caffe2/python$ for BS in 16 32; do python convnet_benchmarks.py --batch_size $BS --model Inception --cudnn_ws 500 ; done
Inception: running forward-backward.
I0317 00:54:50.650635 13008 net_dag.cc:123] Operator graph pruning prior to chain compute took: 0.000371156 secs
I0317 00:54:50.651175 13008 net_dag.cc:374] Number of parallel execution chains 381 Number of operators = 410
I0317 00:54:50.652022 13008 net_dag.cc:536] Starting benchmark.
I0317 00:54:50.652041 13008 net_dag.cc:537] Running warmup runs.
I0317 00:54:53.824313 13008 net_dag.cc:547] Main runs.
I0317 00:54:55.567314 13008 net_dag.cc:558] Main run finished. Milliseconds per iter: 174.29. Iters per second: 5.73757
Inception: running forward-backward.
I0317 00:54:59.600677 13051 net_dag.cc:123] Operator graph pruning prior to chain compute took: 0.000389294 secs
I0317 00:54:59.601260 13051 net_dag.cc:374] Number of parallel execution chains 381 Number of operators = 410
I0317 00:54:59.602026 13051 net_dag.cc:536] Starting benchmark.
I0317 00:54:59.602046 13051 net_dag.cc:537] Running warmup runs.
I0317 00:55:05.079577 13051 net_dag.cc:547] Main runs.
I0317 00:55:08.394855 13051 net_dag.cc:558] Main run finished. Milliseconds per iter: 331.52. Iters per second: 3.01641

Tableau 1. Résultats avec P100e.

Batch Size Network (milliseconds/iteration)
  AlexNet Overfeat Inception VGGA
16 24.6273 71.0308 65.605 166.251
32 40.0542 118.455 115.41 301.975
64 70.194 214.297 212.805 584.622
128 128.4 411.872 410.167 1149.21

Batch Size Network (image/s == iteration/millisecond*Batch Size/iteration*1,000ms/1s)
  AlexNet Overfeat Inception VGGA
16 650 225 244 96
32 799 270 277 106
64 912 299 301 109
128 997 311 312 111

Note, the benchmarks results shown above are for synthetic data only, and does not use images from the ImageNet dataset.

Benchmarks

PERFORMANCES D’ENTRAÎNEMENT AVEC GOOGLENET

GoogLeNet est un tout nouveau modèle de Deep Learning qui s’appuie sur un modèle de réseau plus étendu et plus complexe afin de fournir une classification d'images de haute précision.

Performances d’entraînement AlexNet avec les GPU Pascal
Performances d’entraînement Inception avec les GPU Pascal
Performances d’entraînement OverFeat avec les GPU Pascal
Performances d’entraînement VGG-A avec les GPU Pascal

Configuration système recommandée

Configuration matérielle

PC

Parameter
Specs

CPU Architecture

x86

System Memory

16GB

CPUs

2 (8+ cores, 2+ GHz)

GPU Model

NVIDIA TITAN Xp

GPUs

1-4

Servers

Parameter
Specs

CPU Architecture

x86

System Memory

Up to 256GB

CPUs/Nodes

2 (8+ cores, 2+ GHz)

GPU Model

NVIDIA® Tesla® P100

GPUs/Node

1-8

Configuration logicielle

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

375.26 or newer

CUDA Toolkit

8.0 or newer

Déployez votre solution GPU personnalisée.