MXNet mit Grafikprozessorbeschleunigung

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

MXNet

MXNet ist ein Open-Source-Framework für Deep Learning zum Definieren, Trainieren und Bereitstellen von Deep Neural Networks. Es lässt sich flexibel auf den verschiedensten Plattformen einsetzen, von Cloud-Infrastrukturen bis hin zu Mobilgeräten. MXNet zeichnet sich durch seine extreme Skalierbarkeit aus, dank der sich Modelle schnell trainieren lassen. Zudem werden flexible Programmierungsmodelle und mehrere Sprachen unterstützt.

MXNet ermöglicht die Kombination aus symbolischer und imperativer Programmierung und sorgt so für optimale Effizienz und Produktivität. Der Scheduler mit dynamischen Abhängigkeiten, auf dem die Anwendung basiert, parallelisiert Operationen der symbolischen und imperativen Programmierung direkt während der Ausführung. Und dank der übergeordneten Schicht zur graphischen Optimierung wird symbolischer Code schnell und speichereffizient ausgeführt.

Die MXNet-Bibliothek zeichnet sich durch ihre Portabilität und Übersichtlichkeit aus. Für die nötige Beschleunigung sorgen Grafikprozessoren mit der NVIDIA Pascal-Architektur. Die Grafikprozessoren sind dabei über mehrere Knoten verteilt, was das Trainieren von Modellen beschleunigt.

Installation

Systemanforderungen

MXNet wird auf den Betriebssystemen Ubuntu/Debian, Amazon Linux, OS X sowie Windows unterstützt. MXNet lässt sich auf Docker und in Cloud-Umgebungen wie AWS ausführen. Zudem wird MXNet auf eingebetteten Systemen wie dem Raspberry Pi mit Raspbian unterstützt. MXNet unterstützt momentan die Sprachen Python, R, Julia und Scala.

Folgende Anleitung ist für Ubuntu/Debian-Benutzer relevant. 
Für die grafikprozessorfähige Version von MXNet gelten folgende Anforderungen:

1. Linux (64-Bit)

2. Python 2.x/3.x

3. NVIDIA CUDA® 7.0 oder höher (für Pascal-Grafikprozessoren ist CUDA 8.0 erforderlich)

4. NVIDIA cuDNN v4.0 (Mindestanforderung) oder v5.1 (empfohlen)

 

Außerdem benötigen Sie NVIDIA-Grafikprozessoren, die mindestens Compute Capability 3.0 unterstützen.

Download‑ und Installationsanleitung

KOMPILIERUNG IM ÜBERBLICK

1. CUDA installieren

Um MXNet mit NVIDIA-Grafikprozessoren zu verwenden, installieren Sie zuerst das CUDA-Toolkit.

2. cuDNN installieren

Laden Sie nach der Installation des CUDA-Toolkits die Bibliothek cuDNN 5.1 für Linux herunter. (Dazu müssen Sie sich für das Accelerated Computing Developer Program registrieren). 
Entpacken Sie nach dem Download die Dateien und kopieren Sie sie in das CUDA-Toolkit-Verzeichnis (in unserem Beispiel: /usr/local/cuda/)

3. Abhängigkeiten installieren

$ sudo apt-get update
$ sudo apt-get install -y git build-essential libatlas-base-dev \
libopencv-dev graphviz python-pip
$ sudo pip install setuptools numpy --upgrade
$ sudo pip install graphviz jupyter 
$ sudo pip install requests # for examples, e.g., mnist, cifar

4. MXNet installieren

Klonen Sie das MXNet-Quellcode-Repository auf Ihrem Computer, führen Sie das Installationsskript aus und aktualisieren Sie die Umgebungsvariablen. Installieren Sie zusätzlich zur Kompilierung von MXNet das Python-MXNet-Modul und geben Sie den Pfad an.

$ git clone https://github.com/dmlc/mxnet.git --recursive
$ cd mxnet
$ cp make/config.mk .
$ echo "USE_CUDA=1" >> config.mk # to enable CUDA
$ echo "USE_CUDA_PATH=/usr/local/cuda" >> config.mk
$ echo "USE_CUDNN=1" >> config.mk
$ make –j $(nproc)
$ cd python; sudo python setup.py install; cd .. # to install MXNet python module
$ export MXNET_HOME=$(pwd)
$ echo "export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH" >> ~/.bashrc
$ source ~/.bashrc

5. Installation testen.

Prüfen Sie, ob MXNet ordnungsgemäß installiert wurde.

$ python 
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Für weitere Informationen „help“, „copyright“, „credits“ oder „license“ eingeben.
>>> import mxnet as mx
>>> a = mx.nd.ones((2, 3), mx.cpu())
>>> print ((a * 2).asnumpy())
[[ 2. 2. 2.]
[ 2. 2. 2.]]
>>> a = mx.nd.ones((2, 3), mx.gpu())
>>> print ((a * 2).asnumpy())
[[ 2. 2. 2.]
[ 2. 2. 2.]]

Wenn kein Importfehler angezeigt wird, ist MXNet bereit für Python.

Training der Netzwerke

Nachdem Sie MXNet installiert haben, können Sie ein paar Tests mit Beispielen zum Trainieren auf einzelnen oder mehreren Grafikprozessoren durchführen.

MNIST-MODELL

Beispiele für Bildklassifikation:

cd example/image-classification

Multilayer-Wahrnehmung mit dem mnist-Datensatz auf dem Grafikprozessor 0 trainieren

$ python train_mnist.py --network mlp --gpus 0

CIFAR10-MODELL

ResNet mit 110 Schichten mit dem Datensatz „cifar10“ und der Batchgröße 128 auf den Grafikprozessoren 0 und 1 trainieren

$ python train_cifar10.py --network resnet --num-layers 110 \ --batch-size 128 --gpus 0,1

INCEPTION V3

Um einen Benchmarktest auf Imagenet-Netzen auszuführen, verwenden Sie „--benchmark 1“ als Argument für „train_imagenet.py“:

$ cd example/image-classification # if you are at MXNET_HOME

$ python train_imagenet.py --benchmark 1 --gpus 0,1 --network inception-v3 \ --batch-size 64 --image-shape 3,299,299 --num-epochs 10 --kv-store device

Benchmarks

MXNET-LEISTUNG AUF EINEM SYSTEM MIT MEHREREN GRAFIKPROZESSOREN

CIFAR10-Trainingsleistung auf dem Tesla P100
Inception v3-Trainingsleistung auf dem Tesla P100
MNIST-Trainingsleistung auf dem Tesla P100

Empfohlene Systemkonfigurationen

Hardwarekonfiguration

PC

Parameter
Specs

CPU Architecture

x86_64

System Memory

8-32GB

CPUs

2 CPU sockets (8+
cores, 2+ GHz ?)

GPU Model

NVIDIA®TITAN

GPUs

1-4

Servers

Parameter
Specs

CPU Architecture

x86_64

System Memory

32 GB+

CPUs/Nodes

2 (8+ cores, 2+ GHz)

GPU Model

Tesla®P100

GPUs/Node

1-4

Softwarekonfiguration

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

375.35 or newer

CUDA Toolkit

8.0 or newer

cuDNN Library

v5.0 or newer

cuDNN

2016.0.47

Ihre ideale Grafikprozessorlösung