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