Caffe2 acelerado
por GPU

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

Caffe2

Caffe2 es un marco de deep learning que facilita resultados simples y flexibles. Caffe2 se basa en el marco original Caffe y está diseñado para facilitar la expresión, velocidad y modularidad, lo que permite organizar los sistemas de cálculo con mayor flexibilidad.

El objetivo de Caffe2 es ofrecer un método sencillo de experimentar con deep learning al aprovechar las contribuciones realizadas por la comunidad en forma de nuevos modelos y algoritmos. Caffe2 incluye las API nativas de Python y C++, que funcionan alternativamente para facilitarte la fase de pruebas y posponer la optimización.

Caffe2 se acelera con las últimas GPU NVIDIA Pascal™ y puede aprovechar la potencia de varias GPU en un solo nodo. Ya puedes entrenar modelos en solo unas horas, en lugar de días.

NVIDIA y Facebook se asocian para acelerar el marco de deep learning de Caffe2.

Instalación

Instrucciones de descarga e instalación

INSTALACIÓN Y EJECUCIÓN DE CAFFE2

Caffe2 es un entorno de deep learning compatible con redes convolucionales y recurrentes.

DEPENDENCIAS DEL MARCO

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

Para la aceleración por GPU, se necesitan CUDA y cuDNN. La versión actual de cuDNN es compatible (5.1.10).

A continuación, se muestra el proceso para instalar las dependencias en un sistema con Ubuntu 16.04.

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 (por si alguien quiere usar también IPython Notebooks)]

INSTALAR LAS BIBLIOTECAS DE 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*

COMPILAR CAFFE2

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

PROBAR CAFFE2

Existen diferentes maneras de verificar que la compilación de Caffe2 funciona correctamente: una es usar los binarios de ejemplo ubicados en $CAFFE2_ROOT/build/caffe2/binaries y la otra es usar los scripts de Python en $CAFFE2_ROOT/build/caffe2/python. Se pueden usar los binarios que acaben en “_test” para comprobar si la versión de Caffe2 funciona correctamente. A continuación, se muestra un ejemplo del resultado de 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$

Hay numerosos scripts de Python que permiten probar fácilmente Caffe2 con distintas arquitecturas de redes neuronales. A continuación, se muestran los resultados de ejemplo de 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

Si obtienes un error de importación al intentar ejecutar cualquiera de los scripts de Python, agrega caffe2 a PYTHONPATH, o bien agrégalo de forma manual en el propio script. Las líneas de ejemplo del terminal son

export PYTHONPATH=$PYTHONPATH:$CAFFE2_ROOT/build

En el script de Python, también se puede usar el módulo sys de Python para agregar la ruta.

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

Este script también se puede usar para probar varios tamaños de lotes y redes distintas de AlexNet. Este comando ofrecerá resultados para dos tamaños de lotes (16 y 32) con la configuración de red original. A continuación se muestra un ejemplo del resultado con una sola GPU en 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

Tabla 1. Resultados de ejemplo obtenidos con P100e.

Tamaño del lote Red (milisegundos/iteración)
  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

Tamaño del lote Red (imagen/s == iteración / milisegundo * Tamaño de lote / iteración * 1000 ms/1 s)
  AlexNet OverFeat Inception VGGA
16 650 225 244 96
32 799 270 277 106
64 912 299 301 109
128 997 311 312 111

Los resultados de las pruebas de referencia anteriores se corresponden únicamente a datos sintéticos, no usan imágenes del conjunto de datos de ImageNet.

Pruebas de referencia

RENDIMIENTO DE ENTRENAMIENTO DE IMÁGENES EN GOOGLENET

GoogLeNet es un modelo nuevo de deep learning que aprovecha las ventajas de una red más profunda y extensa para mejorar la precisión de la clasificación de imágenes.

Rendimiento de entrenamiento de AlexNet en GPU Pascal
Rendimiento de entrenamiento de Inception en GPU Pascal
Rendimiento de entrenamiento de OverFeat en GPU Pascal
Rendimiento de entrenamiento de VGG-A en GPU Pascal

Configuraciones recomendadas del sistema

Configuración de hardware

PC

Parámetro
Especificaciones

Arquitectura de CPU

x86

Memoria del sistema

16 GB

CPU

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

Modelo de GPU

NVIDIA TITAN Xp

GPU

1-4

Servidores

Parámetro
Especificaciones

Arquitectura de CPU

x86

Memoria del sistema

Hasta 256 GB

CPUs/Nodos

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

Modelo de GPU

NVIDIA® Tesla® P100

GPU/nodo

1-8

Configuración de software

Pila de software

Parámetro
Versión

SO

CentOS 6.2

Controlador de GPU

375.26 o posterior

Kit de herramientas de CUDA

8.0 o posteriores

Crea tu solución ideal de GPU hoy mismo.