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

Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

  • Upload
    ontico

  • View
    304

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

Page 2: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

Релиз

Page 3: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

3 000 0001 000 000

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

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

Page 4: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

Page 5: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Artistic style

Page 6: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Artistic style

Page 7: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Artistic style

Page 8: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Artistic style

Page 9: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

NodeJS / GO

TorchLua / Turbo

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

Page 10: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

Ubuntu / DebianCUDA + CUDNN

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

Page 11: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

CPU VS GPU

Page 12: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

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

CPU:

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

Page 13: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

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

GPU:

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

Page 14: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

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

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

Page 15: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

NVIDIA GTX 1080

VS

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K80

Page 16: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

NVIDIA GTX 1080

VS

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K807 TF 8.74TF

9 TF 11TF

Page 17: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

NVIDIA GTX 1080VS

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K807 TF 8.74TF

9 TF 11TF

5000$ 5000$

1200$700$

Page 18: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

NVIDIA GTX 1080

GFLOPSper $

NVIDIA TITAN X

NVIDIA TESLA M40 NVIDIA TESLA K80

1.4 1.7

13 9

Page 19: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Железо

* Single precision

Memory Bandwidth

Memory Size

Page 20: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Архитектура

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

Page 21: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Архитектура

Фронты

GPU сервера

Page 22: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Архитектура

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

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

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

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

+

+

+

-

Page 23: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

Page 24: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

Style1 Style2 Style3 Style4 Style5

Style1 Style1 Style1 Style2 Style2 Style3 Style3 Style4 Style5

Supervisor

Page 25: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

Диск

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

Page 26: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

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

Page 27: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

Page 28: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

Offline

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

Page 29: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

Page 30: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

* iPhone 5s

1.4 сек

0.3 сек x3

0.9 сек

Page 31: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

128 vs 32 канала

128 каналов 9x9

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

CPU

Page 32: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

128 vs 32 канала

Page 33: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

3x3 vs 9x9

128 каналов 9x9

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

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

+

CPU

Page 34: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

9x9 vs 3x3

Page 35: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

3x3 vs 9x9

Not so much :(

GPU

Page 36: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

Page 37: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

Page 38: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

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

Page 39: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

44 раза

Page 40: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

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

* Debian only

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

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

Page 41: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

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

Надежность

Language specificManualManual:(

Page 42: Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)

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

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

Было:

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