Учебное пособие по использованию DagsHub для улучшения конвейера обучения модели машинного обучения с использованием отслеживания экспериментов.

Оглавление

  1. Мотивация
  2. Как мы отслеживаем эксперименты по машинному обучению?
  3. Руководство
  4. Последние мысли

1. Мотивация

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

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

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

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

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

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

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

2. Как мы отслеживаем эксперименты по машинному обучению?

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

Альтернативой является использование Github, так как он, в конце концов, предназначен для контроля версий. Но Github не подходит для хранения больших объемов данных. Обходным путем здесь может быть использование большой файловой системы Git (LFS), но даже это показало признаки того, что это не подходящее решение для управления большими данными. Мы могли бы использовать Data Version Control (DVC), библиотеку Python, которая помогает легко хранить данные и файлы моделей вне git, сохраняя при этом почти такой же пользовательский интерфейс, как если бы они хранились в git. Это, однако, требует настройки облачных сервисов для хранения данных, что требует значительных ноу-хау в DevOps.

Что, если бы мы могли иметь все это и даже больше, используя одну платформу, основанную на Git-подобном интерфейсе командной строки.

Войдите в DagsHub.

DagsHub — это веб-платформа, основанная на инструментах с открытым исходным кодом, оптимизированная для науки о данных и ориентированная на сообщество открытого исходного кода. - dagshub.com/about

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

3. Учебник

В этом руководстве мы будем использовать регистратор DagsHub для отслеживания экспериментов. Рабочий процесс здесь предполагает, что у вас есть базовые знания о git и sklearn. Мы начнем с некоторых основных требований в разделах 3.1 и 3.2, а затем продемонстрируем, как использовать DagsHub для отслеживания экспериментов в разделе 3.3.

3.1 Система управления файлами

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

ª   model.ipynb
ª   
+---data
ª       
+---models
ª

В рабочем каталоге у нас есть model.ipynb, в котором есть функция (подробнее об этом позже) для создания разных моделей. В дополнение к этому у нас также есть две папки с именами data и models внутри нашего рабочего каталога. В data у нас будет набор данных, с которым мы будем работать, а наша папка models является заполнителем для сохранения файлов рассола различных моделей, которые мы будем создавать во время каждого запуск эксперимента.

3.2 Цепочка экспериментов

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

Приведенный выше код разделен на три части.

Зависимости — это импорт пакетов Python, необходимых для запуска функции.

import pandas as pd
import dagshub
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn import svm
from sklearn.metrics import accuracy_score
import pickle

Функция регистрации параметров модели имеет несколько движущихся частей.

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

#reading the data    
df = pd.read_csv('data\iris.csv')    
#splitting in features and labels    
X  = df[['SepalLengthCm','SepalWidthCm','PetalLengthCm']]    
y = df['Species']

Затем набор данных разделяется на обучающие и тестовые данные, где 30% от общего объема данных используется для тестирования с использованием sklearn’s test_train_split.

#test train split    
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=True, random_state=42)

Далее мы представляем регистратор DagsHub для записи гиперпараметров и показателей модели. Функция подгонки модели вызывается в обучающем наборе и сохраняется с помощью модуля Python pickle в папке models.

#model defnition        
model = model_type(random_state=42)        
#log the model parameters        logger.log_hyperparams(model_class=type(model).__name__)        logger.log_hyperparams({'model': model.get_params()})        #training the model        
model.fit(X_train, y_train)
y_pred = rfc.predict(X_test)        
#log the model's performances        logger.log_metrics({f'accuracy':round(accuracy_score(y_test, y_pred),3)})        
#saving the model        
file_name = model_type.__name__ + '_model.sav'        pickle.dump(model, open('models/'+ file_name, 'wb'))

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

#running an experiment
model_run(RandomForestClassifier)

Если все прошло как надо, у нас должны быть metrics.csv, params.yml и файл .sav в моделях папка. Ниже приведена файловая структура для проверки.

ª   model.ipynb
ª   metrics.csv
ª   params.yml
ª   
+---data
ª       iris.csv
ª       
+---models
ª       RandomForestClassifier_model.sav

3.3 Отслеживание экспериментов с помощью DagsHub Logger

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

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

Чтобы настроить репозиторий DagsHub, нажмите Создать в правом верхнем углу на панели управления DagsHub.

Следуйте инструкциям на странице, чтобы создать репозиторий. Вы можете оставить большинство полей пустыми, кроме «Имя репозитория».

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

git init
git remote add origin https://dagshub.com/bijilsubhash/dagshub-tutorial.git

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

pip install dvc
dvc init
dvc remote add origin https://dagshub.com/bijilsubhash/dagshub-tutorial.dvc
dvc remote modify origin --local auth basic
dvc remote modify origin --local user bijilsubhash
dvc remote modify origin --local password your_token

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

git add .dvc .dvcignore
git commit -m 'dvc initialized'
git push -u origin master

Далее мы можем отправить файлы, связанные с нашим последним экспериментом, в git.

git add metrics.csv params.yml
git commit -m 'RandomForestClassifier'
git push -u origin master

Мы можем приступить к добавлению файлов модели и данных в удаленное хранилище DVC на Dagshub.

dvc add 'data/iris.csv' 'models/RandomForestClassifier_model.sav'
dvc push -r origin

После добавления файлов в DVC вы увидите несколько файлов .dvc и файлов .gitignore в папке data и models . Вы также должны подтолкнуть их к git. Файлы .dvc, которые мы отправляем в git, служат метаданными, которые сопоставляются с соответствующими данными и моделью, хранящимися в удаленном хранилище DVC.

git add 'data\iris.csv.dvc' 'models\RandomForestClassifier_model.sav.dvc' 'models\.gitignore' 'data\.gitignore'
git commit -m '.dvc and .gitignore'
git push -u origin master

Если вы зайдете на дагшаб, то заметите, что все файлы обновлены и доступны в репозитории.

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

Количество экспериментов, которые вы можете провести, не ограничено. Для краткости этого урока я собираюсь запустить еще две модели (логистическая регрессия и машина опорных векторов).

Вот файловая структура в нашем рабочем каталоге после запуска еще двух моделей и их отправки в DagsHub.

ª   model.ipynb
ª   .dvcignore
ª   metrics.csv
ª   params.yml
ª   
+---data
ª       iris.csv
ª       .gitignore
ª       iris.csv.dvc
ª       
+---models
ª       RandomForestClassifier_model.sav
ª       .gitignore
ª       RandomForestClassifier_model.sav.dvc
ª       LogisticRegression_model.sav
ª       LogisticRegression_model.sav.dvc
ª       SVC_model.sav
ª       SVC_model.sav.dvc

Как видите, у нас есть еще два файла .sav вместе со связанными файлами .dvc для моделей логистической регрессии и опорных векторов.

В репозитории на вкладке «Эксперименты» мы также можем заметить еще 2 записи из самых последних экспериментов.

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

Наконец, вот ссылка на репозиторий DagsHub, который использовался в этом руководстве для справки — https://dagshub.com/bijilsubhash/dagshub-tutorial.

4. Заключительные мысли

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