MLOps Data science knowledge

Добро пожаловать

Приветствуем на странице с материалами курса “MLOps и production в DS исследованиях 3.0”.

Как мне..

Скачать презентацию в формате PDF с заметками докладчика?

Для того, чтобы скачать pdf версию презентации с заметками докладчика:

  • На титульном слайде нажмите на название презентации (надо списком авторов). Таким образом к url презентации (без тега слайда) добавится ?showNotes=separate-page&print-pdf.
  • После этого воспользоваться функцией печати вашего браузера, например, через CTRL/CMD+P.
  • Настройте “Destination” на “Save as PDF”.
  • Измените, если необходимо, “Layout” на “Landscape”.
  • Установите “Margins” на None.
  • Включите опцию Background graphics.
  • Сохраните полученную pdf.

Посмотреть практические примеры из презентации?

Для того, чтобы скачать tar.gz архив с примерами - нажмите на ссылку нужного модуля ниже:

Домашние задания

В случае, если вы не успели выполнить домашнее задание в срок указанный на платформе с курсом, однако, очень хотите для себя всё же задания выполнить, можете воспользоваться описанием домашних заданий ниже.

Обращаю внимание, что после завершения срока сдачи домашних заданий, возможности отправить выполненное домашнее задание для проверки нет. Используйте материалы ниже только для самостоятельной работы и самопроверки.

Задание по репозиторию

Цель этого домашнего задания подготовить репозиторий для работы в нем: настроить необходимые линтеры и форматеры, описать конфиг pre-commit и сформировать contributing.md где описано, что и как нужно делать в репозитории для внесения изменений.

Для этого нужно выполнить следующие шаги:

  1. Опубликовать репозиторий на gitlab (или аналоге, но курс ориентирован на gitlab).
  2. Выбрать линтеры и форматеры. Можно выбрать те, которые озвучивались в материалах курса, или какие-то свои, которые вам привычны.
  3. Зафиксировать необходимые зависимости для линтеров.
  4. Настроить pre-commit в репозитории.
  5. Провести настройки линтеров и форматеров в pyproject.toml, прописать основные параметры инструментов.
  6. Зафиксировать в contributing.md, как пользоваться линтерами в вашем проекте.
  7. (*) Добавить в readme.md методологию ведения вашего репозитория.

Задание по docker

Цель этого домашнего задания подготовить себе docker образ для работы с ним. В дальнейшем вы можете использовать его как рабочее место для экспериментов, использовать для CI-CD и поставки зависимостей. Нужно зафиксировать зависимости с помощью одного из пакетных менеджеров (попробуйте что-то новое, не используйте pip), разделите зависимости по группам/окружениям (например dev и prod, в dev можно поместить pre-commit и ruff) выбрать нужный базовый образ и прописать в docker file нужные штаги по настройки окружения и зависимостей.

Для этого нужно выполнить следующие шаги:

  1. Зафиксировать зависимости с помощью одного из пакетных менеджеров
  2. Составить Dockerfile с построением вашего окружения
  3. Прописать команды для его сборки и запуска в readme проекта.

Задание CI-CD и документации

Цель этого домашнего задания настроить CI-CD пайплайн и опубликовать на gitlab pages документацию проекта и исследований. Пайплайн должен включать в себя:

  • DinD – сборку вашего докер образа из предыдущего дз, стоит также опубликовать образ в вашем gitlab docker registry.
  • Линтеринг кода с использованием выбранных линтеров и форматеров
  • Сборка и публикация вашего проекта в виде пакета в gitlab pypi registry.
  • Сборка исследования из quarto/jupyter, документации в html (возможно надо будет скачать данные с помощью kaggle-cli)
  • Публикация на gitlab pages

Помните, что в ci-cd различные credentials надо задавать как секреты – masked variables.

Проведите разведочный анализ на датасет ny-2015-street-tree-census-tree-data. В исследование стоит отобразить следующее:

  • Показать при помощи таблиц превью данных.
  • Продемонстрировать при помощи таблиц или графиков объем пропущенных значений в данных. Например, можно для столбцов, где есть пропуски, построить pie chart с указанием процента пропусков (есть в plotly).
  • Построить диаграммы попарного распределения признаков.
  • Рассчитать и показать матрицу попарных корреляций между вещественными признаками.
  • Отобразить географическое представление деревьев из датасета. В датасете есть поля: latitude и longitude, и, используя библиотеки, которые позволяют отображать положение объектов на карте при помощи широты и долготы, необходимо предоставить в отчете карту расположения деревьев из данных.

Не забудьте зафиксировать ваши наблюдения и выводы полученные в ходе исследования, что интересного вы заметили и как вы это интерпретировали.

Задание по блоку Snakemake

  1. Реализовать пайплайн обработки данных при помощи snakemake, минимум 3 правила - чтение данных, препроцессинг данных, обучение модели.
  2. Добавить как минимум ещё 1 вариант препроцессинга и ещё 1 вариант обучения модели, настроив правила таким образом, чтобы в результате работы пайплана получились минимум 4 артефакта - комбинация двух моделей с двумя разными препроцессингами.
  3. Обобщить хотя бы одно правило, используя named wildcards.
  4. Воспользоваться хотя бы в одном правиле вспомогательной функцией expand.
  5. Добавить readme или отчёт в формате md/qmd, с описанием шагов вашего пайплайна и отображением dag, полученного при помощи внутренних функций snakemake.
  6. Использовать ограничение правил по ресурсам, например, параметр threads до половины числа ядер машины.

Задание по блоку Hydra

  1. Создать как минимум две группы конфигов (для параметров препроцессинга и самой модели), добавить в них структурированные ИЛИ yaml-конфиги.
  2. Интегрировать чтение конфигураций через Compose-API в код разведочного анализа или пайплайнов (например, в скрипт Snakemake), использовать несколько произвольных параметров из прочитанных конфигураций в этом коде.
  3. Использовать instantiate для инициализации модели внутри вспомогательных python-модулей (или скрипта Snakemake).
  4. Добавить (любым удобным способом) в переменные окружения число ядер процессора на своей машине. В одном из конфигов воспользоваться reslover’ом “oc.env” для чтения числа ядер. Использовать это значение в коде обучения или инициализации моделей, ограниив потребление cpu половиной доступных ядер (как вариант - использовать в ограничениях правил Snakemake).

Задание по блоку Lakefs

  1. Написать докер образ для развертки lakefs.
  2. Использовать lakectl вместе с workflow manager system и написать пайплайн загрузки хотя бы двух версий одного файла в развёрнутый lakefs, с последующим чтением и обработкой этих файлов в отдельных шагах пайплайна.
    • (*) Альтернативно можно воспользоваться одной из библиотек интеграции lakefs с python вместо lakectl.

Задание по блоку DVC

Цель домашнего задания познакомится с базовыми функционалом dvc.

Предлагается использовать данные из датасета Amazon reviews, но так же можно использовать свои данные для выполнения задания. Задание состоит из следующих шагов:

  • Добавить исходные данные в DVC.
  • Настроить любое удаленное хранилище для DVC (gdrive/s3/… etc.).
  • Прописать пайплайн подготовки данных и обучения модели с помощью dvc pipelines. В пайплайне нужно сделать следующие шаги:
    • Необходимо сохранить предобработанные данные в dvc.
    • Разделить их на Train и Test и поместить в dvc результат.
    • Обучить енкодеры, векторайзеры, скаллеры и тд и сохранить полученные настройки в dvc.
    • Закодировать данные для обучения и тестирования модели.
    • Обучить простую модель(типа регрессии) и сохранить ее основные метрики (метрики модели на ваш выбор, но чем больше тем лучше).
  • (*) Решить проблему с сериализацией моделей, что бы при полном перезапуске пайплайна (dvc repro –force) на каждом этапе получались одни и те же файлы с точностью до бита.
  • Добавить в CI запуск вашего пайплайна.
    • (*) Сделать проверку совпадения результатов пайплайна в CI с зафиксированной версией в удаленном хранилище.
  • Затем заменить модель на более сложную(например random forest/ catboost) и перезапустить пайплайн и зафиксировать его результаты.
  • (*) Описать исследование сравнения двух моделей используя dvc.api для получения результатов каждой модели и опубликовать на gitlab pages.

Задание по блоку MLflow

Цель домашнего задания познакомится с базовыми функционалом MLflow.

Предлагается использовать данные из датасета Amazon reviews, но так же можно использовать свои данные для выполнения задания. Задание состоит из следующих шагов:

  • Настроить MLflow - развернуть на своих локальных мощностях(локально или через свой инстанс)
  • Провести обучение нескольких (минимум двух) моделей на предложенных данных и зафиксировать результаты в MLflow
  • Составить MLflow report по сравнению моделей по метрикам, используя результаты экспериментов и инструмента сравнения в MLflow. Выбрать наилучший эксперимент исходя из метрик в интерфейсе MLflow.

Задание по блоку ClearML

Цель домашнего задания познакомится с базовыми функционалом clearml.

Предлагается использовать данные из датасета Amazon reviews, но так же можно использовать свои данные для выполнения задания. Задание состоит из следующих шагов:

  1. Настроить clear ml (развернуть на своих локальных мощностях или воспользоваться облачной версией)
  2. Провести обучение нескольких (минимум двух) моделей на предложенных данных и зафиксировать результаты в clear ml
  3. Составить clear ml report по сравнению моделей по метрикам, используя результаты экспериментов и инструмента сравнения в clear ml.

(*) доп задание: использовать пайплайны clear ml для проведения исследований на предложенном датасете. Цель задания познакомится с пайплайнами, их переиспользованием и clear ml agent.

  1. Составить пайплайн по обработке и кодированию данных, результатом пайплайна являются подготовленные выборки для обучения и тестирования модели.
  2. Составить несколько пайплайнов по обучению моделей, в которых используются первый пайплайн (точнее задача пайплайна в clear ml, а не python функция)
  3. Реализовать запуск всех пайплайнов с помощью clear ml agent.

Результаты пайплайнов могут использоваться в основной части задания по сравнению моделей и составлению отчёта.

Задание по блоку Hypothesis

Цель домашнего задания познакомится с базовыми функционалом hypothesis.

Предлагается выбрать уже реализованную в вашем проекте функцию/метод подготовки данных.

Необходимо подготовить отчёт, в котором:

  1. Включить текущую реализацию функции подготовки данных.
  2. Описать на каких значениях функция работает и какими свойствами должен обладать результат.
  3. Реализовать тестовую функцию с использованием hypothesis.
  4. Отобразить в отчёте пример того, на каких значениях свойства не выполняются (если таких нет, то поздравляю, вы молодец, но стоит выбрать другую функцию тогда, а тест можете оставить в проекте, раз уже написан).
  5. Зафиксировать в отчёте какие изменения вносились в реализацию функции, для устранения несоответствия свойствам.
  6. Написать тестовую функцию проверяющую соответствие результатов между начальной и итоговой реализацией (техника test oracle).