Храните свои данные, модели, эксперименты и код в одном месте

Мотивация

Как специалист по данным, вы можете захотеть изменить версию своего кода, модели, данных, параметров и метрик, чтобы воспроизвести определенный эксперимент.

GitHub — отличная платформа для управления версиями вашего кода, но она не идеальна для управления версиями ваших данных, модели и метрик по двум причинам:

  • GitHub имеет строгое ограничение на размер файла в 100 МБ, поэтому загрузка среднего двоичного файла может легко превысить этот предел.
  • Беспорядочно сравнивать изменения в разных версиях данных с GitHub. Раньше я вручную принимал более 100 изменений данных после использования git pull, и это было мучительно.

DVC (Контроль версий данных) — идеальный инструмент для управления версиями ваших двоичных данных. Однако вы не можете просматривать отслеживаемые файлы DVC на GitHub.

Было бы неплохо, если бы существовала платформа, похожая на GitHub, но более оптимизированная для специалистов по данным и инженеров по машинному обучению? Вот когда DagsHub пригодится.

Что такое DagsHub?

DagsHub — это платформа для специалистов по данным и инженеров по машинному обучению, позволяющая версионировать свои данные, модели, эксперименты и код.

DagsHub позволяет либо создать новый репозиторий на своей платформе, либо подключиться к репозиторию на GitHub. Если вы хотите создать новый репозиторий на DagsHub, нажмите «Новый репозиторий»:

Если у вас уже есть репозиторий на GitHub и вы хотите перенести его на DagsHub, нажмите «Перенести репозиторий»:

Если вы хотите управлять своим репозиторием как через GitHub, так и через DagsHub, нажмите «Подключить репозиторий»:

Интерфейс вашего нового репозитория на DagsHub должен быть очень похож на интерфейс на GitHub с добавлением некоторых вкладок, таких как Experiments, Data, Models, Notebooks, DVC и Git.

Вы можете проверить репозиторий выше здесь. Давайте рассмотрим некоторые функции DagsHub.

Версия ваших данных и кода

Предположим, что у вас есть локальная копия вашего репозитория GitHub на вашем компьютере, мы будем использовать DVC для версии ваших двоичных данных.

Начните с установки DVC:

pip install dvc

Обычно при использовании DVC вам необходимо использовать внешнее хранилище, такое как Google Drive, Amazon S3, Azure Blob Storage, Google Cloud Storage и т. д. Однако с DagsHub вы можете хранить свои данные непосредственно на платформе.

Чтобы загрузить свои данные в DagsHub, начните с получения ссылки DVC под кнопкой Remote:

Затем установите эту ссылку в качестве удаленного хранилища DVC:

dvc remote add origin https://dagshub.com/khuyentran1401/dagshub-demo.dvc

Добавьте аутентификацию:

dvc remote modify origin --local auth basic
dvc remote modify origin --local user DAGSHUB_USERNAME
dvc remote modify origin --local password DAGSHUB_PASSWORD

Затем добавьте двоичные данные, которые мы хотим хранить на DagsHub. Например, чтобы добавить каталог data/raw, я запускаю:

dvc add data/raw

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

data
├── raw
│   └── marketing_campaign.csv
└── raw.dvc

Отправьте эти файлы в хранилище DagsHub:

dvc push

Теперь мы можем добавить изменения как в данные, так и в код, затем зафиксировать и отправить ваше изменение на GitHub:

git add .
git commit -m 'push data and code'
git push origin master

Если вы используете GitHub и DagsHub одновременно, вам нужно только отправить свои файлы на GitHub. DagsHub автоматически синхронизируется с GitHub!

Примечание. Если DagsHub не синхронизируется, щелкните значок «Обновить» под заголовком репозитория:

Если вы знакомы с DVC, здесь нет ничего нового. Однако волшебство происходит, когда вы посещаете свой репозиторий на DagsHub.

На GitHub вы можете видеть свои .dvc файлы, но не сами данные. Это потому, что фактические данные хранятся где-то еще:

На DagsHub вы можете видеть как файлы .dvc, так и сами данные, потому что данные хранятся на DagsHub!

Это очень удобно, так как я могу смотреть и код, и данные в рамках одной платформы.

Отслеживание экспериментов

Такие библиотеки, как MLFlow, позволяют специалистам по данным отслеживать свои эксперименты вместе с моделями и параметрами. Однако они не отслеживают код.

Было бы неплохо, если бы можно было сохранять код, модели, параметры, данные эксперимента?

Это легко сделать с помощью DagsHub. DagsHub позволяет регистрировать ваши эксперименты с помощью регистратора DagsHub или MLFlow. Ваши эксперименты на вкладке «Эксперимент» должны выглядеть следующим образом:

Рекомендуется использовать MLFlow для быстрого экспериментирования с различными параметрами без фиксации кода. Как только вы найдете эксперименты с хорошими результатами, вы можете использовать регистратор DagsHub, чтобы сохранить результаты в открытых форматах (metric.csv, param.yaml) и инкапсулировать их с кодом, моделью и данными, которые их произвели.

Давайте узнаем, как регистрировать эксперимент с каждым из этих методов.

Регистрируйте свои эксперименты с MLFlow

MLflow — это платформа с открытым исходным кодом, позволяющая отслеживать и сравнивать эксперименты. Чтобы установить MLflow, введите:

pip install mlflow

В приведенном ниже коде я использую MLFlow для регистрации метрик и параметров.

Я также установил URI отслеживания как URL-адрес, найденный в удаленном отслеживании MLflow:

Вот и все! Теперь каждый раз, когда вы запускаете свой код, параметры и показатели для каждого эксперимента будут отображаться на вкладке «Эксперименты» вашего репозитория DagsHub:

Возможность регистрировать свои эксперименты MLflow на удаленном сервере, таком как DagsHub, вместо локальной базы данных позволит вашим товарищам по команде иметь доступ к вашим экспериментам в своем браузере.

Регистрируйте свои эксперименты с помощью DagsHub Logger

Как только вы найдете хороший эксперимент и будете готовы регистрировать код, данные и результаты этого эксперимента, просто переключите MLFlow на регистратор DagsHub.

Чтобы использовать регистратор DagsHub, начните с установки DagsHub:

pip install dagshub

Регистрация ваших экспериментов с помощью регистратора DagsHub очень похожа на регистрацию с помощью MLFlow:

После запуска вашего кода DagsHub автоматически создаст два файла metrics.csv и params.yml в вашем рабочем каталоге:

.
├── metrics.csv
└── params.yml

Добавьте все изменения в тестовую область, затем зафиксируйте и отправьте эти изменения на GitHub:

git add .
git commit -m 'experiment 1'
git push origin master

Теперь новый эксперимент будет зарегистрирован с помощью Git на вкладке «Эксперимент».

Используйте регистратор MLflow и DagsHub одновременно

Несмотря на то, что переключаться между регистратором MLflow и DagsHub полезно, мне показалось неудобным переписывать свой код каждый раз, когда я хочу переключиться на другой регистратор.

Мое решение состояло в том, чтобы создать класс BaseLogger с методами log_metrics и log_params . Каждый метод будет использовать как регистратор MLflow, так и регистратор DagsHub.

С BaseLogger я могу одновременно использовать два регистратора в одной строке кода.

Сравните между экспериментами MLflow

Чтобы сравнить два или более экспериментов, отметьте нужные эксперименты и нажмите «Сравнить».

Вы должны увидеть сравнения всех экспериментов, как показано ниже:

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

Сравните между экспериментами Git

Чтобы сравнить разницу в файлах между двумя экспериментами Git, скопируйте их идентификаторы коммитов на вкладке «Эксперименты»:

Затем вставьте каждый идентификатор коммита в каждую ветку на вкладке «Файлы»:

Файлы, которые различаются между двумя коммитами, будут выделены желтым цветом.

Чтобы увидеть разницу, щелкните файлы. Поскольку отсутствующая информация выделена красным, а дополнительная информация выделена зеленым, мы можем ясно увидеть разницу между двумя коммитами.

Более того, DagsHub предоставляет удобный интерфейс для сравнения двух ноутбуков Jupyter.

Поскольку специалисты по обработке и анализу данных много работают с Jupyter Notebook, полезно иметь возможность сравнить выходные данные двух ноутбуков.

Бонусный совет: создайте конвейер DVC

Иногда вы можете захотеть, чтобы другие поняли рабочий процесс вашего проекта (то есть, как выходные данные одного сценария используются для другого сценария). DagsHub позволяет вам создавать визуализацию вашего рабочего процесса данных через конвейер DVC.

Чтобы создать конвейер DVC, начните с создания файла dvc.yaml. В приведенном ниже коде я разбиваю свой рабочий процесс на 3 этапа: process_data, segment и analyze. Для каждого из этапов

  • cmd указывает команду для выполнения этапа
  • deps указывает зависимости этапа
  • outs определяет выходы этапа
  • metrics задает метрики этапа

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

Теперь вы можете воспроизвести весь конвейер, указанный в dvc.yaml, выполнив:

dvc repro

Выходы:

Running stage 'process_data':
> python src/process_data.py
Updating lock file 'dvc.lock'                                                                                                                                                      
                                                                                                                                                                                   
Running stage 'segment':
> python src/segment.py
Updating lock file 'dvc.lock'                                                                                                                                                      
                                                                                                                                                                                   
Running stage 'analyze':
> python src/run_notebook.py
Updating lock file 'dvc.lock'

Теперь другие смогут воспроизвести ваши результаты, выполнив команду dvc repro. Насколько это удобно?

Затем запустите dvc push, чтобы передать все файлы, отслеживаемые DVC, в DagsHub. Используйте git add и git commit, чтобы отправить изменения в коде и данных на GitHub.

Если вы зайдете в свой репозиторий на DagsHub, вы должны увидеть хороший интерактивный график всего пайплайна на DagsHub!

Вы можете получить более подробную информацию об узле на графике, щелкнув этот узел. Теперь другие могут понять ваш рабочий процесс данных, просто зайдя в ваш репозиторий на DagsHub.

Заключение

Поздравляем! Вы только что узнали, как управлять версиями своего проекта данных с помощью DagsHub. С DagsHub вы можете легко воспроизвести эксперимент и просмотреть все компоненты проекта по науке о данных в одном месте.

Исходный код этой статьи можно найти здесь:



Мне нравится писать об основных концепциях науки о данных и экспериментировать с различными инструментами обработки данных. Вы можете связаться со мной в LinkedIn и Twitter.

Отметьте этот репозиторий, если хотите проверить коды всех статей, которые я написал. Следуйте за мной на Medium, чтобы быть в курсе моих последних статей по науке о данных, таких как эти: