SlideShare a Scribd company logo
1 of 47
ML on the Edge
Андрей Татаринов (Epoch8)
Intro
• Epoch8
– Команда заказной разработки ML-решений
• Задачи
– CV
– NLP
Типичные CV-задачи
• Классификация изображений
• Детекция объектов на изображении
• Извлечение признаков
• Хорошие задачи для DNN
ЗАДАЧА ЗАКАНЧИВАЕТСЯ
ВНЕДРЕНИЕМ
«ДЛЯ ВНЕДРЕНИЯ NN НУЖНЫ GPU»
GPU – это дорого
• Для облака:
– $1000/мес – одна машина
• Для self-hosting:
– ~$1000-1500/host, если начинать с consumer-
class железа
– Страшные цифры, если server-class
АЛЬТЕРНАТИВЫ GPU В PROD ЕСТЬ
Почему GPU нужен для NN?
• Любой курс ML начинается с «вам
обязательно понадобится GPU»
Почему GPU нужен для NN?
• Типичная NN: ResNet50
– 30M параметров
– 50 слоев
• Прямой проход:
– 4GFLOPs (224*224px)
• Обучение:
– Градиентный спуск в 30М-мерном пространстве
– Миллионы шагов
– Очень много compute!
Inference != Train
• 1 раз на 1 изображение
• Все еще десятки миллионов операций
• Но уже появляются опции
Inference без GPU
• CPU
CPU – кейсы
• Внедрение в существующую
инфраструктуру
– Hadoop-кластер
– Много рабочих станций
– Закрытый ДЦ
Как сравнивать скорость GPU и CPU
• GPU – это тысячи медленных ядер с быстрой памятью
• Ядро CPU быстрее, чем ядро GPU
• GPU выигрывает за счет агрессивной параллельности
• Если задача меньше, чем ресурсы GPU
недоутилизированы
• 100% утилизация GPU достигается за счет больших
батчей
Как сравнивать скорость GPU и CPU
• CPU – несколько мощных general purpose
ядер
• Батч размера 1 полностью утилизирует весь
процессор
• Батч размера 10 в 10 раз дольше
GPU vs CPU. ResNet50
Batch size GPU (Nvidia 1080) CPU (core i7)
1 20ms 128ms
5 24ms 727ms
10 42ms 1.6s
Как сравнивать скорость GPU и CPU
• Часто в прикладных задачах batch size = 1
• GPU менее эффективен
• CPU не так медленно работает
• Инференс в ~100мс/запрос – ок
Как внедряться на CPU
• Если Linux+Docker
– Все хорошо
– Можно воспроизвести окружение, идентичное
исследовательскому
– Все работает без изменений
• Если нет Docker (например Hadoop или Windows)
– Сложнее
– Упаковать Py Science-стек в single binary довольно сложно
Как внедряться без docker
• Монолит на Golang / C++
• Удобно внедрять – нет зависимостей
• Сложно переносить сложные модели
Как перенести NN на другую
платформу
• Сконвертировать модель (если требуется) –
легко
• Синхронизировать логику подготовки и
обработки результатов – сложно
Inference Pipeline
Preprocess
(Py)
Inference
(NN)
Postprocess
(Py)
Inference Pipeline: классификация
Preprocess
~10 LoC
Inference
Postprocess
~10 LoC
Inference Pipeline: детекция
Preprocess
~10 LoC
Inference
Postprocess
200+ LoC
Inference Pipeline: детекция
Синхронизация кода – сложно
• Синхронизация кода между исследовательским окружением и
боевым – сложная задача
• Пример про Лего
– Хорошо работает в исследовании – 80% recall на конкретный класс
– Плохо работает в приложении – 30% recall на тот же класс
• Оказалось:
– Мобильный разработчик «оптимизировал» код, обрабатывал только
топ-100 самых уверенных bbox из 3500
Синхронизация кода – сложно
• Решение: локализовать ответственность в
одной команде
• Научили datascience-команду писать на
golang / Swift
CPU – итого
• Пока инференс на 1-10 кадров/секунду –
все хорошо
Honorable mentions
• Intel Cascade Lake (Xeon Platinum 92xx)
• Non-Nvidia GPU
– Radeon – Tensorflow ROCm
– Intel HD – OpenVino
Inference без GPU
• CPU
• Mobile
Mobile
• Во многих телефонах встроен NN-ускоритель
– iPhone 7 и выше
– Флагманские Android (например S9, S10, Pixel)
• Доступом к ускорителю управляет фреймворк
– CoreML – iPhone
– Android NNAPI – Android (обычно не используется напрямую)
• ML Kit (TF Lite) – кроссплатформенное решение
CoreML vs ML Kit
CoreML ML Kit (TF Lite)
• Cross platform
• Практически весь набор
операторов TF
• Нет гарантии ускорения,
возможен фолбэк на CPU в
некоторых случаях
• iOS only
• Ограниченный (но
достаточно широкий)
набор операций
• Гарантированное
ускорение, если
сконвертировалось
Mobile – iPhone
• Достаточно быстрый инференс
ResNet50 performance (batch size = 1):
Nvidia 1080 iPhone X
20ms ~100ms
Mobile – нюансы
• Мобильные не предназначены для пиковой
нагрузки
– Если inference 100ms, это не значит, что можно
бесконечно обрабатывать 10 кадров в секунду
• Сильно греется и быстро расходуется батарея: 1-2
часа
• Через несколько минут пиковой нагрузки OS
начинает throttling
• Сложная синхронизация кода
Mobile – нюансы: медленный CPU
• Если сложный pre-/postprocessing –
медленно
• Пример:
– U-net для instance segmentation и
постобработка на CPU с поиском связных
компонент
Mobile – итого
• Хорошее аппаратное ускорение, сравнимое
с desktop-GPU
• CPU – узкое место
• Синхронизация кода между
исследовательским и боевым окружением
Inference без GPU
• CPU
• Mobile
• Edge HW
Внедрение «в поля»
• Нет ничего
• Обработка видео с локальной камеры
• Максимально дешево
Задачи:
• Захват видео
• Транскодирование / хранение
• ML – обработка
Внедрение «в поля»
• Desktop + GPU: ~$1000
• Дорого
Edge HW
• Google Edge TPU
• Nvidia Jetson Nano
Google Edge TPU
• Лидер в Edge inference
Нюансы:
• Компилятор моделей – в облаке Google
• Недоступен в России
Nvidia Jetson Nano
• Devboard
– RPi
– NN GPU
Nvidia Jetson Nano – нюансы
• Большой разброс в зависимости от способа
запуска
– ~1-2fps TF
– ~20-25fps TF-TensorRT
– ~65fps Nvidia C++ implementation with TensorRT
Nvidia Jetson Nano
• Дешевый = $99
• Комфортная среда исполнения
– Ubuntu Linux + TF
• Достаточно памяти
• Слабый процессор
• Лучший выбор для IoT
Inference без GPU
• CPU
• Mobile
• Edge HW
• Misc
Micro HW
• Sipeed K210
– $10
– 6Mb NN
– 30fps
Browser
• ONNX.js
• Tensorflow.js
• WebDNN
Итого
• Запуск в бой без больших GPU возможен
• Cluster/Legacy – CPU
• Mobile – CoreML/TF Lite
• Edge – спец. железо
СПАСИБО
a@tatarinov.co

More Related Content

What's hot

Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...Ontico
 
C++ в играх, больших и не очень
C++ в играх, больших и не оченьC++ в играх, больших и не очень
C++ в играх, больших и не оченьcorehard_by
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковFuenteovejuna
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав БахмутовCodeFest
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователяAnatoliy Orlov
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаLeonid Yuriev
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Rubyguest5f907e
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019corehard_by
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPythonAnton Patrushev
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Unity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiUnity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiRoman Chehowski
 

What's hot (20)

Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
 
C++ в играх, больших и не очень
C++ в играх, больших и не оченьC++ в играх, больших и не очень
C++ в играх, больших и не очень
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий Востриков
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпа
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Ruby
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPython
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Unity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiUnity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman Chehowski
 

Similar to ML on the Edge - Highload++ Siberia 2019

Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPILeonid Yuriev
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинIT61
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...Ontico
 
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктурыОбработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктурыVsevolod Shabad
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStackYandex
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Ontico
 
Леонид Юрьев, "Петер-Сервис"
Леонид Юрьев, "Петер-Сервис"Леонид Юрьев, "Петер-Сервис"
Леонид Юрьев, "Петер-Сервис"Ontico
 
Цифровая микроэлектроника для математиков и программистов 2017
Цифровая микроэлектроника для математиков и программистов 2017Цифровая микроэлектроника для математиков и программистов 2017
Цифровая микроэлектроника для математиков и программистов 2017Anton Moiseev
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиАндрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиIBS
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 

Similar to ML on the Edge - Highload++ Siberia 2019 (20)

Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPI
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
 
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктурыОбработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Sivko
SivkoSivko
Sivko
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
 
Леонид Юрьев, "Петер-Сервис"
Леонид Юрьев, "Петер-Сервис"Леонид Юрьев, "Петер-Сервис"
Леонид Юрьев, "Петер-Сервис"
 
Цифровая микроэлектроника для математиков и программистов 2017
Цифровая микроэлектроника для математиков и программистов 2017Цифровая микроэлектроника для математиков и программистов 2017
Цифровая микроэлектроника для математиков и программистов 2017
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиАндрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 

More from Andrey Tatarinov

Масштабирование CinemaVR
Масштабирование CinemaVRМасштабирование CinemaVR
Масштабирование CinemaVRAndrey Tatarinov
 
Стачка 2017: CinemaVR - история запуска
Стачка 2017: CinemaVR - история запускаСтачка 2017: CinemaVR - история запуска
Стачка 2017: CinemaVR - история запускаAndrey Tatarinov
 
TDSR 2014: Porting Zvooq app to Tizen
TDSR 2014: Porting Zvooq app to TizenTDSR 2014: Porting Zvooq app to Tizen
TDSR 2014: Porting Zvooq app to TizenAndrey Tatarinov
 
CodeFreeze 2013: как устроен enter (расширенная версия)
CodeFreeze 2013: как устроен enter (расширенная версия)CodeFreeze 2013: как устроен enter (расширенная версия)
CodeFreeze 2013: как устроен enter (расширенная версия)Andrey Tatarinov
 
CMS magazine 2013: как устроен enter
CMS magazine 2013: как устроен enterCMS magazine 2013: как устроен enter
CMS magazine 2013: как устроен enterAndrey Tatarinov
 

More from Andrey Tatarinov (7)

Масштабирование CinemaVR
Масштабирование CinemaVRМасштабирование CinemaVR
Масштабирование CinemaVR
 
Стачка 2017: CinemaVR - история запуска
Стачка 2017: CinemaVR - история запускаСтачка 2017: CinemaVR - история запуска
Стачка 2017: CinemaVR - история запуска
 
TDSR 2014: Porting Zvooq app to Tizen
TDSR 2014: Porting Zvooq app to TizenTDSR 2014: Porting Zvooq app to Tizen
TDSR 2014: Porting Zvooq app to Tizen
 
CodeFreeze 2013: как устроен enter (расширенная версия)
CodeFreeze 2013: как устроен enter (расширенная версия)CodeFreeze 2013: как устроен enter (расширенная версия)
CodeFreeze 2013: как устроен enter (расширенная версия)
 
CMS magazine 2013: как устроен enter
CMS magazine 2013: как устроен enterCMS magazine 2013: как устроен enter
CMS magazine 2013: как устроен enter
 
Frontik
FrontikFrontik
Frontik
 
logging done
logging donelogging done
logging done
 

ML on the Edge - Highload++ Siberia 2019

  • 1. ML on the Edge Андрей Татаринов (Epoch8)
  • 2. Intro • Epoch8 – Команда заказной разработки ML-решений • Задачи – CV – NLP
  • 3. Типичные CV-задачи • Классификация изображений • Детекция объектов на изображении • Извлечение признаков • Хорошие задачи для DNN
  • 6. GPU – это дорого • Для облака: – $1000/мес – одна машина • Для self-hosting: – ~$1000-1500/host, если начинать с consumer- class железа – Страшные цифры, если server-class
  • 8. Почему GPU нужен для NN? • Любой курс ML начинается с «вам обязательно понадобится GPU»
  • 9. Почему GPU нужен для NN? • Типичная NN: ResNet50 – 30M параметров – 50 слоев • Прямой проход: – 4GFLOPs (224*224px) • Обучение: – Градиентный спуск в 30М-мерном пространстве – Миллионы шагов – Очень много compute!
  • 10. Inference != Train • 1 раз на 1 изображение • Все еще десятки миллионов операций • Но уже появляются опции
  • 12. CPU – кейсы • Внедрение в существующую инфраструктуру – Hadoop-кластер – Много рабочих станций – Закрытый ДЦ
  • 13. Как сравнивать скорость GPU и CPU • GPU – это тысячи медленных ядер с быстрой памятью • Ядро CPU быстрее, чем ядро GPU • GPU выигрывает за счет агрессивной параллельности • Если задача меньше, чем ресурсы GPU недоутилизированы • 100% утилизация GPU достигается за счет больших батчей
  • 14. Как сравнивать скорость GPU и CPU • CPU – несколько мощных general purpose ядер • Батч размера 1 полностью утилизирует весь процессор • Батч размера 10 в 10 раз дольше
  • 15. GPU vs CPU. ResNet50 Batch size GPU (Nvidia 1080) CPU (core i7) 1 20ms 128ms 5 24ms 727ms 10 42ms 1.6s
  • 16. Как сравнивать скорость GPU и CPU • Часто в прикладных задачах batch size = 1 • GPU менее эффективен • CPU не так медленно работает • Инференс в ~100мс/запрос – ок
  • 17. Как внедряться на CPU • Если Linux+Docker – Все хорошо – Можно воспроизвести окружение, идентичное исследовательскому – Все работает без изменений • Если нет Docker (например Hadoop или Windows) – Сложнее – Упаковать Py Science-стек в single binary довольно сложно
  • 18. Как внедряться без docker • Монолит на Golang / C++ • Удобно внедрять – нет зависимостей • Сложно переносить сложные модели
  • 19. Как перенести NN на другую платформу • Сконвертировать модель (если требуется) – легко • Синхронизировать логику подготовки и обработки результатов – сложно
  • 22. Inference Pipeline: детекция Preprocess ~10 LoC Inference Postprocess 200+ LoC
  • 24. Синхронизация кода – сложно • Синхронизация кода между исследовательским окружением и боевым – сложная задача • Пример про Лего – Хорошо работает в исследовании – 80% recall на конкретный класс – Плохо работает в приложении – 30% recall на тот же класс • Оказалось: – Мобильный разработчик «оптимизировал» код, обрабатывал только топ-100 самых уверенных bbox из 3500
  • 25. Синхронизация кода – сложно • Решение: локализовать ответственность в одной команде • Научили datascience-команду писать на golang / Swift
  • 26. CPU – итого • Пока инференс на 1-10 кадров/секунду – все хорошо
  • 27. Honorable mentions • Intel Cascade Lake (Xeon Platinum 92xx) • Non-Nvidia GPU – Radeon – Tensorflow ROCm – Intel HD – OpenVino
  • 28. Inference без GPU • CPU • Mobile
  • 29. Mobile • Во многих телефонах встроен NN-ускоритель – iPhone 7 и выше – Флагманские Android (например S9, S10, Pixel) • Доступом к ускорителю управляет фреймворк – CoreML – iPhone – Android NNAPI – Android (обычно не используется напрямую) • ML Kit (TF Lite) – кроссплатформенное решение
  • 30. CoreML vs ML Kit CoreML ML Kit (TF Lite) • Cross platform • Практически весь набор операторов TF • Нет гарантии ускорения, возможен фолбэк на CPU в некоторых случаях • iOS only • Ограниченный (но достаточно широкий) набор операций • Гарантированное ускорение, если сконвертировалось
  • 31. Mobile – iPhone • Достаточно быстрый инференс ResNet50 performance (batch size = 1): Nvidia 1080 iPhone X 20ms ~100ms
  • 32. Mobile – нюансы • Мобильные не предназначены для пиковой нагрузки – Если inference 100ms, это не значит, что можно бесконечно обрабатывать 10 кадров в секунду • Сильно греется и быстро расходуется батарея: 1-2 часа • Через несколько минут пиковой нагрузки OS начинает throttling • Сложная синхронизация кода
  • 33. Mobile – нюансы: медленный CPU • Если сложный pre-/postprocessing – медленно • Пример: – U-net для instance segmentation и постобработка на CPU с поиском связных компонент
  • 34. Mobile – итого • Хорошее аппаратное ускорение, сравнимое с desktop-GPU • CPU – узкое место • Синхронизация кода между исследовательским и боевым окружением
  • 35. Inference без GPU • CPU • Mobile • Edge HW
  • 36. Внедрение «в поля» • Нет ничего • Обработка видео с локальной камеры • Максимально дешево Задачи: • Захват видео • Транскодирование / хранение • ML – обработка
  • 37. Внедрение «в поля» • Desktop + GPU: ~$1000 • Дорого
  • 38. Edge HW • Google Edge TPU • Nvidia Jetson Nano
  • 39. Google Edge TPU • Лидер в Edge inference Нюансы: • Компилятор моделей – в облаке Google • Недоступен в России
  • 40. Nvidia Jetson Nano • Devboard – RPi – NN GPU
  • 41. Nvidia Jetson Nano – нюансы • Большой разброс в зависимости от способа запуска – ~1-2fps TF – ~20-25fps TF-TensorRT – ~65fps Nvidia C++ implementation with TensorRT
  • 42. Nvidia Jetson Nano • Дешевый = $99 • Комфортная среда исполнения – Ubuntu Linux + TF • Достаточно памяти • Слабый процессор • Лучший выбор для IoT
  • 43. Inference без GPU • CPU • Mobile • Edge HW • Misc
  • 44. Micro HW • Sipeed K210 – $10 – 6Mb NN – 30fps
  • 46. Итого • Запуск в бой без больших GPU возможен • Cluster/Legacy – CPU • Mobile – CoreML/TF Lite • Edge – спец. железо