14
ОСОБЕННОСТИ LARGE SCALE MACHINE LEARNING ЗАДАЧ И APACHE SPARK Крот Александр, 2015

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

  • Upload
    -

  • View
    60

  • Download
    1

Embed Size (px)

Citation preview

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

ОСОБЕННОСТИ LARGE SCALE MACHINE LEARNING ЗАДАЧ И APACHE SPARK

Крот Александр, 2015

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

Кто: Крот Александр •  ОАО Вымпелком (Билайн)

•  Задачи машинного обучения, анализ графов, обработка больших данных, визуализация

•  Аналитический центр Правительства РФ •  Анализ СМИ, соц. сетей, открытых данных, рекомендательная система

•  МФТИ •  Построение моделей веб-графов, случайных графов

•  Askeroid •  Разработка рекомендательной системы поисковых движков

•  MLClass.ru •  Сообщество ученых по данным

[email protected] Mlclass.ru vk.com/akrot ru.linkedin.com/pub/alexander-krot/85/659/ab7/en

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

Что: особенности Apache Spark •  Large Scale Machine Learning

•  Масштабы •  Примеры задач •  2 подхода

•  Линейные модели •  Machine Learning over Map-Reduce

•  Реализация существующих ML-алгоритмов в модели MR • Инструменты

•  Vowpal Wabbit •  Apache Spark •  Особенности Apache Spark

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

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 - вычисления)

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

LSML: примеры задач •  1 000 000 объектов

•  Задачи на kaggle.com, tunedit.org •  Обучающие выборки – опросы, средний бизнес. Классические задачи ML

•  10 000 000 объектов •  Обучающие выборки – часть текущей клиентской базы, кол-во признаков 10^5 и более

•  Анализ текстов, изображений и видео •  Ресурсоемкие алгоритмы вроде ансамблей (Random Forest)

•  100 000 000 000 объектов •  Моделирование белков

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

LSML: 2 подхода • Линейные модели – Wovpal Wabbit

•  Расширение признакового пространства •  Hashing Trick •  Выбор функции потерь (hidge, loss, etc.) •  Активное обучение (out-of-core, данные можно подавать потоком, причем с нескольких машин)

• Machine Learning over Map-Reduce – Apache Spark •  Как переписать текущие алгоритмы в модели вычислений Map-

Reduce? •  Что делать с IO-оверхедом в случае итеративных алгоритмов?

(большинство алгоритмов ML и на графах)

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

Реализация ML-алгоритмов в MR

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

Реализация ML-алгоритмов в MR

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

Реализация ML-алгоритмов в MR

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

Инструменты: 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

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

Инструменты: 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

•  Нельзя сохранять модели (нужно писать свои сериализаторы) •  Чтобы его понять, нужно начать в него коммитить

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

Особенности 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 секунды

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

Выводы

• Apache Spark чаще хочется применять в двух случаях:

•  для ETL-операций, где разница в производительности с классическим MR невелика

•  для решения задач на больших графах

• В случае же задач LSML лучше все по-максимуму свести к Vowpal Wabbit / Python

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

Вопросы?

Спасибо за внимание!