Caffe acelerado por GPU

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

Caffe

Caffe es un marco de deep learning que ofrece facilidad de expresión, velocidad y modularidad. Este popular marco de visión artificial ha sido desarrollado por el Berkeley Vision and Learning Center (BVLC) y distintos miembros de la comunidad. Caffe sirve a distintos proyectos de investigación académica, prototipos de empresas emergentes y aplicaciones industriales a gran escala de visión, habla y multimedia.

Caffe funciona hasta un 65 % más rápido en 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.

Instalación

Requisitos del sistema

La versión de Caffe compatible con GPU tiene los siguientes requisitos:

Instrucciones de descarga e instalación

1. Instalar CUDA

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

2. Instalar cuDNN

Después de instalar 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).

Una vez finalizada la descarga, descomprime los archivos y cópialos en el directorio del Toolkit de CIDA (por lo general, /usr/local/cuda/):

$ sudo tar -xvf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local

3. Instalar las dependencias

Caffe depende de distintas bibliotecas que deben estar disponibles en el administrador de paquetes de tu sistema.

En Ubuntu 14.04, utiliza los siguientes comandos para instalar las bibliotecas necesarias:

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev git

$ sudo apt-get install --no-install-recommends libboost-all-dev

4.Instalar NCCL

NVIDIA NCCL es necesario para poder ejecutar Caffe en más de una GPU. NCCL se puede instalar con los siguientes comandos:

$ git clone https://github.com/NVIDIA/nccl.git

$ cd nccl

$ sudo make install -j4

Las bibliotecas y los encabezados NCCL se instlarán en /usr/local/lib and /usr/local/include.

5.Instalar Caffe

Recomendamos instalar la versión más reciente de Caffe de la bifurcación de NVIDIA, que está disponible en https://github.com/NVIDIA/caffe/releases. A fecha de escritura de este documento, la versión más reciente es 0.15.9.

$ wget https://github.com/NVIDIA/caffe/archive/v0.15.9.tar.gz

$ tar -zxf v0.15.9.tar.gz

$ cd caffe-0.15.9

$ cp Makefile.config.example Makefile.config

Abre el nuevo Makefile.config en un editor de texto y aplica los siguientes cambios:

Quita la marca de comentario de la línea USE_CUDNN := 1. Esto habilita la aceleración cuDNN.

Quita la marca de comentario de la línea USE_NCCL := 1. Esto habilita NCCL, que es necesario para ejecutar Caffe en varias GPU.

Guarda y cierra el archivo. Ya estás listo para compilar Caffe.

$ make all -j4

Cuando se complete el comando, el binario de Caffe estará disponible en build/tools/caffe.

PREPARAR UNA BASE DE DATOS DE IMÁGENES

Es necesaria una base de datos de imágenes como entrada para probar el rendimiento de entrenamiento de Caffe. Caffe cuenta con modelos preparados para usar imágenes del desafío ILSVRC12 (“ImageNet”). Los archivos de imagen originales se pueden descargar desde http://image-net.org/download-images (tendrás que crear una cuenta y aceptar los términos). Cuando hayas descargado y desempaquetado las imágenes originales en tu sistema, continúa con los pasos siguientes. Se da por hecho que las imágenes originales se almacenan en el disco de la siguiente manera:

/ruta/a/imagenet/train/n01440764/n01440764_10026.JPEG

/ruta/a/imagenet/val/ILSVRC2012_val_00000001.JPEG

6. Descargar los datos auxiliares

$ ./data/ilsvrc12/get_ilsvrc_aux.sh

7. Crear la base de datos

Abre el archivo examples/imagenet/create_imagenet.sh en un editor de texto y aplica los siguientes cambios:

Cambia las variables TRAIN_DATA_ROOT y VAL_DATA_ROOT a la ruta de acceso de las imágenes originales desempaquetadas.

Establece RESIZE=true de forma que el tamaño de las imágenes se adapte correctamente antes de añadirse a la base de datos.

Guarda y cierra el archivo. Ya puedes crear las bases de datos de imágenes con este comando:

$ ./examples/imagenet/create_imagenet.sh

A continuación, crea el archivo de imagen necesario con:

$ ./examples/imagenet/make_imagenet_mean.sh

Modelos de entrenamiento

ALEXNET (TAMAÑO DE LOTE DE 256)

De forma predeterminada, el modelo está configurado para entrenar toda la red, lo que puede llevar de horas a días. A efectos de pruebas de referencia, limitaremos el número de iteraciones a 1000. Abre el archivo models/bvlc_alexnet/solver.prototxt en un editor de texto y haz el siguiente cambio:

max_iter: 1000

Guarda y cierra el archivo. Ya puedes entrenar a la red:

$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib:$LD_LIBRARY_PATH

$ ./build/tools/caffe train –solver=models/bvlc_alexnet/solver.prototxt –gpu 0

……….
I0817 13:29:57.535207 30840 solver.cpp:242] Iteration 160 (1.57876 iter/s, 12.6682s/20 iter), loss = 6.90907
I0817 13:29:57.535292 30840 solver.cpp:261] Train net output #0: loss = 6.90907 (* 1 = 6.90907 loss)
I0817 13:29:57.535312 30840 sgd_solver.cpp:106] Iteration 160, lr = 0.01
I0817 13:30:10.195734 30840 solver.cpp:242] Iteration 180 (1.57974 iter/s, 12.6603s/20 iter), loss = 6.90196
I0817 13:30:10.195816 30840 solver.cpp:261] Train net output #0: loss = 6.90196 (* 1 = 6.90196 loss)
I0817 13:30:10.195835 30840 sgd_solver.cpp:106] Iteration 180, lr = 0.01
I0817 13:30:22.852818 30840 solver.cpp:242] Iteration 200 (1.58017 iter/s, 12.6568s/20 iter), loss = 6.92144
……….

Si quieres usar varias GPU para el entrenamiento, especifica varios ID de dispositivo (por ejemplo, 0,1,2,3), o bien especifica “-gpu all” para usar todas las GPU disponibles en el sistema.

GOOGLENET (TAMAÑO DE LOTE DE 32)

De forma predeterminada, el modelo está configurado para entrenar toda la red, lo que puede llevar de horas a días. A efectos de pruebas de referencia, limitaremos el número de iteraciones a 1000. Abre el archivo models/bvlc_googlenet/solver.prototxt en un editor de texto y haz el siguiente cambio:

max_iter: 1000

Guarda y cierra el archivo. Ya puedes entrenar a la red:

$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib:$LD_LIBRARY_PATH

$ ./build/tools/caffe train –solver=models/bvlc_googlenet/solver.prototxt –gpu 0

……….
I0817 13:33:08.056823 30959 solver.cpp:242] Iteration 80 (7.96223 iter/s, 5.02372s/40 iter), loss = 11.1401
I0817 13:33:08.056893 30959 solver.cpp:261] Train net output #0: loss1/loss1 = 6.85843 (* 0.3 = 2.05753 loss)
I0817 13:33:08.056910 30959 solver.cpp:261] Train net output #1: loss2/loss1 = 7.00557 (* 0.3 = 2.10167 loss)
I0817 13:33:08.056921 30959 solver.cpp:261] Train net output #2: loss3/loss3 = 6.82249 (* 1 = 6.82249 loss)
I0817 13:33:08.056934 30959 sgd_solver.cpp:106] Iteration 80, lr = 0.01
I0817 13:33:13.074957 30959 solver.cpp:242] Iteration 120 (7.97133 iter/s, 5.01798s/40 iter), loss = 11.1306
I0817 13:33:13.075026 30959 solver.cpp:261] Train net output #0: loss1/loss1 = 6.91996 (* 0.3 = 2.07599 loss)
I0817 13:33:13.075042 30959 solver.cpp:261] Train net output #1: loss2/loss1 = 6.91151 (* 0.3 = 2.07345 loss)
I0817 13:33:13.075052 30959 solver.cpp:261] Train net output #2: loss3/loss3 = 6.95206 (* 1 = 6.95206 loss)
I0817 13:33:13.075065 30959 sgd_solver.cpp:106] Iteration 120, lr = 0.01
I0817 13:33:18.099795 30959 solver.cpp:242] Iteration 160 (7.96068 iter/s, 5.0247s/40 iter), loss = 11.1211
……….

Si quieres usar varias GPU para el entrenamiento, especifica varios ID de dispositivo (por ejemplo, 0,1,2,3), o bien especifica “-gpu all” para usar todas las GPU disponibles en el sistema.

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 clasificación de imágenes
Rendimiento de Caffe en varias GPU por nodo

Configuraciones recomendadas del sistema

Configuración de hardware

PC

Parámetro
Especificaciones

Arquitectura de CPU

x86_64

Memoria del sistema

8-32 GB

CPU

1

Modelo de GPU

NVIDIA® TITAN X

GPU

1-2

Servidores

Parámetro
Especificaciones

Arquitectura de CPU

x86_64

Memoria del sistema

32 GB

CPUs/Nodos

1-2

Modelo de GPU

Tesla® M40
Tesla® P100

GPU/nodo

1-4

Configuración de software

Pila de software

Parámetro
Versión

SO

Ubuntu 14.04

Controlador de GPU

367.27 o posteriores

Kit de herramientas de CUDA

8.0

Biblioteca cuDNN

v5.1

Crea tu solución ideal de GPU hoy mismo.