TensorFlow acelerado por GPU

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

TensorFlow

TensorFlow es una biblioteca de software para el diseño e implementación de cálculos numéricos centrada principalmente en aplicaciones y aprendizaje automático. Esta biblioteca permite describir algoritmos como gráficos de operaciones conectadas que se pueden ejecutar en diferentes plataformas compatibles con GPU, desde dispositivos portátiles hasta equipos de escritorio y servidores de alta gama.

TensorFlow funciona hasta un 50 % más rápido en las últimas GPU Pascal y aprovecha la potencia de varias GPU. Ya puedes entrenar los modelos en solo unas horas en lugar de días.

Instalación

Requisitos del sistema

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

  • Linux de 64 bits
  • Python 2.7
  • CUDA 7.5 (es necesario CUDA 8.0 para las GPU Pascal)
  • cuDNN v5.1 (cuDNN v6 en TF v1.3)

 

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

Instrucciones de descarga e instalación

TensorFlow se distribuye bajo una licencia de código abierto Apache v2 en GitHub. En esta guía, se indican los pasos de compilación e instalación de TensorFlow en un equipo con Ubuntu 16.04 con una o más GPU NVIDIA.

El sitio web de TensorFlow es una fuente de recursos estupenda a la hora de instalar con virtualenv, Docker y desde las fuentes de las últimas revisiones publicadas.

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

1. Actualiza o instala los controladores de NVIDIA.

Instala los controladores de NVIDIA actualizados de tu sistema.

$ sudo add-apt-repository ppa:graphics-drivers/ppa 
$ sudo apt update (vuelve a ejecutarlo si se muestran mensajes de advertencia o error) 
$ sudo apt-get install nvidia- (presiona la tecla TAB para ver la versión más reciente). 375 (no uses la versión 378, ya que podría provocar bucles de inicio de sesión)

Reinicia para aplicar los controladores gráficos.

2. Instala y prueba CUDA.

Para usar TensorFlow con GPU NVIDIA, el primer paso consiste en instalar el kit de herramientas de CUDA siguiendo la documentación oficial. Instrucciones rápidas para CUDA 8.0:

Accede a https://developer.nvidia.com/cuda-downloads

Selecciona Linux, x86_64, Ubuntu, 16.04, deb (local).
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb (este es el archivo deb que has descargado) 
$ sudo apt-get update
$ sudo apt-get install cuda

Si se muestra un mensaje que indica que vuelvas a ejecutar “sudo apt-get update”, ejecútalo y, después, vuelve a ejecutar “sudo apt-get install CUDA”.

$ export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}} 
$ export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Prueba la instalación de CUDA:

$ cd /usr/local/cuda-8.0/samples/5_Simulations/nbody
$ sudo make
$ ./nbody

Si el comando se ejecuta correctamente, se mostrará una ventana nueva donde se ejecutará una simulación de n-body.

3. Instala cuDNN.

Una vez instalado el kit de herramientas de CUDA, descarga la biblioteca cuDNN v5.1 (cuDNN v6 en TF v1.3) para Linux e instálala siguiendo la documentación oficial. (Nota: Deberás registrarte en el Programa de desarrolladores de computación acelerada). Instrucciones rápidas para cuDNN v5.1:

Una vez descargada, accede al directorio que contiene cuDNN:

$ tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

Nota: Las instrucciones anteriores son similares para cuDNN v6.

Ahora que los requisitos previos están instalados, ya podemos compilar e instalar TensorFlow.

4.Prepara las dependencias y los paquetes necesarios de TensorFlow.

$ sudo apt-get install libcupti-dev

5.Instala TensorFlow (versión acelerada por GPU).

$ pip install tensorflow-gpu

6. Verifica la instalación correcta.

Verifica rápidamente la instalación correcta al cerrar todos los terminales abiertos y abriendo uno nuevo.

Cambia el directorio (cd) a cualquiera en el sistema y que no sea el subdirectorio tensorflow desde el que has invocado el comando de configuración.

Invoca a python: escribe “python” en la línea de comandos

Escribe el breve programa siguiente:

$ import tensorflow as tf
$ hello = tf.constant(';Hello, TensorFlow!';)
$ sess = tf.Session()
$ print(sess.run(hello))

Deberías ver “Hello, TensorFlow!”. ¡Enhorabuena! También puedes escribir “print(tf.__version__)” para ver la versión instalada de TensorFlow.

Modelos de entrenamiento

TensorFlow se puede usar mediante API Python o C++, aunque la funcionalidad clave la proporciona un back-end de C++. La API ofrece una interfaz para manipular tensores (matrices N-dimensionales) similar a Numpy e incluye capacidades de diferenciación automática de gradientes de cálculo para usarlas en rutinas de optimización.

La biblioteca contiene una gran cantidad de operaciones incorporadas, como multiplicaciones de matrices, convoluciones, funciones de agrupación y activación, funciones de pérdida, optimizadores y muchas más. Una vez se ha definido el gráfico de cálculos, TensorFlow permite que se ejecute de forma eficiente y sin instalación necesaria en equipos de escritorio, servidores y plataformas móviles.

Para ejecutar los códigos de ejemplo a continuación, cambia primero al directorio TensorFlow 1:

$ cd (tensorflow directory) 
$ git clone -b update-models-1.0 https://github.com/tensorflow/models

El reconocimiento de imágenes es una de las tareas donde destaca el deep learning. El cerebro humano hace que esta tarea parezca sencilla, pero para un ordenador es todo un reto. Sin embargo, durante los últimos años se han sucedido avances importantes hasta el punto de superar a las capacidades humanas. Lo que hace que esto sea posible son las redes neuronales convolucionales (CNN); además, la investigación activa ha demostrado avances constantes en visión artificial, validados por ImageNet, una prueba de referencia académica para la visión artificial.

DEMOSTRACIÓN RÁPIDA CON INCEPTION-V3

Primero, ejecuta los comandos a continuación y comprueba de lo que es capaz la visión artificial:

$ cd (tensorflow directory)/models/tutorials/image/imagenet
$ python classify_image.py

classify_image.py descarga el modelo Inception-v3 entrenado de tensorflow.org cuando el programa se ejecuta por primera vez. Necesitarás unos 200 MB de espacio disponible en el disco duro. El comando anterior clasifica una imagen proporcionada de un oso panda (en /tmp/imagenet/cropped_panda.jpg) y una ejecución correcta del modelo devuelve resultados con este aspecto:

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89107)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00779)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00296)
custard apple (score = 0.00147)
earthstar (score = 0.00117)

También puedes probar con otras imágenes JPEG si usas el argumento de archivo --image_file:

$ python classify_image.py --image_file   (por ejemplo, “python classify_image.py --image_file /tmp/imagenet/cropped_pand.jpg”) 
(por ejemplo, “python classify_image.py --image_file /tmp/imagenet/cropped_pand.jpg”)

CIFAR-10

La clasificación CIFAR-10 es una tarea de prueba de referencia habitual en el aprendizaje automático. La tarea consiste en clasificar imágenes RGB de 32 × 32 píxeles en diez categorías (avión, automóvil, pájaro, gato, ciervo, perro, rana, caballo, barco y camión).

El modelo utilizado referencia a la arquitectura descrita por Alex Krizhevsky con algunas diferencias en las capas superiores. Se trata de una arquitectura de varias capas que consiste en alternar convoluciones y no lineales, seguidas de capas conectadas completamente que llevan a un clasificador softmax.

Primero, vamos a entrenar el modelo:

$ cd (tensorflow directory)/models/tutorials/image/cifar10
$ python cifar10_train.py

Si se completa correctamente, verás algo similar a esto:

Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
…… 
2017-03-06 14:59:09.089282: step 10230, loss = 2.12 (1809.1 examples/sec; 0.071 sec/batch)
2017-03-06 14:59:09.760439: step 10240, loss = 2.12 (1902.4 examples/sec; 0.067 sec/batch)
2017-03-06 14:59:10.417867: step 10250, loss = 2.02 (1931.8 examples/sec; 0.066 sec/batch)
2017-03-06 14:59:11.097919: step 10260, loss = 2.04 (1900.3 examples/sec; 0.067 sec/batch)
2017-03-06 14:59:11.754801: step 10270, loss = 2.05 (1919.6 examples/sec; 0.067 sec/batch)
2017-03-06 14:59:12.416152: step 10280, loss = 2.08 (1942.0 examples/sec; 0.066 sec/batch)
……

Enhorabuena, has empezado a entrenar tu primer modelo.

Después del entrenamiento, puedes evaluar el rendimiento del modelo entrenado con el script cifar10_eval.py. Calcula la precisión en 1: de la frecuencia con que la mejor predicción coincide con la etiqueta verdadera de la imagen.

$ python cifar10_eval.py

Si se completa correctamente, verás algo similar a esto:

2017-03-06 15:34:27.604924: precision @ 1 = 0.499

USAR INCEPTION V3 PREENTRENADO EN UN CONJUNTO DE DATOS NUEVO

A continuación, volvamos a Inception v3 de Google y probemos un caso de uso más avanzado. Inception v3 es una red convolucional innovadora diseñada para la clasificación de imágenes. El entrenamiento desde cero de este modelo es un proceso muy intenso y puede tardar desde varios días a semanas. Un método alternativo es descargar el modelo entrenado previamente y volverlo a entrenar en otro conjunto de datos. Vamos a guiarte en este proceso con el conjunto de datos de flores.

Descarga el conjunto de datos de flores:

$ cd ~
$ curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
$ tar xzf flower_photos.tgz
$ cd (directorio tensorflow donde clonas el git desde el maestro)
$ python configure.py

Nota: Puedes dejar la mayoría de las opciones como están. Si tienes instaladas versiones diferentes de las recomendadas predeterminadas por el configurador, escribe la versión correcta de cuDNN o CUDA.

$ python tensorflow/examples/image_retraining/retrain.py --image_dir ~/flower_photos

Nota:

  • Si se muestra el mensaje “...libstdc++.so.6: version `CXXABI_1.3.8'; not found…”, prueba cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/ /anaconda3/lib/ Si se muestra el mensaje “...import error: no module named autograd…”, prueba pip install autograd.
  • Utilizando el modelo reentrenado:

Utilizando el modelo reentrenado:

$ bazel build tensorflow/examples/image_retraining:label_image && \
bazel-bin/tensorflow/examples/image_retraining/label_image \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--output_layer=final_result:0 \
--image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg

El script de evaluación generará resultados como los que aparecen a continuación, lo que te proporciona la precisión de la clasificación:

daisy (score = 0.99735)
sunflowers (score = 0.00193)
dandelion (score = 0.00059)
tulips (score = 0.00009)
roses (score = 0.00004)

Para obtener más información sobre el uso del modelo Inception v3 reentrenado, consulta el enlace de tutorial.

Pruebas de referencia

Cada uno de los modelos descritos en la sección anterior ofrecen como resultado un tiempo/minilote de ejecución o una velocidad media en ejemplos por segundo, la cual puede convertirse a tiempo/minilote dividiendo por el tamaño del lote. Los gráficos muestran el rendimiento esperado en sistemas con GPU NVIDIA.

data-center-gpu-ready-app-tensorflow-chart-cifar10-843-u

ENTRENAMIENTO DE IMÁGENES POR SEGUNDO PARA
INCEPTION V3 EN VARIAS GPU

El modelo Inception v3 también es compatible con el entrenamiento en varias GPU. El gráfico a continuación muestra el rendimiento esperado en una, dos y cuatro GPU Tesla por nodo.

Prueba de referencia de TensorFlow Inception

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 (Pascal)

GPU

1-2

Servidores

Parámetro
Especificaciones

Arquitectura de CPU

x86_64

Memoria del sistema

32 GB

CPUs/Nodo

1-2

Modelo de GPU

Tesla® P40 y P100

GPU/nodo

1-4

Configuración de software

Pila de software

Parámetro
Versión

SO

Ubuntu 14.04

Controlador de GPU

352.68 o posterior

Kit de herramientas de CUDA

8.0 o posteriores

Biblioteca cuDNN

v5.0 o posteriores

Python

2.7

Crea tu solución ideal de GPU hoy mismo.