Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
ОСОБЕННОСТИ LARGE SCALE MACHINE
LEARNING ЗАДАЧ И APACHE SPARK
Крот Александр, 2015
Кто: Крот Александр
•  ОАО Вымпелком (Билайн)
•  Задачи машинного обучения, анализ графов,
обработка больших данных, визуализация
•  Аналитический центр Правительства РФ
•  Анализ СМИ, соц. сетей, открытых данных,
рекомендательная система
•  МФТИ
•  Построение моделей веб-графов, случайных
графов
•  Askeroid
•  Разработка рекомендательной системы
поисковых движков
•  MLClass.ru
•  Сообщество ученых по данным
al.krot.kav@gmail.com
Mlclass.ru
vk.com/akrot
ru.linkedin.com/pub/alexander-krot/85/659/ab7/en
Что: особенности Apache Spark
•  Large Scale Machine Learning
•  Масштабы
•  Примеры задач
•  2 подхода
•  Линейные модели
•  Machine Learning over Map-Reduce
•  Реализация существующих ML-алгоритмов в модели MR
•  Инструменты
•  Vowpal Wabbit
•  Apache Spark
•  Особенности Apache Spark
LSML: масштаб
•  1 000 000 объектов
•  Python/R, scikit-learn, pandas, etc.
•  10 000 000 объектов
•  Линейные модели (онлайн-обучение)
•  Machine Learning over Map-Reduce (кластер до 10^2 машин)
•  100 000 000 000 объектов
•  Кластер из миллионов машин (p2p - вычисления)
LSML: примеры задач
•  1 000 000 объектов
•  Задачи на kaggle.com, tunedit.org
•  Обучающие выборки – опросы, средний бизнес. Классические
задачи ML
•  10 000 000 объектов
•  Обучающие выборки – часть текущей клиентской базы, кол-во
признаков 10^5 и более
•  Анализ текстов, изображений и видео
•  Ресурсоемкие алгоритмы вроде ансамблей (Random Forest)
•  100 000 000 000 объектов
•  Моделирование белков
LSML: 2 подхода
•  Линейные модели – Wovpal Wabbit
•  Расширение признакового пространства
•  Hashing Trick
•  Выбор функции потерь (hidge, loss, etc.)
•  Активное обучение (out-of-core, данные можно подавать
потоком, причем с нескольких машин)
•  Machine Learning over Map-Reduce – Apache Spark
•  Как переписать текущие алгоритмы в модели вычислений Map-
Reduce?
•  Что делать с IO-оверхедом в случае итеративных алгоритмов?
(большинство алгоритмов ML и на графах)
Реализация ML-алгоритмов в MR
Реализация ML-алгоритмов в MR
Реализация ML-алгоритмов в MR
Инструменты: Vowpal Wabbit
•  Разработан а Microsoft/Yahoo Research
•  Работает из командной строки
•  Формат: label |A feature1:value1 |B feature2:value2
•  Позволяет создавать квадратичные и кубичные
признаки, n-граммы (-q, -cubiq, -ngram )
•  L1,L2 – нормализация (-l1, l2) для отбора признаков
•  Возможность менять Learning Rate (-adaptive)
•  Для оценки используется Progressive Loss
Инструменты: Apache Spark
•  Resilient Distributed Dataset (RDD)
•  MLLib: уже реализованные алгоритмы (K-Means, SVM,
RandomForest, GBT)
•  GraphX: работа с графами (уже готовые Strongly Connected
Components, PageRank)
•  Минусы:
•  Чтение мелких файлов (скорость)
•  С каждой итерацией замедляется (пример - PageRank)
•  OutOfMemoryError
•  executor.memory, driver.memory, executor.memoryOverhead,
driver.memoryOverhead
•  Нельзя сохранять модели (нужно писать свои сериализаторы)
•  Чтобы его понять, нужно начать в него коммитить
Особенности Apache Spark
•  Сериализация: Kryo VS Java Serializer – Kryo меньше в 5-7 раз
(разница в shuffle write)
•  При работе с длинными списками – collection.mutable.MutableList
– ловится StackOverflowError из сериализатора
•  GroupByKey – не производит локальной агрегации, альтернатива
- ReduceByKey/AggregateByKey
•  При тяжелых джоинах имеет смысл увеличивать
spark.shuffle.memoryFraction (0.2 по дефолту)
•  Если нужно сделать join двух RDD, в случае, если одна из них
огромная, лучше использовать broadcast variable и сделать
MapSide Join
•  Map vs MapPartition – во втором случае меньше накладных
расходов, т.к. работаем не с каждым RDD, а с партицией целиком
•  spark.default.parallelism лучше подбирать так, чтобы время
выполнения одного таска было 2-3 секунды
Выводы
•  Apache Spark чаще хочется применять в двух случаях:
•  для ETL-операций, где разница в производительности с
классическим MR невелика
•  для решения задач на больших графах
•  В случае же задач LSML лучше все по-максимуму
свести к Vowpal Wabbit / Python
Вопросы?
Спасибо за внимание!

More Related Content

Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++

  • 1. ОСОБЕННОСТИ LARGE SCALE MACHINE LEARNING ЗАДАЧ И APACHE SPARK Крот Александр, 2015
  • 2. Кто: Крот Александр •  ОАО Вымпелком (Билайн) •  Задачи машинного обучения, анализ графов, обработка больших данных, визуализация •  Аналитический центр Правительства РФ •  Анализ СМИ, соц. сетей, открытых данных, рекомендательная система •  МФТИ •  Построение моделей веб-графов, случайных графов •  Askeroid •  Разработка рекомендательной системы поисковых движков •  MLClass.ru •  Сообщество ученых по данным al.krot.kav@gmail.com Mlclass.ru vk.com/akrot ru.linkedin.com/pub/alexander-krot/85/659/ab7/en
  • 3. Что: особенности Apache Spark •  Large Scale Machine Learning •  Масштабы •  Примеры задач •  2 подхода •  Линейные модели •  Machine Learning over Map-Reduce •  Реализация существующих ML-алгоритмов в модели MR •  Инструменты •  Vowpal Wabbit •  Apache Spark •  Особенности Apache Spark
  • 4. LSML: масштаб •  1 000 000 объектов •  Python/R, scikit-learn, pandas, etc. •  10 000 000 объектов •  Линейные модели (онлайн-обучение) •  Machine Learning over Map-Reduce (кластер до 10^2 машин) •  100 000 000 000 объектов •  Кластер из миллионов машин (p2p - вычисления)
  • 5. LSML: примеры задач •  1 000 000 объектов •  Задачи на kaggle.com, tunedit.org •  Обучающие выборки – опросы, средний бизнес. Классические задачи ML •  10 000 000 объектов •  Обучающие выборки – часть текущей клиентской базы, кол-во признаков 10^5 и более •  Анализ текстов, изображений и видео •  Ресурсоемкие алгоритмы вроде ансамблей (Random Forest) •  100 000 000 000 объектов •  Моделирование белков
  • 6. LSML: 2 подхода •  Линейные модели – Wovpal Wabbit •  Расширение признакового пространства •  Hashing Trick •  Выбор функции потерь (hidge, loss, etc.) •  Активное обучение (out-of-core, данные можно подавать потоком, причем с нескольких машин) •  Machine Learning over Map-Reduce – Apache Spark •  Как переписать текущие алгоритмы в модели вычислений Map- Reduce? •  Что делать с IO-оверхедом в случае итеративных алгоритмов? (большинство алгоритмов ML и на графах)
  • 10. Инструменты: Vowpal Wabbit •  Разработан а Microsoft/Yahoo Research •  Работает из командной строки •  Формат: label |A feature1:value1 |B feature2:value2 •  Позволяет создавать квадратичные и кубичные признаки, n-граммы (-q, -cubiq, -ngram ) •  L1,L2 – нормализация (-l1, l2) для отбора признаков •  Возможность менять Learning Rate (-adaptive) •  Для оценки используется Progressive Loss
  • 11. Инструменты: Apache Spark •  Resilient Distributed Dataset (RDD) •  MLLib: уже реализованные алгоритмы (K-Means, SVM, RandomForest, GBT) •  GraphX: работа с графами (уже готовые Strongly Connected Components, PageRank) •  Минусы: •  Чтение мелких файлов (скорость) •  С каждой итерацией замедляется (пример - PageRank) •  OutOfMemoryError •  executor.memory, driver.memory, executor.memoryOverhead, driver.memoryOverhead •  Нельзя сохранять модели (нужно писать свои сериализаторы) •  Чтобы его понять, нужно начать в него коммитить
  • 12. Особенности Apache Spark •  Сериализация: Kryo VS Java Serializer – Kryo меньше в 5-7 раз (разница в shuffle write) •  При работе с длинными списками – collection.mutable.MutableList – ловится StackOverflowError из сериализатора •  GroupByKey – не производит локальной агрегации, альтернатива - ReduceByKey/AggregateByKey •  При тяжелых джоинах имеет смысл увеличивать spark.shuffle.memoryFraction (0.2 по дефолту) •  Если нужно сделать join двух RDD, в случае, если одна из них огромная, лучше использовать broadcast variable и сделать MapSide Join •  Map vs MapPartition – во втором случае меньше накладных расходов, т.к. работаем не с каждым RDD, а с партицией целиком •  spark.default.parallelism лучше подбирать так, чтобы время выполнения одного таска было 2-3 секунды
  • 13. Выводы •  Apache Spark чаще хочется применять в двух случаях: •  для ETL-операций, где разница в производительности с классическим MR невелика •  для решения задач на больших графах •  В случае же задач LSML лучше все по-максимуму свести к Vowpal Wabbit / Python