Отчет по заданию DVC

Это задание размещено в отдельной ветке “dvc” основного репозитория.

Пайплайн подготовки данных и обучения модели

Реализован пайплайн в dvc.yaml для воспроизведения цепочки машинного обучения с версионированием данных, моделей, экспериментов и артефактов. Пайплан включает следующие стадии (шаги):

  • Подготовка сырых данных (срез из датасета)
  • Разделение данных на тренировочную и тестовую выборки
  • Векторизация TF/IDF для обеих выборок
  • Тренировка ML-модели логистической регрессии
  • Предсказание результатов на тестовой выборке

Для каждого шага пайплайна запускается отдельный Python-скрипт, реализующий соответствующий функционал. Сформированные данные и/или модели передаются на следующий шаг. И далее по цепочке до завершающего формирования артефактов ML-модели.

Подготовка хранилища и первичных данных

В проекте используются папки datad/ и srcd/ для данных и скриптов, соответственно.

Подготовка хранилища DVC:

dvc init
dvc remote add -d --project gdrive gdrive://<URL>

Скачивание сырого датасета:

kaggle datasets download -d kritanjalijain/amazon-reviews -p datad/
gzip datad/train.csv

Отправка датасета в удаленное хранилище DVC:

dvc add datad/train.csv.gz
dvc push

Подготовка и запуск пайплайна

Стадии (stage) первоначально добавлялись поочередно в dvc.yaml, после чего пайплайн запускался, для проверки работоспособности.

dvc repro или
dvc repro <STAGE_NAME>

По выполнении стадии добавлялись изменишиеся файлы в git (как рекомендует DVC):

git add dvc.lock 'datad\<SUB_FOLDER>\.gitignore'
git add dvc.yaml (опционально)

Под <SUB_FOLDER> в текущем проекте подразумеваются подпапки datad\features, datad\processed, datad\prepared, куда сохранялись результаты генерации в процессе выполнения пайплайна.

Затем новые и/или обновленные данные отправлялись в удаленное хранилище:

dvc push

И, наконец, полный запуск пайплайна:

dvc repro или
dvc repro --force (принудительно)

Запуск пайплайна в CI/CD

Развертывание пайплайна в CI/CD реализовано в dvc-ci.yml. Типичный сценарий развертывания включает следующие шаги:

  1. Предподготовка: Формирование ключей/секретов для доступа к выбранному облачному хранилищу
  2. Развертывание среды с DVC и пакетами машинного обучения, нужными для Python-скриптов
  3. Авторизация в облачном хранилище с использованием ключей/секретов
  4. Синхронизация данных с хранилищем (если оно существует) или скачивание сырого датасета из первоисточника - на выбор, в зависимости от задачи
  5. Собственно запуск пайплайна машинного обучения
  6. Сохранение метрик и артефактов ML-модели в область артефактов Gitlab

Воспроизводимость пайплайна

Решена залача воспроизводимости пайплайна как локально, так и в CI/CD. Файлы dvc.lock сохранены в артефактах.

Файлы dvc.lock идентичны, хэши совпадают.

Результат предсказания модели наглядно

Выходной json с метриками:

{
    "1": {
        "precision": 0.80045,
        "recall": 0.80182,
        "f1-score": 0.80113,
        "support": 1761.0
    },
    "2": {
        "precision": 0.84392,
        "recall": 0.84279,
        "f1-score": 0.84335,
        "support": 2239.0
    },
    "accuracy": 0.82475,
    "macro avg": {
        "precision": 0.82219,
        "recall": 0.8223,
        "f1-score": 0.82224,
        "support": 4000.0
    },
    "weighted avg": {
        "precision": 0.82478,
        "recall": 0.82475,
        "f1-score": 0.82477,
        "support": 4000.0
    }
}