Caffe2 mit Grafikprozessorbeschleunigung

Anleitung für grafikprozessorfähige Anwendungen lesen und direkt beginnen

Caffe2

Caffe2 ist ein Deep-Learning-Framework, mit dem Deep Learning einfach und flexibel möglich ist. Caffe2 beruht auf der ursprünglichen Anwendung Caffe und ist auf Programmierausdruck, Geschwindigkeit und Modularität ausgelegt. So lassen sich Berechnungen flexibler organisieren.

Caffe2 soll das Experimentieren mit Deep Learning auf einfache, direkte Weise ermöglichen. Daher hat die Community die Möglichkeit, zu neuen Modellen und Algorithmen beizutragen. Caffe2 verfügt über native APIs für Python und C++. Sie sind untereinander austauschbar, sodass Sie Prototypen schnell erstellen und später ganz einfach optimieren können.

Caffe2 wird mit den neuesten NVIDIA Pascal™-Grafikprozessoren beschleunigt und lässt sich auf mehrere Grafikprozessoren innerhalb eines einzelnen Knotens skalieren. Dadurch lassen sich Modelle innerhalb weniger Stunden anstatt mehrerer Tage trainieren.

NVIDIA und Facebook – ein starkes Team mit dem Ziel, die Leistung des Caffe2-Deep-Learning-Frameworks zu steigern

Installation

Download‑ und Installationsanleitung

CAFFE2 INSTALLIEREN UND AUSFÜHREN

Caffe2 ist ein Deep-Learning-Framework, das sowohl die Konvolutions- als auch zeitabhängige, oder Rekurrente-Netze unterstützt.

FRAMEWORK-ABHÄNGIGKEITEN

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

Für Grafikprozessorbeschleunigung sind CUDA und cuDNN erforderlich. Die aktuelle Version von cuDNN (5.1.10) wird unterstützt.

Als Beispiel ist der Installationsprozess der Abhängigkeiten in einem Ubuntu 16.04-System unten aufgeführt.

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 (wenn auch ipython-Notebooks verwendet werden sollen)]

GRAFIKPROZESSORBIBLIOTHEKEN INSTALLIEREN

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*

CAFFE2 ERSTELLEN

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

CAFFE2 TESTEN

Es gibt unterschiedliche Möglichkeiten, um zu überprüfen, ob der Caffe2-Build korrekt funktioniert. Eine Möglichkeit ist, Beispiel-Binärdateien zu verwenden, die sich unter $CAFFE2_ROOT/build/caffe2/binaries befinden, und die andere ist die Verwendung von Python-Skripts, die sich unter $CAFFE2_ROOT/build/caffe2/python befinden. Anhand aller Binärdateien, die auf „_test“ enden, können Sie sich vergewissern, dass Caffe2 ordnungsgemäß funktioniert. Unten finden Sie als Beispiel die Ausgabe von „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$

Mit den bereitgestellten Python-Skripts lässt sich Caffe2 auf verschiedenen Architekturen neuronaler Netzwerke einfach testen. Die Beispielergebnisse aus dem Skript „convnet_benchmarks.py“ werden unten angezeigt.

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

Bekommen Sie einen Importfehler, bei der Ausführung eines der Python-Skripts, fügen Sie caffe2 zum PYTHONPATH oder manuell innerhalb des Skriptes hinzu. Beispielzeilen für den Terminal:

export PYTHONPATH=$PYTHONPATH:$CAFFE2_ROOT/build

Innerhalb des Python-Skripts lässt sich der Pfad auch mithilfe des Python sys-Moduls hinzufügen.

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

Mithilfe dieses Skripts lassen sich weitere Batchgrößen und neben AlexNet weitere Netzwerke testen. Mit diesem Befehl erhalten Sie die Ergebnisse für zwei unterschiedliche Batchgrößen (16 und 32) für die Inception-Netzwerkkonfiguration. Die Beispiel-Ausgabe eines einzelnen Grafikprozessors auf einem K80 ist unten angegeben.

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

Tabelle 1. Beispielergebnisse mit einem 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

TRAININGSLEISTUNG BEI BILDERN AUF GOOGLENET

GoogLeNet ist ein neueres Deep-Learning-Modell, das ein tieferes, umfassenderes Netz nutzt und dadurch eine präzisere Bildklassifizierung ermöglicht.

AlexNet-Trainingsleistung mit Pascal-Grafikprozessor
Inception-Trainingsleistung mit Pascal-Grafikprozessor
OverFeat-Trainingsleistung mit Pascal-Grafikprozessor
VGG-A-Trainingsleistung mit Pascal-Grafikprozessor

Empfohlene Systemkonfigurationen

Hardwarekonfiguration

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

Softwarekonfiguration

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

375.26 or newer

CUDA Toolkit

8.0 or newer

Ihre ideale Grafikprozessorlösung