Фреймворк Caffe с ускорением на GPU

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

Caffe

Caffe – это фреймворк глубокого обучения, для которого характерны простота использования, высокая скорость и модульность. Этот популярный фреймворк для машинного зрения был разработан в Berkeley Vision and Learning Center (BVLC) при участии других независимых разработчиков. Caffe используется в исследовательских проектах, проводимых университетами и начинающими компаниями, а также в крупномасштабных промышленных приложениях в области машинного зрения, распознавания речи и медьтимедийных данных.

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

Установка

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

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

  • 64-битная ОС Linux (настоящее руководство предназначено для ОС Ubuntu 14.04)
  • NVIDIA® CUDA® 7.5 (для GPU с архитектурой NVIDIA Pascal требуется CUDA 8.0)
  • cuDNN версии 5.1
  • Вам потребуется NVIDIA GPU с вычислительной возможностью не ниже 3.0.

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

1. Установите CUDA

Для использования Caffe на NVIDIA GPU первым делом установите CUDA Toolkit.

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

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

После скачивания библиотеки разархивируйте файлы и скопируйте их в директорию CUDA Toolkit (/usr/local/cuda/):

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

3. Установите зависимости

Caffe имеет зависимости от нескольких библиотек, которые должны быть доступны в вашей системе через диспетчер пакетов.

В ОС Ubuntu 14.04 следующие команды позволят установить необходимые библиотеки:

$ 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. Установите NCCL

NVIDIA NCCL требуется для запуска Caffe на нескольких GPU. Установка NCCL выполняется следующими командами:

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

$ cd nccl

$ sudo make install -j4

Библиотеки и заголовочные файлы NCCL будут установлены в /usr/local/lib and /usr/local/include.

5. Установите Caffe

Рекомендуем установить последнюю версию фреймворка Caffe, которую можно скачать на https://github.com/NVIDIA/caffe/releases . На момент публикации настоящих инструкций последней версией является 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

Откройте в текстовом редакторе Makefile.config и внесите следующие изменения:

Раскомментируйте строку USE_CUDNN := 1. Это обеспечит ускорение cuDNN.

Раскомментируйте ускорение USE_NCCL := 1. Это запустит библиотеку NCCL, которая необходима для запуска Caffe на нескольких GPU.

Сохраните и закройте файл. Теперь вы готовы к компиляции Caffe.

$ make all -j4

После выполнения команды двоичные файлы Caffe будут доступны в build/tools/caffe.

ПОДГОТОВКА БАЗЫ ДАННЫХ ИЗОБРАЖЕНИЙ

Для тестирования производительности Caffe требуется база данных изображений. Caffe включает в себя несколько моделей нейросетей, которые настроены на использование изображений ILSVRC12 (“ImageNet”). Скачать изображения можно по ссылке http://image-net.org/download-images (необходимо создать учетную запись и указать согласие с условиями использования). Завершив скачивание и разархивирование файлов в системе, следуйте дальнейшим инструкциям. Изображения будут сохранены на вашем диске в таком виде:

/path/to/imagenet/train/n01440764/n01440764_10026.JPEG

/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG

6. Скачайте вспомогательные данные

$ ./data/ilsvrc12/get_ilsvrc_aux.sh

7. Создайте базу данных

Откройте в текстовом редакторе файл examples/imagenet/create_imagenet.sh и внесите следующие изменения:

Измените переменные TRAIN_DATA_ROOT и VAL_DATA_ROOT на директорию, где вы распаковали изображения.

Задайте функцию RESIZE=true, чтобы изменить размер изображений перед добавлением в базу данных.

Сохраните и закройте файл. Теперь создайте базу данных изображений с помощью следующих команд:

$ ./examples/imagenet/create_imagenet.sh

Затем создайте требуемый mean файл:

$ ./examples/imagenet/make_imagenet_mean.sh

Модели нейросетей для тренировки

ALEXNET (РАЗМЕР ПАКЕТА = 256)

По умолчанию, модель настроена на полное обучение нейронной сети, на что может уйти от нескольких часов до нескольких дней. Чтобы протестировать производительность, мы ограничим число итераций до 1000. Откройте в текстовом редакторе файл models/bvlc_alexnet/solver.prototxt и внесите следующие изменения:

max_iter: 1000

Сохраните и закройте файл. Теперь вы можете приступить к обучению нейронной сети:

$ 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
……….

Вы можете проводить обучение нейронной сети на нескольких GPU, указав больше ID устройств (например, 0, 1, 2, 3) или “-gpu all”, чтобы использовать все доступные в системе GPU.

GOOGLENET (РАЗМЕР ПАКЕТА = 32)

По умолчанию, модель настроена на полное обучение нейронной сети, на что может уйти от нескольких часов до нескольких дней. Чтобы протестировать производительность, мы ограничим число итераций до 1000. Откройте в текстовом редакторе файл models/bvlc_googlenet/solver.prototxt и внесите следующие изменения:

max_iter: 1000

Сохраните и закройте файл. Теперь вы можете приступить к обучению нейронной сети:

$ 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
……….

Вы можете проводить обучение нейронной сети на нескольких GPU, указав больше ID устройств (например, 0, 1, 2, 3) или “-gpu all”, чтобы использовать все доступные в системе GPU.

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

ПРОИЗВОДИТЕЛЬНОСТЬ ОБУЧЕНИЯ GOOGLENET НА ИЗОБРАЖЕНИЯХ

GoogLeNet – более новая модель глубокого обучения, которая использует более глубокую нейронную сеть для более точной классификации изображений.

Производительность тренировки класификации изображений
Производительность Caffe на нескольких GPU в одном узле

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

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

PC

Parameter
Specs

CPU Architecture

x86_64

System Memory

8-32GB

CPUs

1

GPU Model

NVIDIA® TITAN X

GPUs

1-2

Servers

Parameter
Specs

CPU Architecture

x86_64

System Memory

32 GB

CPUs/Nodes

1-2

GPU Model

Tesla® M40
Tesla® P100

GPUs/Node

1-4

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

Software stack

Parameter
Version

OS

Ubuntu 14.04

GPU Driver

367.27 or newer

CUDA Toolkit

8.0

cuDNN Library

v5.1

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