MXNet con accelerazione tramite GPU

Inizia subito con questa guida per applicazioni basate su GPU.

MXNet

MXNet è un framework di deep learning open-source che consente la definizione, il training e l'implementazione di reti neurali su una vasta gamma di dispositivi, dalle infrastrutture cloud ai dispositivi mobili. È altamente scalabile, per cui accelera il training dei modelli e supporta un modello di programmazione flessibile con più linguaggi.

MXNet consente di mescolare varie tipologie di programmazione simbolica e imperativa, allo scopo di ottimizzare l'efficienza e la produttività. Si basa su uno scheduler dinamico delle dipendenze che parallelizza automaticamente operazioni simboliche e imperative in tempo reale. Il layer di ottimizzazione grafica, inoltre, accelera l'esecuzione simbolica e ottimizza l'efficienza della memoria.

La libreria MXNet è snella e portabile su più piattaforme. È accelerata con GPU Pascal NVIDIA e si distribuisce su più GPU e più nodi, accelerando il training dei modelli.

Installazione

Requisiti di sistema

MXNet può essere utilizzato su sistemi operativi Ubuntu/Debian, Amazon Linux, OS X e Windows. MXNet può essere eseguito su Docker e su cloud come AWS. L'esecuzione di MXNet, inoltre, può avvenire anche su dispositivi integrati, ad esempio Raspberry Pi con Raspbian. MXNet attualmente supporta i linguaggi Python, R, Julia e Scala.

Queste istruzioni sono fornite per gli utenti di Ubuntu/Debian. 
Requisiti della versione di MXNet per GPU:

1. Linux a 64 bit

2. Python 2.x / 3.x

3. NVIDIA CUDA® 7.0 o versioni successive (le GPU Pascal richiedono CUDA 8.0)

4. NVIDIA cuDNN v4.0 (minimo) o v5.1 (consigliato)

 

Occorre anche una GPU NVIDIA che supporti la capacità di calcolo versione 3.0 o successiva.

Istruzioni di download e di installazione

SEGUE UN BREVE SOMMARIO DELLA PROCEDURA DI COMPILAZIONE

1. Installare CUDA

Per utilizzare MXNet con GPU NVIDIA, installare innanzitutto il Toolkit CUDA.

2. Installare cuDNN

Dopo l'installazione del Toolkit CUDA, scaricare la Libreria cuDNN v5.1 per Linux (tenere presente che è necessario eseguire la registrazione all' Accelerated Computing Developer Program). 
Al termine del download, decomprimere i file e copiarli nella directory del Toolkit CUDA (di norma: /usr/local/cuda/)

3. Installare le dipendenze

$ 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 # ad es. mnist, cifar

4. Installare MXNet

Duplicare il repository del codice sorgente MXNet sul computer, eseguire lo script di installazione e aggiornare le variabili di ambiente. Oltre alla compilazione di MXNet, installare il modulo MXNet python e includere il percorso

$ 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. Testare l'installazione

Controllare se MXNet è installato correttamente.

$ python 
Python 2.7.6 (predefinito, 26 ottobre 2016, 20:30:19)
[GCC 4.8.4] su linux2
Per ulteriori informazioni, digitare "help", "copyright", "credits" o "license".
>>> 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.]]

Se non si verifica un errore di importazione, MXNet è pronto per python.

Modelli di training

A questo punto, con MXNet installato correttamente, provarlo con alcuni esempi di training su GPU singole o multiple.

MODELLO MNIST

Esempi di classificazione delle immagini:

cd example/image-classification

Addestrare una percezione multilayer sul dataset mnist e sulla GPU 0

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

MODELLO CIFAR10

Addestrare resnet a 110-layer su dataset cifar10 con dimensione batch 128 e GPU 0 e 1

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

INCEPTION V3

Per eseguire il benchmark su reti imagenet, utilizzare --benchmark 1 come argomento per train_imagenet.py:

$ cd example/image-classification # in 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

Benchmark

PRESTAZIONI DI MXNET SU SISTEMA CON GPU MULTIPLE

Prestazioni di training di CIFAR10 su Tesla P100
Prestazioni di training di Inception v3 su Tesla P100
Prestazioni di training di MNIST su Tesla P100

Configurazioni del sistema consigliate

Configurazione hardware

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

Configurazione software

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

Crea la tua soluzione GPU ideale oggi stesso.