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

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

Caffe2

Caffe2 – это фреймворк для создания, обучения и развертывания нейронных сетей глубокого обучения. Основанный на оригинальном Caffe, фреймворк Caffe2 создан для гибкой организации вычислений.

Он позволяет экспериментировать, используя новые модели и алгоритмы. Caffe2 поставляется вместе с API Python и C++, которые совместимы между собой, что позволяет быстро создавать прототипы и легко их оптимизировать.

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

NVIDIA и Facebook ускоряют фреймворк глубокого обучения Caffe2.

Установка

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

УСТАНОВКА И ЗАПУСК CAFFE2

Caffe2 – это фреймворк глубокого обучения, поддерживающий работу со сверточными и рекуррентными нейронными сетями.

ЗАВИСИМОСТИ

Для работы Caffe2 требуются, такие пакеты, как protobuf, atlas, glog, gtest, limdb, leveldb, snappy, OpenMP, OpenCV, pthread-stubs, cmake, python-protobuf и numpy.

Для ускорения на GPU необходимы CUDA и cuDNN. Поддерживается текущая версия cuDNN (5.1.10).

Пример установки зависимостей на операционную систему 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 (если есть желание также работать в Ipython Notebook)]

УСТАНОВКА БИБЛИОТЕК ДЛЯ ВЫЧИСЛЕНИЙ НА 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*

СБОРКА CAFFE2

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

ТЕСТИРОВАНИЕ CAFFE2

Существуют разные способы проверить, что сборка Caffe2 функционирует корректно. Один из них – использовать примеры из $CAFFE2_ROOT/build/caffe2/binaries, другой – воспользоваться скриптами python, которые находятся в $CAFFE2_ROOT/build/caffe2/python. Все двоичные файлы, оканчивающиеся на “_test” , можно использовать для проверки корректного функционироания сборки Caffe2. Ниже показан результат 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$

Многочисленные скрипты python позволяют легко протестировать работу Caffe2 с различными архитектурами нейронных сетей. Ниже показаны результаты тестирования 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

Если при попытке запустить один из скриптов python вы получаете сообщение об ошибке импорта, добавьте caffe2 в PYTHONPATH или вручную в скрипт. Например:

export PYTHONPATH=$PYTHONPATH:$CAFFE2_ROOT/build

Или вы можете воспользоваться модулем sys в скрипте Python, чтобы добавить путь.

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

Этот скрипт можно использовать для тестирования различных нейронных сетей с разными размерами пакета. Эта команда позволит получить результаты для двух разных размеров пакета, 16 и 32, для начальной конфигурации нейронной сети. Примерный результат использования одного GPU 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

Таблица 1. Результаты, полученные на ускорителе P100.

Batch Size Network (milliseconds/iteration)
  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

Batch Size Network (image/s == iteration/millisecond*Batch Size/iteration*1,000ms/1s)
  AlexNet Overfeat Inception VGGA
16 650 225 244 96
32 799 270 277 106
64 912 299 301 109
128 997 311 312 111

Note, the benchmarks results shown above are for synthetic data only, and does not use images from the ImageNet dataset.

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

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

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

Производительность тренировки AlexNet на GPU с архитектурой Pascal
Производительность тренировки Inception на GPU с архитектурой Pascal
Производительность тренировки OverFeat на GPU с архитектурой Pascal
Производительность тренировки VGG-A на GPU с архитектурой Pascal

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

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

PC

Parameter
Specs

CPU Architecture

x86

System Memory

16GB

CPUs

2 (8+ cores, 2+ GHz)

GPU Model

NVIDIA TITAN Xp

GPUs

1-4

Servers

Parameter
Specs

CPU Architecture

x86

System Memory

Up to 256GB

CPUs/Nodes

2 (8+ cores, 2+ GHz)

GPU Model

NVIDIA® Tesla® P100

GPUs/Node

1-8

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

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

375.26 or newer

CUDA Toolkit

8.0 or newer

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