MXNet acelerado por GPU

Empieza hoy mismo con esta Guía para aplicaciones preparadas para GPU.

MXNet

MXNet es un marco de deep learning de código abierto que permite definir, entrenar e implementar redes neuronales profundas en una amplia variedad de dispositivos, desde infraestructuras en la nube hasta dispositivos móviles. Es altamente escalable, de forma que da acceso a un entrenamiento rápido de modelos y es compatible con un modelo de programación flexible y varios idiomas.

MXNet te permite mezclar la programación simbólica e imperativa para maximizar tanto la eficiencia como la productividad. Está compilado en un programador de dependencias dinámico que paraleliza de forma automática sobre la marcha las operaciones simbólicas e imperativas. Además, una capa gráfica de optimización hace que la ejecución simbólica sea más rápida y más eficiente en cuanto a memoria.

La biblioteca MXNet no necesita instalación y ocupa poco. Se acelera con las GPU NVIDIA Pascal y aprovecha la potencia de varios nodos y GPU, lo que permite un entrenamiento de modelos acelerado.

Instalación

Requisitos del sistema

Puedes ejecutar MXNet en sistemas operativos Ubuntu/Debian, Amazon Linux, macOS y Windows. MXNet puede ejecutarse en Docker y en la nube, como AWS. MXNet también se puede ejecutar en dispositivos incrustados, como una Raspberry Pi con Raspbian. MXNet es compatible actualmente con los lenguajes Python, R, Julia y Scala.

Estas instrucciones son para los usuarios de Ubuntu/Debian. 
La versión de MXNet compatible con GPU tiene los siguientes requisitos:

1. Linux de 64 bits

2. Python 2.x/3.x

3. NVIDIA CUDA® 7.0 o posteriores (es necesario CUDA 8.0 para las GPU Pascal)

4. NVIDIA cuDNN v4.0 (mínimo) o v5.1 (recomendado)

 

También necesitarás capacidad de computación para GPU NVIDIA 3.0 o superior.

Instrucciones de descarga e instalación

A CONTINUACIÓN SE PRESENTA UN BREVE RESUMEN DEL PROCEDIMIENTO DE COMPILACIÓN

1. Instalar CUDA

Para usar MXNet con GPU NVIDIA, el primer paso consiste en instalar el kit de herramientas de CUDA.

2. Instalar cuDNN

Una vez instalado el kit de herramientas de CUDA, descarga la biblioteca cuDNN v5.1 para Linux (deberás registrarte en el Programa de desarrolladores de computación acelerada). 
Cuando se haya descargado, descomprime los archivos y cópialos en el directorio del kit de herramientas de CUDA (por lo general, /usr/local/cuda/)

3. Instalar las dependencias

$ 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 # por ejemplo, mnist, cifar

4. Instalar MXNet

Clona el repositorio del código fuente de MXNet en tu equipo, ejecuta el script de instalación y actualiza las variables de entorno. Además de compilar MXNet, instala el módulo MXNet de Python e incluye la ruta

$ git clone https://github.com/dmlc/mxnet.git --recursive
$ cd mxnet
$ cp make/config.mk .
$ echo "USE_CUDA=1" >> config.mk # para activar 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 .. # para instalar el módulo MXNet de Python
$ export MXNET_HOME=$(pwd)
$ echo "export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH" >> ~/.bashrc
$ source ~/.bashrc

5. Probar la instalación

Comprueba si MXNet está instalado correctamente.

$ python 
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 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.]]

Si no recibes un error de importación, quiere decir que MXNet está listo para Python.

Modelos de entrenamiento

Ahora que has instalado MXNet correctamente, vamos a probarlo con algunos ejemplos de entrenamiento en una y varias GPU.

MODELO MNIST

Ejemplos de clasificación de imágenes:

cd example/image-classification

Entrena una percepción multicapa del conjunto de datos mnist y GPU 0

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

MODELO CIFAR10

Entrena un resnet de 110 capas en el conjunto de datos cifar10 con un tamaño de lote de 128 y GPU 0 y 1

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

INCEPTION V3

Para ejecutar pruebas de referencia en redes imagenet, usa --benchmark 1 como argumento para train_imagenet.py:

$ cd example/image-classification # si estás en 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

Pruebas de referencia

RENDIMIENTO DE MXNET EN SISTEMAS CON VARIAS GPU

Rendimiento de entrenamiento CIFAR10 en Tesla P100
Rendimiento de entrenamiento Inception v3 en Tesla P100
Rendimiento de entrenamiento MNIST en Tesla P100

Configuraciones recomendadas del sistema

Configuración de hardware

PC

Parámetro
Especificaciones

Arquitectura de CPU

x86_64

Memoria del sistema

8-32 GB

CPU

2 sockets de CPU (más de 8
núcleos, ¿más de 2 GHz?)

Modelo de GPU

NVIDIA® TITAN

GPU

1-4

Servidores

Parámetro
Especificaciones

Arquitectura de CPU

x86_64

Memoria del sistema

Más de 32 GB

CPUs/Nodos

2 (más de 8 núcleos, más de 2 GHz)

Modelo de GPU

Tesla®P100

GPU/nodo

1-4

Configuración de software

Pila de software

Parámetro
Versión

SO

CentOS 6.2

Controlador de GPU

375.35 o posterior

Kit de herramientas de CUDA

8.0 o posteriores

Biblioteca cuDNN

v5.0 o posteriores

cuDNN

2016.0.47

Crea tu solución ideal de GPU hoy mismo.