Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Повторное использование кода в ML: почему ML-па...

Повторное использование кода в ML: почему ML-пайплайны могут помочь?

Lamoda Tech

October 09, 2024
Tweet

More Decks by Lamoda Tech

Other Decks in Programming

Transcript

  1. Масштабы задачи в Lamoda 6 DS команд 30+ DS 30+

    ML-моделей в проде 200+ Dag’ов в Airflow Python CatBoost PyTorch Hadoop PySpark Airflow
  2. Координаты задачи Между inference и (re-)train код в разных репозиториях

    Между research и prod несколько монореп в разрезе команд для исследований Между ML-проектами как внутри одной команды, так и между разными Внутри проекта с учетом нашей специфики
  3. Тип кода и решения для его повторного использования utils /

    helpers внутри проекта и как отдельная библиотека Вспомогательные операции: сохранение / загрузка данных и моделей, расчет и отправка метрик, логирование и т.д.
  4. Тип кода и решения для его повторного использования utils /

    helpers внутри проекта и как отдельная библиотека Сначала структурировать и декомпозировать код, после: • Библиотека – для потенциально не изменяемых компонент кода, используемых внутри проектов. • Шаблон проекта или Jupyter ноутбука – для потенциально изменяемых компонент кода. Вспомогательные операции Этапы ML процесса пост- и пред- обработка данных train / valid / test разбиение обучение модели расчет метрик применение модели и т.д.
  5. Обращаемся к ООП добавляем структурированности Как спроектировать код таким образом,

    чтобы использовать компоненты по отдельности? Другой проект Эксперимент в Jupyter
  6. Что такое (ML) Пайплайн? • Набор шагов и функционал для

    их компоновки и запуска. Пример: CI/CD, Data, ML, … • Чем отличаются именно ML? На концептуальном уровне только содержимым, и то не всегда. Пример: задача по обработке данных, может быть как Data, так и ML пайплайном, в зависимости от контекста. Если коротко на концептуальном уровне
  7. Пайплайн как Design Pattern + doPipeline(in object: Command) + handlers:

    Handler [1…*] + PipelineManager + Command + process(in object: Command) <<Interface>> + Handler + ConcreteHandler1 + ConcreteHandler2 + has 1 1..* 1 + isProcessedBy PipelineManager – класс для связи шагов и их последующего запуска. Handler – класс интерфейс, от которого наследуются конкретные реализации шагов Pipeline. Безотносительно языка программирования
  8. ML Пайплайн на практике from sklearn.pipeline import Pipeline from sklearn.svm

    import SVC from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split X, y = make_classification(random_state=0) X_train, X_test, y_train, y_test = train_test_split(X, y) pipe = Pipeline([('scaler',StandardScaler()),('svc',SVC())]) model = pipe.fit(X_train, y_train) from pyspark.ml import Pipeline from pyspark.ml.classification import LogisticRegression from pyspark.ml.feature import HashingTF, Tokenizer training = spark.createDataFrame( [(0, "a b c d e spark", 1.0), …], "id", "text", "label" ) tokenizer = Tokenizer(inputCol="text", outputCol="words") hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol="features") lr = LogisticRegression(maxIter=10, regParam=0.001) pipe = Pipeline(stages=[tokenizer, hashingTF, lr]) model = pipe.fit(training) Sklearn Pipeline Spark Pipeline Базовые примеры на Python
  9. Что дают Пайплайны pipe = Pipeline( [ ("scaling", MinMaxScaler()), ("reduce_dim",

    "passthrough"), ("classify", LinearSVC(dual=False, max_iter=10000)), ] ) N_FEATURES_OPTIONS = [2, 4, 8] C_OPTIONS = [1, 10, 100, 1000] param_grid = [ { "reduce_dim": [PCA(iterated_power=7),NMF(max_iter=1_000)], "reduce_dim__n_components": N_FEATURES_OPTIONS, "classify__C": C_OPTIONS, }, { "reduce_dim": [SelectKBest(mutual_info_classif)], "reduce_dim__k": N_FEATURES_OPTIONS, "classify__C": C_OPTIONS, }, ] reducer_labels = ["PCA", "NMF", "KBest(mutual_info_classif)"] grid = GridSearchCV(pipe, n_jobs=1, param_grid=param_grid) grid.fit(X, y) 1 2 3 Удобство проведения и конфигурирования экспериментов Схожая структура кода между разными проектами Удобство переноса наработок из dev в prod в Sklearn и Spark
  10. Почему не хватает и чего хочется наглядно • Возможность любую

    часть кода превратить в шаг пайплайна TrainModel Calculate & Send Model Metrics Split Data Prepare Data
  11. Почему не хватает и чего хочется наглядно Spark ML Server

    Spark • Легко и гибко привязать запуск отдельного шага к инфраструктуре TrainModel Calculate & Send Model Metrics Split Data Prepare Data Spark
  12. Почему не хватает и чего хочется наглядно • Управление входами

    и выходами, особенно с учетом запуска на инфраструктуре Spark ML Server Spark TrainModel Calculate & Send Model Metrics Split Data Prepare Data Spark S3/ HDFS
  13. Почему не хватает и чего хочется наглядно Post Hooks Metrics/Logs

    • Настраиваемые обработчики для пред и пост процессинга шагов пайплайна Spark ML Server Spark Train Model Calculate & Send Model Metrics Split Data Prepare Data Spark S3/ HDFS
  14. Train Model Calculate & Send Model Metrics Split Data Prepare

    Data Spark ML Server Spark Spark Post Hooks S3/H DFS Metrics/Logs Фреймворки для ML Пайплайнов ключевой элемент интерфейса пользователя 1. Класс для связи шагов и их последующего запуска. 2. Функция высшего порядка, принимающая в качестве параметра функцию, реализующую этап ML-процесса. Осторожно: Могут быть в виде декоратора
  15. Какие есть альтернативы обзор open-source инструментов Структура проекта и кода

    Единая ML платформа Привязка шагов пайплайна к инфраструктуре Основная задача Из чего состоят Как минимум python-библиотека Web UI + набор сервисов
  16. Какие у нас цели • Повторное использование кода • Запуск

    шагов Пайплайна на Spark и ML Server • Единый и удобный «инструмент» для проведения экспериментов • Схожая структура проектов Помимо повторного использования кода
  17. Наши вводные и ограничения или какие фреймворки нам подходят •

    У нас есть сильный Spark on Yarn кластер (36 TB Ram, 3.5k vCores) • Пока нет Kubernetes кластера для ML, но есть выделенный сервер для «тяжелых» моделей • Исследования проводим в Jupyter • , , • , Не подходят: Остаются: • DSL кажется не самый простой – риск принятия Остаются: – Сложный DSL и много не требующегося нам функционала – На момент старта проекта не знали про фреймворк, требует изучения
  18. С чего начали Пайплайнизацию помимо самописного движка Движок пайплайнов Монорепа

    с исследованиями train проект 2 Steps Jupyter VS Code / PyCharm PROD train проект 1 Pipeline 1. Разбили проект на несколько логических типов шагов, зафиксировали входы и выходы каждого из них через классы-интерфейсы. 2. Реализовали на основе этих интерфейсов несколько типовых шагов пайплайна. 3. Сделали несколько кастомных форматов данных и инкапсулировали в них логику сохранения/загрузки. inference проект 1 Библиотека
  19. Что получили встреча пайплайнов с оркестратором 1. Изолированный и декомпозированный

    spark и python код в рамках одного проекта, который легко использовать повторно. 2. Возможность запуска пайплайнов одного проекта в отдельных тасках Airflow на разной инфраструктуре. Step Step Step Task Task Task MLServer Spark MLServe r run_pipeline( step_name=”...”, pipeline_name=”...”, project_name=“ranking”, … ) train_second_model train_first_model Task
  20. Какие следующие шаги движок Движок пайплайнов Монорепа с исследованиями train

    проект 2 Steps Jupyter VS Code / PyCharm PROD train проект 1 • Выбираем движок Пайплайнов с оглядкой на инфраструктуру MLE DS Pipeline Библиотека Библиотека inference проект 1
  21. Какие следующие шаги движок, шаги Движок пайплайнов Монорепа с исследованиями

    train проект 2 Steps Jupyter VS Code / PyCharm PROD train проект 1 • Выбираем движок Пайплайнов с оглядкой на инфраструктуру • Продолжаем собирать и настраивать коллекцию универсальных шагов для повторного использования MLE DS Pipeline Библиотека Библиотека inference проект 1
  22. Какие следующие шаги движок, шаги, шаблоны Движок пайплайнов Монорепа с

    исследованиями train проект 2 Steps Jupyter VS Code / PyCharm PROD train проект 1 • Выбираем движок Пайплайнов с оглядкой на инфраструктуру • Продолжаем собирать и настраивать коллекцию универсальных шагов для повторного использования • Попробуем start-up шаблоны для проектов и экспериментов в Jupyter MLE DS Pipeline Библиотека Библиотека inference проект 1 Шаблон
  23. Какие следующие шаги движок, шаги, шаблоны, эксперименты Движок пайплайнов Монорепа

    с исследованиями train проект 2 Steps Jupyter VS Code / PyCharm PROD train проект 1 • Выбираем движок Пайплайнов с оглядкой на инфраструктуру • Продолжаем собирать и настраивать коллекцию универсальных шагов для повторного использования • Попробуем start-up шаблоны для проектов и экспериментов в Jupyter • Универсализируем проведение экспериментов MLE DS Pipeline Библиотека inference проект 1 Шаблон Эксперименты Библиотека
  24. 26 Выводы 1. Использование шаблона проектирования Пайплайн, позволяет писать структурированный

    код, который легче использовать повторно. 2. Пайплайны полезны для проведения экспериментов. 3. Шаги пайплайна удобно привязать к инфраструктуре, есть много фреймворков для этого, но выбрать, развернуть и привить любой из них в компании может быть не просто.