highload на gpu, опыт vinci / Олег Илларионов (ВКонтакте)

Post on 16-Apr-2017

306 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Highload на GPU, опыт Vinci Олег Илларионов HL 2016

24часа2недели

Первая версия

Релиз

3 000 0001 000 000

Фотографий обработано в день запуска

Уникальных пользователей за месяц

Machine learning is like highschool sex. Everyone says they do it, nobody really does, and no one knows what it actually is.

Artistic style

Artistic style

Artistic style

Artistic style

NodeJS / GO

TorchLua / Turbo

Стек технологий

Кастомный супервизор

Ubuntu / DebianCUDA + CUDNN

Стек технологий

Железо

CPU VS GPU

Железо

Оптимизация под железоУзкие и более длинные нейросети

CPU:

Доступно значительно больше памятиПроще разработка / ОтладкаПортируемость

Железо

ПроизодительностьCuda / OpenCL

GPU:

Гигантское преимущество для обученияСильно ниже отказоустойчивость

Железо

Аренда сервера:

Amazon, NVIDIA K80 ~ $670 в месяцAmazon, NVIDIA GRID ~ $484 в месяцDedicated, NVIDIA 1080 $250-$500 в месяц

Железо

NVIDIA GTX 1080

VS

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K80

Железо

NVIDIA GTX 1080

VS

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K807 TF 8.74TF

9 TF 11TF

Железо

NVIDIA GTX 1080VS

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K807 TF 8.74TF

9 TF 11TF

5000$ 5000$

1200$700$

Железо

NVIDIA GTX 1080

GFLOPSper $

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K80

1.4 1.7

13 9

Железо

* Single precision

Memory Bandwidth

Memory Size

Архитектура

Фронты GPU сервера

Архитектура

Фронты

GPU сервера

Архитектура

Проще искать баги связанные с балансировкой моделей

Можно тестировать разные конфигурации

Кэширование изображений на GPU-серверах

Менее оптимальное распределение моделей

+

+

+

-

Распределение нагрузкиСмена модели 500-1000 msРаспределение нагрузки постоянно меняетсяБолее 10 сек неприемлемо

Распределение нагрузки

Style1 Style2 Style3 Style4 Style5

Style1 Style1 Style1 Style2 Style2 Style3 Style3 Style4 Style5

Supervisor

БоттлнекиGPUПамятьСеть

Диск

Алгоритм супервизера

Организация обученияРучное обучение

FGlab, перебор всех возможных параметров

Редактирование исходного стиля

Для каждого стиля свой выбор слоев, и настроек обучения

Что дальше?Среднее время обработки изображения в приложении

< 200ms* Исключая время на скачивание результата

Offline

2 Гб оперативной памяти на одно изображение~30мб одна модель на диске~20сек на мобильном CPU

Сравнение скорости слоевВходной блок (downsampling) 42%

Промежуточные блоки (каждый) 10%

Выходной блок (upsampling) 28%

Сравнение скорости слоевВходной блок (downsampling) 42%

Промежуточные блоки (каждый) 10%

Выходной блок (upsampling) 28%

* iPhone 5s

1.4 сек

0.3 сек x3

0.9 сек

128 vs 32 канала

128 каналов 9x9

32 канала 9x9 в resnet-слояхускорение 60%

CPU

128 vs 32 канала

3x3 vs 9x9

128 каналов 9x9

32 канала 9x9 в resnet-слояхускорение 60%

32 канала 3x3 в spatialfullconvolutionускорение 20%

+

CPU

9x9 vs 3x3

3x3 vs 9x9

Not so much :(

GPU

Уменьшение веса модели

Оригинальная сеть 9x9 6.7 MB* Только веса

Уменьшение веса модели

Оригинальная сеть 9x9 6.7 MB* Только веса, 128 фильтров

Бинаризация весов 800 KB

Уменьшение веса модели

Оригинальная сеть 9x9 6.7 MB* Только веса, 128 фильтров

Бинаризация весов 800 KB

Уменьшенная сеть 3x3 152 KB32 фильтра

Уменьшение веса модели

44 раза

Подводные камни

* Недостаточно сделать git clone

* Зависание видеокарт

* Много сюрпризов в процессе нагрузочного тестирования

* Debian only

* Экосистема lua отличается нестабильностью

* VGG-19 сильно лучше VGG-16

Взгляд в будущее

Сетевой интерфейсМасштабируемостьПортируемость

Базы данных Нейросеть

Надежность

Language specificManualManual:(

Взгляд в будущее

Сбор данныхОбработка нейросетьюВыгрузка данных для использования

Было:

Realtime использование и обучение нейросетиКуда движется:

top related