Вопрос или проблема
Я хотел бы внедрить некоторые элементы MLOps в свой репозиторий и присматриваюсь к CML от Iterative AI. Согласно тому, что я прочитал, это нечто вроде CI для ML, которое рассматривает изменения в данных как изменения в коде, чтобы автоматизировать обучение и т. д. в конвейере CI PR.
Сейчас я сохраняю несколько классификаторов в формате pickle в одном репозитории. Скажем, у меня есть Классификаторы A, B и C. Эти классификаторы были обучены на разных наборах данных (но в рамках одного проекта) и могут иметь разные скрипты для обучения. В кодовом репозитории, например, я могу видеть, что рабочий процесс CI запускает все модульные тесты, несмотря на то, что некоторые из них не изменились. Поэтому с подходом CML мне интересно, возможно ли обучить классификатор, если имеются изменения в коде/данных?
Спасибо!
.
Ответ или решение
Конечно, использование Iterative AI’s CML (Continuous Machine Learning) в вашем репозитории может значительно улучшить процессы MLOps, автоматизируя тренировки моделей на основе изменений в коде и данных, что называется CI для машинного обучения. Давайте подробнее рассмотрим, как именно вам можно это реализовать.
Факты
Iterative AI’s CML — это инструмент для обеспечения непрерывной интеграции (CI) в проектах машинного обучения. Эта концепция позволяет автоматизировать тренировки и оценку изменений прямо в pull request (PR), что повышает эффективность и повторяемость результатов. CML использует изменения в данных и коде как «триггеры» для автоматического исполнения тренировочных скриптов.
Основная идея
Ваша цель — адаптировать CI-подход для работы с машинами обучения, особенно с учетом того, что вы используете разные классификаторы (A, B и C), каждый из которых обучен на различных данных и имеет отдельные скрипты тренировок. При этом необходимо исключить повторные тренировки моделей, код и данные которых не изменились между коммитами.
Решение
-
Настройка Git и DVC: Используйте DVC (Data Version Control) для управления версиями данных, аналогично тому, как Git управляет версионностью кода. Это позволит отслеживать изменения в данных так же, как и в коде.
-
Проблема дифференциации: Для автоматизации тренировок на изменившихся данных можно использовать возможность CML по идентификации изменений. Например, с помощью
dvc diff
, вы можете определить какие именно части набора данных были изменены и определить необходимость переобучения только для тех моделей, которые зависят от этих измененных данных. -
Настройка тренировки: Для каждого классификатора создайте свой pipeline, который будет запускаться при обнаружении соответствующих изменений. Интегрируйте команды CML в ваш GitHub Actions или любой другой CI/CD инструментарий, чтобы только специфические классификаторы запускали тренировку.
-
Автоматизация через CML: Используйте CML для отслеживания изменений и автоматического запуска соответствующих тренировочных скриптов. Это позволяет значительно ускорить процесс отклика на изменения и избегать необоснованных затрат ресурсов на обучение неизменно точных моделей.
Доказательства (Examples)
На примере использования GitHub Actions:
name: Model Training
on:
pull_request:
paths:
- 'data/**'
- 'models/A/**'
- 'models/B/**'
- 'models/C/**'
jobs:
train-model-a:
if: contains(github.event.head_commit.message, '[A]')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Train Classifier A
run: |
dvc pull data/A
python train_A.py
train-model-b:
if: contains(github.event.head_commit.message, '[B]')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Train Classifier B
run: |
dvc pull data/B
python train_B.py
Этот YAML файл настраивает CI pipeline, который запускается при изменениях в PR, а специфические модели обучаются только при изменении данных, затрагивающих эти модели.
Тон
Используя Iterative AI’s CML, вы получаете возможность гибко и эффективно управлять процессом обучения моделей, минимизируя временные и ресурсные затраты и позволяя вашей команде сосредоточиться на улучшении качества моделей, а не на рутинных задачах.