SlideShare a Scribd company logo
Пути увеличения 
эффективности реализации 
алгоритмов машинного 
обучения 
Бабий А.С. - apratster@gmail.com
Для чего необходимо задумываться о скорости вычислений для ML? 
1. Сокращаем время обучения алгоритмов. 
2. Достигаем приемлемого времени перенастройки «на лету». 
3. Больше факторов. 
4. Большие объемы данных для обучения. 
5. Возможность масштабирования. 
6. Экономия средств.
Пути увеличения производительности
Подходы к увеличению производительности ML распараллеливанием 
Широкая - специфичная для GPU Узкая - специфична для CPU 
SIMD vs SIMT vs SMT
Оптимизация одного потока вычисления 
Когда используется: 
• Возможности распараллеливания ограничены аппаратно либо алгоритмом 
• Код исполняется параллельно, каждый из потоков необходимо 
оптимизировать 
Возможности: 
В удачных случаях (например умножение матриц) – до 16 раз быстрее. 
Исходная и оптимизированная программа на С 
Например переход с оптимизированной Java версии на С дает 
2х кратное ускорение работы программы. 
Ограничения: 
- Необходимо понимать архитектуру CPU который используется 
- Скорость разработки замедляется и усложняется
Сравнительная таблица оптимизаций для умножения матриц[1] 
1. Saman Amarasinghe, Matrix Multiply, a case study – 2008.
Прежде чем начать оптимизировать…. 
1. Используйте профилировшик (gprof, valgrind, … ) 
2. Не использует ли приложение уже оптимизированный код BLAS 
3. Если не использует, то перейти к матричной и векторной форме 
работы с данными, и использовать BLAS 
4. SIMD – иногда дает максимальный прирост
Бабий А.С. - apratster@gmail.com 
Распараллеливание. 
1. Часто ограничены аппаратным обеспечением и архитектурой. 
2. KML, PBLAS, ATLAS 
3. Когда CPU Multicore эффективнее GPU ? 
4. NVIDIA CUDA. 
5. OpenCL – переносимость и ее цена.
CUDA 
Основные идеи: 
1. Функция которая распараллеливается называется «kernel-function». 
2. Потоки исполняющие ядерные функции группируются в блоки. 
3. Потоки и блоки нумеруются. 
4. Только одна ядерная функция может исполняться на устройстве 
в один момент времени. 
5. Блоки потоков исполняются на мультипроцессорах, 
потоки на потоковых процессорах. 
6. Блоки состоят из WARP, которые исполняются в SIMD режиме
Архитектура CUDA
Виды памяти
Доступные средства для быстрой разработки с GPU 
Область параллельных вычислений развивается очень динамично, достаточно 
большое количество библиотек для вычислений с GPU уже существует. 
cuBLAS cuFFT cuSparse 
Thrust cuRand HiPLAR
Набор примитивов для сетей Deep Learning 
1. Сверточный слой 
2. Слой фильтрации 
3. Обобщающий слой 
Интеграция с Caffe 
24-core Intel E5-2679v2 CPU @ 2.4GHz vs K40, NVIDIA
Применяем cuDNN в своих проектах! 
Требует: 
cuDNN supports NVIDIA GPUs of compute 
capability 3.0 and higher 
NVIDIA Driver compatible with CUDA 
Toolkit 6.5. 
Предоставляет: 
‣ Прямой и обратный слой конволюции, 
включая кросс-корелляцию 
‣ Слой обобщения прямое и обратное 
‣ Слой Софтмакс прямой и обратный 
Функции активации 
‣ Rectified linear (ReLU) 
‣ Sigmoid 
‣ Hyperbolic tangent (TANH) 
‣ Tensor transformation functions
Библиотека Thrust 
Доступные параллельные алгоритмы: 
Трансформация (12 операнда, +, -,abs, * …) 
Редукция (sum, max, min, ) 
Префикс-сумма (inclusive scan, exclusive scan – для сортировки напр.) 
Сортировка 
Перестановка (copy_if, remove_if, unique …) 
Основная идея – сделать параллельные вычисления доступными 
для понимания, как и шаблоны С++ 
За счет абстракции может несколько теряться производительность, 
но повышается скорость разработки
Пример (Код J.Hintona для RBM) 
data = batchdata(:,:,batch); 
poshidprobs = 1./(1 + exp(-data*vishid - 
repmat(hidbiases,numcases,1))); 
batchposhidprobs(:,:,batch)=poshidprobs; 
posprods = data' * poshidprobs; 
poshidact = sum(poshidprobs); 
… …po…svisact = sum(data); 
vishidinc = momentum*vishidinc + ... 
epsilonw*( (posprods-negprods)/numcases - weightcost*vishid); 
visbiasinc = momentum*visbiasinc + (epsilonvb/numcases)*(posvisact-negvisact); 
hidbiasinc = momentum*hidbiasinc + (epsilonhb/numcases)*(poshidact-neghidact); 
vishid = vishid + vishidinc; 
visbiases = visbiases + visbiasinc; 
hidbiases = hidbiases + hidbiasinc;
Библиотеки и ссылки 
Python - Theano, Pylearn2, cudamat, mPoT 
C++ - Cuda-Convnet, Eblearn, CXXNET 
Matlab – DeepLearnToolbox, Deep Belief Networks, deepmat 
http://deeplearning.net/software_links/
Выводы 
1. Для редких, экспериментальных, не реализованных в библиотеках 
Алгоритмов иногда достаточно оптимизировать код C для последовательной 
версии. 
2. Параллелизация для CPU, как правило диктуется сложностью в «широком» 
распараллеливании алгоритма, либо аппаратными ограничениями 
3. Использовать готовые оптимизированные пакеты функций BLAS, cuBlas, 
Thrust 
4. cuDNN + Caffe дает возможности быстрого прототипирования DNN 
Спасибо за внимание !

More Related Content

What's hot

Организация аппаратного поиска в таблицах OpenFlow на базе ПЛИС
Организация аппаратного поиска в таблицах OpenFlow на базе ПЛИСОрганизация аппаратного поиска в таблицах OpenFlow на базе ПЛИС
Организация аппаратного поиска в таблицах OpenFlow на базе ПЛИС
ARCCN
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
Нереляционный SQL
Нереляционный SQLНереляционный SQL
Нереляционный SQL
Andrei Nikolaenko
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
FlyElephant
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
Anatoliy Nikulin
 
Исследования программно-конфигурируемых сетей в Оренбургском государственном ...
Исследования программно-конфигурируемых сетей в Оренбургском государственном ...Исследования программно-конфигурируемых сетей в Оренбургском государственном ...
Исследования программно-конфигурируемых сетей в Оренбургском государственном ...
ARCCN
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Cоздаем пробки или тюнинг postgresql для расчетных задач
Cоздаем пробки или тюнинг postgresql для расчетных задачCоздаем пробки или тюнинг postgresql для расчетных задач
Cоздаем пробки или тюнинг postgresql для расчетных задачDevDay
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
Roman Leventov
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)
Ivan Kudryavtsev
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Ontico
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?
Mikhail Chusavitin
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими данными
Vsevolod Shabad
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
Daniel Podolsky
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Ontico
 
HPC file systems (160761)
HPC file systems (160761)HPC file systems (160761)
HPC file systems (160761)
Vsevolod Shabad
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Ontico
 

What's hot (20)

Организация аппаратного поиска в таблицах OpenFlow на базе ПЛИС
Организация аппаратного поиска в таблицах OpenFlow на базе ПЛИСОрганизация аппаратного поиска в таблицах OpenFlow на базе ПЛИС
Организация аппаратного поиска в таблицах OpenFlow на базе ПЛИС
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Нереляционный SQL
Нереляционный SQLНереляционный SQL
Нереляционный SQL
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
 
Исследования программно-конфигурируемых сетей в Оренбургском государственном ...
Исследования программно-конфигурируемых сетей в Оренбургском государственном ...Исследования программно-конфигурируемых сетей в Оренбургском государственном ...
Исследования программно-конфигурируемых сетей в Оренбургском государственном ...
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Cоздаем пробки или тюнинг postgresql для расчетных задач
Cоздаем пробки или тюнинг postgresql для расчетных задачCоздаем пробки или тюнинг postgresql для расчетных задач
Cоздаем пробки или тюнинг postgresql для расчетных задач
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими данными
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
 
HPC file systems (160761)
HPC file systems (160761)HPC file systems (160761)
HPC file systems (160761)
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 

Similar to Пути увеличения эффективности реализации алгоритмов машинного обучения

Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
MATLAB
 
Параллельные и распределенные вычисления
Параллельные и распределенные вычисленияПараллельные и распределенные вычисления
Параллельные и распределенные вычисления
MATLAB
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Mikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Mikhail Kurnosov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Gpgpu
GpgpuGpgpu
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Mikhail Kurnosov
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Ontico
 
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Andrei Nikolaenko
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
larhat
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 

Similar to Пути увеличения эффективности реализации алгоритмов машинного обучения (20)

Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
 
Параллельные и распределенные вычисления
Параллельные и распределенные вычисленияПараллельные и распределенные вычисления
Параллельные и распределенные вычисления
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
CUDA Best Practices (2-3)
CUDA Best Practices (2-3)CUDA Best Practices (2-3)
CUDA Best Practices (2-3)
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Gpgpu
GpgpuGpgpu
Gpgpu
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
 
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Efficiency vvv
Efficiency vvvEfficiency vvv
Efficiency vvv
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 

More from Andrew Babiy

Lidar road recognition
Lidar road recognitionLidar road recognition
Lidar road recognition
Andrew Babiy
 
Automated driving - Автоматическое вождение
Automated driving - Автоматическое вождениеAutomated driving - Автоматическое вождение
Automated driving - Автоматическое вождение
Andrew Babiy
 
CUDA & CAFFE
CUDA & CAFFE CUDA & CAFFE
CUDA & CAFFE
Andrew Babiy
 
Deep convolution networks with caffe
Deep convolution networks with caffeDeep convolution networks with caffe
Deep convolution networks with caffe
Andrew Babiy
 
Face detection and recognition using OpenCV
Face detection and recognition using OpenCVFace detection and recognition using OpenCV
Face detection and recognition using OpenCV
Andrew Babiy
 
Recognition of handwritten digits
Recognition of handwritten digitsRecognition of handwritten digits
Recognition of handwritten digitsAndrew Babiy
 
SURF
SURFSURF

More from Andrew Babiy (7)

Lidar road recognition
Lidar road recognitionLidar road recognition
Lidar road recognition
 
Automated driving - Автоматическое вождение
Automated driving - Автоматическое вождениеAutomated driving - Автоматическое вождение
Automated driving - Автоматическое вождение
 
CUDA & CAFFE
CUDA & CAFFE CUDA & CAFFE
CUDA & CAFFE
 
Deep convolution networks with caffe
Deep convolution networks with caffeDeep convolution networks with caffe
Deep convolution networks with caffe
 
Face detection and recognition using OpenCV
Face detection and recognition using OpenCVFace detection and recognition using OpenCV
Face detection and recognition using OpenCV
 
Recognition of handwritten digits
Recognition of handwritten digitsRecognition of handwritten digits
Recognition of handwritten digits
 
SURF
SURFSURF
SURF
 

Пути увеличения эффективности реализации алгоритмов машинного обучения

  • 1. Пути увеличения эффективности реализации алгоритмов машинного обучения Бабий А.С. - apratster@gmail.com
  • 2. Для чего необходимо задумываться о скорости вычислений для ML? 1. Сокращаем время обучения алгоритмов. 2. Достигаем приемлемого времени перенастройки «на лету». 3. Больше факторов. 4. Большие объемы данных для обучения. 5. Возможность масштабирования. 6. Экономия средств.
  • 4. Подходы к увеличению производительности ML распараллеливанием Широкая - специфичная для GPU Узкая - специфична для CPU SIMD vs SIMT vs SMT
  • 5. Оптимизация одного потока вычисления Когда используется: • Возможности распараллеливания ограничены аппаратно либо алгоритмом • Код исполняется параллельно, каждый из потоков необходимо оптимизировать Возможности: В удачных случаях (например умножение матриц) – до 16 раз быстрее. Исходная и оптимизированная программа на С Например переход с оптимизированной Java версии на С дает 2х кратное ускорение работы программы. Ограничения: - Необходимо понимать архитектуру CPU который используется - Скорость разработки замедляется и усложняется
  • 6. Сравнительная таблица оптимизаций для умножения матриц[1] 1. Saman Amarasinghe, Matrix Multiply, a case study – 2008.
  • 7. Прежде чем начать оптимизировать…. 1. Используйте профилировшик (gprof, valgrind, … ) 2. Не использует ли приложение уже оптимизированный код BLAS 3. Если не использует, то перейти к матричной и векторной форме работы с данными, и использовать BLAS 4. SIMD – иногда дает максимальный прирост
  • 8. Бабий А.С. - apratster@gmail.com Распараллеливание. 1. Часто ограничены аппаратным обеспечением и архитектурой. 2. KML, PBLAS, ATLAS 3. Когда CPU Multicore эффективнее GPU ? 4. NVIDIA CUDA. 5. OpenCL – переносимость и ее цена.
  • 9. CUDA Основные идеи: 1. Функция которая распараллеливается называется «kernel-function». 2. Потоки исполняющие ядерные функции группируются в блоки. 3. Потоки и блоки нумеруются. 4. Только одна ядерная функция может исполняться на устройстве в один момент времени. 5. Блоки потоков исполняются на мультипроцессорах, потоки на потоковых процессорах. 6. Блоки состоят из WARP, которые исполняются в SIMD режиме
  • 12. Доступные средства для быстрой разработки с GPU Область параллельных вычислений развивается очень динамично, достаточно большое количество библиотек для вычислений с GPU уже существует. cuBLAS cuFFT cuSparse Thrust cuRand HiPLAR
  • 13. Набор примитивов для сетей Deep Learning 1. Сверточный слой 2. Слой фильтрации 3. Обобщающий слой Интеграция с Caffe 24-core Intel E5-2679v2 CPU @ 2.4GHz vs K40, NVIDIA
  • 14. Применяем cuDNN в своих проектах! Требует: cuDNN supports NVIDIA GPUs of compute capability 3.0 and higher NVIDIA Driver compatible with CUDA Toolkit 6.5. Предоставляет: ‣ Прямой и обратный слой конволюции, включая кросс-корелляцию ‣ Слой обобщения прямое и обратное ‣ Слой Софтмакс прямой и обратный Функции активации ‣ Rectified linear (ReLU) ‣ Sigmoid ‣ Hyperbolic tangent (TANH) ‣ Tensor transformation functions
  • 15. Библиотека Thrust Доступные параллельные алгоритмы: Трансформация (12 операнда, +, -,abs, * …) Редукция (sum, max, min, ) Префикс-сумма (inclusive scan, exclusive scan – для сортировки напр.) Сортировка Перестановка (copy_if, remove_if, unique …) Основная идея – сделать параллельные вычисления доступными для понимания, как и шаблоны С++ За счет абстракции может несколько теряться производительность, но повышается скорость разработки
  • 16. Пример (Код J.Hintona для RBM) data = batchdata(:,:,batch); poshidprobs = 1./(1 + exp(-data*vishid - repmat(hidbiases,numcases,1))); batchposhidprobs(:,:,batch)=poshidprobs; posprods = data' * poshidprobs; poshidact = sum(poshidprobs); … …po…svisact = sum(data); vishidinc = momentum*vishidinc + ... epsilonw*( (posprods-negprods)/numcases - weightcost*vishid); visbiasinc = momentum*visbiasinc + (epsilonvb/numcases)*(posvisact-negvisact); hidbiasinc = momentum*hidbiasinc + (epsilonhb/numcases)*(poshidact-neghidact); vishid = vishid + vishidinc; visbiases = visbiases + visbiasinc; hidbiases = hidbiases + hidbiasinc;
  • 17. Библиотеки и ссылки Python - Theano, Pylearn2, cudamat, mPoT C++ - Cuda-Convnet, Eblearn, CXXNET Matlab – DeepLearnToolbox, Deep Belief Networks, deepmat http://deeplearning.net/software_links/
  • 18. Выводы 1. Для редких, экспериментальных, не реализованных в библиотеках Алгоритмов иногда достаточно оптимизировать код C для последовательной версии. 2. Параллелизация для CPU, как правило диктуется сложностью в «широком» распараллеливании алгоритма, либо аппаратными ограничениями 3. Использовать готовые оптимизированные пакеты функций BLAS, cuBlas, Thrust 4. cuDNN + Caffe дает возможности быстрого прототипирования DNN Спасибо за внимание !