Caffe2 con accelerazione tramite GPU

Inizia subito con questa guida per applicazioni basate su GPU.

Caffe2

Caffe2 è un framework di deep learning semplice e flessibile. Realizzato sulla base dell'originale Caffe, Caffe2 è stato progettato con espressione, velocità e modularità per migliorare e rendere l'elaborazione più flessibile ed efficiente.

L'obiettivo principale di Caffe2 è di offrire un metodo semplice e chiaro che sfrutti la tecnologia di deep learning con algoritmi e modelli nuovi messi a disposizione dall'intera community. Caffe2 include API Python e C++ native intercambiabili tra loro per creare prototipi in pochissimo tempo, da ottimizzare poi successivamente.

Caffe2 è accelerato con le più recenti GPU NVIDIA Pascal™ e si distribuisce su più GPU in un singolo nodo. Adesso è possibile addestrare modelli in poche ore invece che in giorni.

NVIDIA e Facebook per accelerare il framework di deep learning Caffe2.

Installazione

Istruzioni di download e di installazione

INSTALLAZIONE ED ESECUZIONE DI CAFFE2

Caffe2 è un framework di deep learning che supporta reti neurali convoluzionali e ricorrenti.

DIPENDENZE DEL FRAMEWORK

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

Per l'accelerazione della GPU sono necessari CUDA e cuDNN. La versione corrente di cuDNN è supportata (5.1.10).

Processo di esempio per l'installazione delle dipendenze su un sistema Ubuntu 16.04 come indicato di seguito.

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 (per utilizzare anche notebook ipython)]

INSTALLAZIONE DELLE LIBRERIE 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*

BUILD DI CAFFE2

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

TEST DI CAFFE2

Esistono vari metodi per accertarsi del corretto funzionamento della build di Caffe2; uno dei metodi consiste nell'uso dei file binari di esempio ubicati in $CAFFE2_ROOT/build/caffe2/binaries, un altro consiste nell'uso degli script python ubicati in $CAFFE2_ROOT/build/caffe2/python. Per accertarsi del corretto funzionamento della build di Caffe2, è possibile utilizzare tutti i file binari che terminano con "_test". Di seguito è riportato un esempio di output di 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$

Sono disponibili più script python per consentire l'esecuzione di un test di Caffe2 con diverse architetture di reti neurali. Di seguito sono riportati i risultati dell'esempio con convnet_benchmarks.py.

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

Se si verifica un errore di importazione durante il tentativo di eseguire uno degli script python, aggiungere caffe2 a PYTHONPATH o manualmente nello script. Righe di esempio del terminale:

export PYTHONPATH=$PYTHONPATH:$CAFFE2_ROOT/build

In alternativa, nello script Python è possibile utilizzare il modulo sys Python per aggiungere il percorso.

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

Questo script può essere utilizzato per eseguire il test di diverse dimensioni di batch e reti, oltre ad AlexNet. Questo comando fornirà risultati per due dimensioni di batch differenti, 16 e 32, con la configurazione della rete iniziale. Di seguito è incluso il risultato di esempio utilizzando una GPU singola su un K80.

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

Tabella 1. Risultati di esempio ottenuti con 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.

Benchmark

PRESTAZIONI DI TRAINING DI IMMAGINI SU GOOGLENET

GoogLeNet è un nuovo modello di deep learning che sfrutta una rete più ampia e profonda in grado di garantire maggiore precisione nella classificazione delle immagini.

Prestazioni di training di AlexNet su GPU Pascal
Prestazioni di training di Inception su GPU Pascal
Prestazioni di training di OverFeat su GPU Pascal
Prestazioni di training di VGG-A su GPU Pascal

Configurazioni del sistema consigliate

Configurazione hardware

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

Configurazione software

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

375.26 or newer

CUDA Toolkit

8.0 or newer

Crea la tua soluzione GPU ideale oggi stesso.