highload на gpu, опыт vinci / Олег Илларионов (ВКонтакте)
Post on 16-Apr-2017
306 Views
Preview:
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