TensorFlow с ускорением на GPU

Ознакомьтесь с Руководством для быстрого запуска и начните работу.

TensorFlow

TensorFlow – это программная библиотека для проектирования и развертывания численных вычислений с основным упором на приложения в области машинного обучения. Библиотека позволяет описывать алгоритмы как графы взаимодействующих операций, которые могут выполняться на различных GPU-платформах, начиная от портативных устройств и десктопов и заканчивая высокопроизводительными серверами.

TensorFlow работает до 50% быстрее на самых современных графических процессорах с архитектурой Pascal и масштабируется на нескольких GPU. Теперь обучение модели нейросети можно провести всего за несколько часов, а не дней.

Установка

Системные требования

Системные требования для TensorFlow с поддержкой ускорения на GPU:

  • 64-битная ОС Linux
  • Python 2.7
  • CUDA 7.5 (для GPU с архитектурой Pascal требуется CUDA 8.0)
  • cuDNN версии 5.1 (cuDNN v6 при работе с TF v1.3)

 

Вам потребуется NVIDIA GPU с вычислительной возможностью не ниже  3.0.

Инструкции по загрузке и установке

TensorFlow распространяется под лицензией Apache v2 с открытым исходным кодом на  GitHub. Настоящее руководство расскажет о сборке и установке TensorFlow на систему с ОС Ubuntu 16.04, оснащенную одним или несколькими графическими процессорами NVIDIA.

Официальный вебсайт TensorFlow  – отличный ресурс, где представлены материалы по установке с использованием virtualenv, Docker, а также самых последних версий библиотеки.

КРАТКОЕ ОПИСАНИЕ ПРОЦЕССА КОМПИЛЯЦИИ

1. Обновите/установите драйверы NVIDIA

Установите самые последние  драйверы NVIDIA  для вашей системы.

$ sudo add-apt-repository ppa:graphics-drivers/ppa 
$ sudo apt update (перезапустите при появлении сообщений об ошибке) 
$ sudo apt-get install nvidia- (нажмите tab, чтобы просмотреть последние версии драйверов). 375 (не используйте драйверы семейства 378, это может привести к проблемам со входом в систему)

Перезагрузите систему.

2. Установите и проверьте CUDA

Для использования TensorFlow на NVIDIA GPU первым делом установите  CUDA Toolkit . Чтобы получить быструю справку по CUDA 8.0:

Зайдите на  https://developer.nvidia.com/cuda-downloads

Выберите Linux, x86_64, Ubuntu, 16.04, deb.
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb (это deb-файл, который вы скачали) 
$ sudo apt-get update
$ sudo apt-get install cuda

Если вы столкнулись с сообщением, предлагающим повторно выполнить обновление sudo apt-get update, сделайте это, а потом повторно запустите 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}}

Проверьте установку CUDA:

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

Если установка прошла успешно, появится новое окно с запуском симуляции n-body.

3. Установите cuDNN

После установки CUDA Toolkit скачайте и установите  библиотеку cuDNN v5.1 (cuDNN v6 для TF v1.3) для Linux. (Обратите внимание, что вам потребуется зарегистрироваться в программе  Accelerated Computing Developer Program). Чтобы получить быструю справку по cuDNN v5.1:

После скачивания откройте директорию, где находится 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*

Обратите внимание, что все вышепречисленные шаги равносильны и для cuDNN v6.

Теперь, когда все прерквизиты установлены, можно приступить к сборке и установке TensorFlow.

4. Подготовьте зависимости и необходимые пакеты для TensorFlow

$ sudo apt-get install libcupti-dev

5. Установите TensorFlow (версия с поддержкой ускорения на GPU)

$ pip install tensorflow-gpu

6. Убедитесь, что установка прошла успешно

Чтобы быстро проверить, пошла ли установка успешно, закройте все открытые терминалы и откройте новый терминал.

Измените каталог (cd) на любой каталог в ввашей системе, отличный от подкаталога tensorflow, из которого вы вызывали команду configure.

Введите в командную строку python: type python 

Введите следующую короткую программу:

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

Вы должны получить сообщение “Hello, TensorFlow!”. Поздравляем! Чтобы посмотреть установленную версию TensorFlow, введите “print(tf.__version__)”.

Модели нейросетей

TensorFlow можно использовать с помощью API-интерфейсов Python или C++, в то время как основная функциональность библиотеки обеспечивается функциями C++ backend. API предоставляет интерфейс для управления тензорами (N-мерные массивы) подобно Numpy и включает в себя возможности автоматического дифференцирования для вычисления градиентов для использования в подпрограммах оптимизации.

Библиотека содержит большое количество встроенных операций, включая матричные умножения, свертки, функции объединения и активации, функции потерь, оптимизаторы и многое другое. Как только граф вычислений определен, TensorFlow позволяет эффективно и портативно выполнять его на настольных, серверных и мобильных платформах.

Чтобы запустить приведенные ниже примеры кода, сначала перейдите в каталог TensorFlow 1:

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

Распознавание изображений – это одна из задач, с которыми глубокое обучение отлично справляется. В то время как человеческий мозг с легкостью выполняет эту задачу, для компьютера она является сложной. Однако за последние несколько лет достигнуты значительные успехи по превосходству человеческих возможностей. Это стало возможно благодаря сверточным нейронным сетям (CNN), и современные исследования демонстрируют устойчивые достижения в области машинного зрения, которые подтверждает  ImageNet , официальный эталон в этой сфере.

ДЕМО С ИСПОЛЬЗОВАНИЕМ INCEPTION-V3

Для начала запустим следующие команды и посмотрим, на что способно машинное зрение:

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

Во время первого запуска программы classify_image.py скачивает натренированную модель  Inception-v3  из tensorflow.org. Вам потребуется около 200 МБ свободного места на жестком диске. Вышеприведенная команда будет классифицировать предоставленный образ панды-медведя (найденный в /tmp/imagenet/cropped_panda.jpg), и успешная работа нейросети обеспечит вот такие результаты:

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)

Вы также можете протестировать другие JPEG изображения, воспользовавшись аргументом --image_file:

$ python classify_image.py --image_file <path to the JPEG file> 
(e.g. python classify_image.py --image_file /tmp/imagenet/cropped_pand.jpg)

CIFAR-10

Классификация CIFAR-10 – эталонный тест в машинном обучении. Задача состоит в том, чтобы классифицировать 32x32 пиксельные RGB изображения по 10 категориям (самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль и грузовик).

Используемая модель нейросети основана на архитектуре, описанной Алексом Крижевски (Alex Krizhevsky), с некоторыми изменениями в верхних слоях. Это многослойная архитектура, состоящая из чередующихся сверток и нелинейностей, за которыми следуют полносвязные слои и слой с функцией softmax.

Для начала попробуем натренировать модель:

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

В случае успеха вы получите нечто подобное:

Заполнение очереди 20000 изображениями CIFAR перед началом обучения. Это займет несколько минут.
…… 
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)
……

Поздравляем, вы только что начали тренировать свою первую модель нейросети!

После тренировки вы можете оценить, насколько хорошо обученная модель работает, используя скрипт cifar10_eval.py. Он вычисляет, как часто верхнее предсказание соответствует истинной метке изображения.

$ python cifar10_eval.py

В случае успеха вы увидите нечто подобное:

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

ИСПОЛЬЗОВАНИЕ ПРЕДВАРИТЕЛЬНО НАТРЕНИРОВАННОЙ НЕЙРОСЕТИ INCEPTION V3 НА НОВОМ НАБОРЕ ДАННЫХ

А теперь вернемся к Google Inception v3 и используем более глубокий сценарий. Inception v3 - это современная сверточная нейросеть, предназначенная для классификации изображений. Обучение этой модели с нуля может занять от нескольких дней до нескольких недель. Альтернативный подход заключается в загрузке предварительно натренированной модели и повторной тренировке ее на другом наборе данных. Мы расскажем, как это сделать на примере таблицы цветов.

Скачайте таблицу цветов:

$ cd ~
$ curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
$ tar xzf flower_photos.tgz
$ cd (tensorflow directory where you git clone from master)
$ python configure.py

Обратите внимание, что вы можете оставить большинство параметров по умолчанию. Введите правильный номер версии cuDNN и/или CUDA, если у вас установлены разные версии из предложенного по умолчанию конфигуратора.

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

Обратите внимание:

  • Если вы сталкиваетесь с сообщением “...libstdc++.so.6: version `CXXABI_1.3.8' not found…”, попробуйте cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/ /anaconda3/lib/
  • Если вы сталкиваетесь с сообщением “...import error: no module named autograd…”, попробуйте pip install autograd.

Использование натренированной модели нейросети:

$ 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

Скрипт оценки покажет результаты с указанием точности классификации:

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

Подробнее об использовании натренированной модели нейросети Inception v3 читайте по ссылке.

Тесты производительности

Каждая из моделей нейросетей, описанных в предыдущем разделе, показывает либо время выполнения на минипакет, либо среднюю скорость в примерах на секунду, что, путем деления на размер пакета, можно преобразовать во время на минимпакет. Таблицв демонстрирует ожидаемую производительность на системах с NVIDIA GPU.

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

ТРЕНИРОВКА
INCEPTION V3 НА НЕСКОЛЬКИХ GPU

Модель нейросети Inception v3 также поддерживает тренировку на нескольких GPU. Таблица ниже демонстрирует ожидаемую производительность на 1,2 или 4 графических процессорах Tesla на узел.

Тесты производительности TensorFlow для Inception

Рекомендованные системные конфигурации

Конфигурация аппаратного обеспечения

PC

Parameter
Specs

CPU Architecture

x86_64

System Memory

8-32GB

CPUs

1

GPU Model

NVIDIA®TITAN X (Pascal)

GPUs

1-2

Servers

Parameter
Specs

CPU Architecture

x86_64

System Memory

32 GB

CPUs/Node

1-2

GPU Model

Tesla® P40 and P100

GPUs/Node

1-4

Конфигурация программного обеспечения

Software stack

Parameter
Version

OS

Unbuntu 14.04

GPU Driver

352.68 or newer

CUDA Toolkit

8.0 or newer

cuDNN Library

v5.0 or newer

Python

2.7

Соберите свою идеальную систему прямо сегодня