Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на...
-
Upload
newprolab -
Category
Data & Analytics
-
view
552 -
download
1
Transcript of Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на...
![Page 1: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/1.jpg)
![Page 2: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/2.jpg)
Пайплайн машинного обучения наApache Spark
![Page 3: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/3.jpg)
A long time ago in a galaxy far, far away
Отдел машинного обучения AdTech 1/40
![Page 4: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/4.jpg)
Отдел машинного обучения AdTech 2/40
![Page 5: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/5.jpg)
Поставку данных сложномониторить и отлаживать
Отдел машинного обучения AdTech 3/40
![Page 6: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/6.jpg)
Отдел машинного обучения AdTech 4/40
![Page 7: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/7.jpg)
Со стримингом сложновообще все...
Отдел машинного обучения AdTech 5/40
![Page 8: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/8.jpg)
Отдел машинного обучения AdTech 6/40
![Page 9: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/9.jpg)
Со стримингом сложно вообще все...
INSERT OVERWRITE TABLE predictSELECT TRANSFORM(line)FROM features_tableUSING 'umworld_caller.py apply -f model.vw'AS ruid, label, probability;
Отдел машинного обучения AdTech 7/40
![Page 10: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/10.jpg)
Отдел машинного обучения AdTech 8/40
![Page 11: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/11.jpg)
Отдел машинного обучения AdTech 9/40
![Page 12: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/12.jpg)
Мониторить тоже сложно
Отдел машинного обучения AdTech 10/40
![Page 13: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/13.jpg)
Joblocker
Отдел машинного обучения AdTech 11/40
![Page 14: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/14.jpg)
Интерфейс мониторинга
Отдел машинного обучения AdTech 12/40
![Page 15: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/15.jpg)
Программироватьнепросто
Отдел машинного обучения AdTech 13/40
![Page 16: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/16.jpg)
+ Эксперименты в Jupyter notebook ипродакшен код разделены
+ Отлаживать стриминг очень сложно+ Трейны готовятся на лету, поэтомуэкспериментировать с новыми фичамидолго
+ Тесты написать практически невозможно+ Деплоить код на кластер непросто(внешние библиотеки)
Отдел машинного обучения AdTech 14/40
![Page 17: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/17.jpg)
Наше решение
+ Kafka+ Camus+ Spark+ Hive+ Airflow+ Graphite
+ Aerospike+ Jenkins+ Slack+ XGBoost+ Vowpal Wabbit+ Keras
Отдел машинного обучения AdTech 15/40
![Page 18: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/18.jpg)
Новая архитектура
Отдел машинного обучения AdTech 16/40
![Page 19: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/19.jpg)
Кафка + мониторинг
Отдел машинного обучения AdTech 17/40
![Page 20: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/20.jpg)
Так почему Spark?
Отдел машинного обучения AdTech 18/40
![Page 21: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/21.jpg)
Speed
Run programs up to 100xfaster than Hadoop
MapReduce in memory, or10x faster on disk
Отдел машинного обучения AdTech 19/40
![Page 22: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/22.jpg)
Ease of use
text_file = spark.textFile("hdfs://...")
text_file.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
Отдел машинного обучения AdTech 20/40
![Page 23: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/23.jpg)
Generality
Отдел машинного обучения AdTech 21/40
![Page 24: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/24.jpg)
Runs everywhere
Отдел машинного обучения AdTech 22/40
![Page 25: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/25.jpg)
Витрина фич
+ Разнести обучение и напил фич+ Фичи пилятся независимо (если что-тоупало, остальное работает)
+ Эксперимент: просто набираешь фич какв магазине
Отдел машинного обучения AdTech 23/40
![Page 26: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/26.jpg)
Витрина фич
Отдел машинного обучения AdTech 24/40
![Page 27: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/27.jpg)
ML. Мы поддержали интерфейс spark.ml и sklearn
from pyspark.ml.pipeline import Transformer
class BaseTransformer(Transformer):def __init__(self, day=None)def fit(self, df)def _transform(self, df)def load(self, timestamp)def save(self, timestamp)
Отдел машинного обучения AdTech 25/40
![Page 28: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/28.jpg)
Зачем нужны load и save?
+ Есть трансформеры, состояние которыхнадо сохранять (напр. LDA)
+ Pyspark поддерживает сериализациютолько pickle
+ Кастомная сериализация позволяетподдержать версионирование витриныфич
Отдел машинного обучения AdTech 26/40
![Page 29: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/29.jpg)
Как выглядит обучение?
class SparkXGBoostClassifier(SparkSklearnClassifier):def _fit(self, X_train, y_train, weight_train,
X_validate, y_validate, weight_validate):
xgb_options = self.model.get_xgb_params()n_classes = len(np.unique(y_train)...self.model.fit(X_train, y_train, **fit_params)
Отдел машинного обучения AdTech 27/40
![Page 30: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/30.jpg)
Сериализация модели - боль
+ XGBoost сериализуется из коробки+ Vowpal Wabbit сериализуется черезуникальный :) механизм записи бинарноймодели в байтовый массив
Отдел машинного обучения AdTech 28/40
![Page 31: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/31.jpg)
Как выглядит применение?
class SparkXGBoostClassifier(SparkSklearnClassifier):def predict_proba(self, df):
rdd = df.map(self._create_dataset)df = rdd.toDF()[['uid', 'feature']]v_model = df._sc.broadcast(self.model)res = df.rdd.mapPartitionsWithIndex(
partial(apply_model, v_model=v_model))return res
Отдел машинного обучения AdTech 29/40
![Page 32: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/32.jpg)
В Airflow все видно
Отдел машинного обучения AdTech 30/40
![Page 33: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/33.jpg)
В Airflow все видно
Отдел машинного обучения AdTech 31/40
![Page 34: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/34.jpg)
Timing (100 executors: 8gb, 2 vcores)
Подзадача Время вычисленийData load and merge 0:08:49Conversion to Pandas 0:07:43Local fit 0:01:44Evaluation 0:04:44Apply 0:46:07Transform to class 0:02:24Total 1:13:05
Отдел машинного обучения AdTech 32/40
![Page 35: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/35.jpg)
А деплой в Jenkins
Отдел машинного обучения AdTech 33/40
![Page 36: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/36.jpg)
А Jenkins пишет в Slack
Отдел машинного обучения AdTech 34/40
![Page 37: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/37.jpg)
И Airflow тоже
Отдел машинного обучения AdTech 35/40
![Page 38: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/38.jpg)
В сухом остатке
- C Airflow постоянно возникают проблемы- Python API Spark отстает от Scala API- Python API заметно медленней внекоторых задачах (конвертацияобъектов)
- Частые проблемы с сериализациейобъектов
- Требуется время на подбор ресурсовSpark-задач
Отдел машинного обучения AdTech 36/40
![Page 39: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/39.jpg)
В сухом остатке
- Spark не поддерживает бакеты Hive- Память драйвера инициализируетсятолько через конфиг
- Большой Spark DataFrame можносохранить локально только через HDFS
- При чтении из Hive число партиций Sparkопределяется числом бакетов
- persist - неявный сборщик мусора?
Отдел машинного обучения AdTech 37/40
![Page 40: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/40.jpg)
В сухом остатке
+ Единая шина данных (Kafka)+ Единый мониторинг для всего (Graphite)+ Удобный и красивый интерфейсмониторинга (Grafana + Airflow)
+ Удобный workflow-менеджер с мощнымвизуальным интерфейсом (Airflow)
+ Витрина фич+ Эксперименты и продакшен в Jupyternotebook
Отдел машинного обучения AdTech 38/40
![Page 41: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/41.jpg)
В сухом остатке
+ Число и скорость проведенияэкспериментов возросли значительно
+ Простое и удобное тестирование(текущее покрытие кода 60%)
+ Простая и удобная отладка (Airflow +Sentry)
+ Деплой одной кнопкой (Jenkins +SaltStack)
+ Своевременные оповещения опроблемах (Airflow + Jenkins + Slack)
Отдел машинного обучения AdTech 39/40
![Page 42: Data Science Week 2016. Rambler & Co. "Пайплайн машинного обучения на Apache Spark"](https://reader030.fdocuments.net/reader030/viewer/2022020314/58f9a924760da3da068b6b66/html5/thumbnails/42.jpg)
Вопросы?
Отдел машинного обучения AdTech 40/40