ClearML Интеграция
О сайте ClearML
ClearML это набор инструментов с открытым исходным кодом, призванный сэкономить ваше время ⏱️.
🔨 Отслеживайте каждую тренировку YOLOv5 в менеджере экспериментов
🔧 Версируйте и легко получайте доступ к своим пользовательским учебным данным с помощью интегрированногоинструмента версионирования данных ClearML .
🔦 Удаленная тренировка и мониторинг тренировок YOLOv5 с помощью ClearML Agent.
🔬 Получение наилучшей карты с помощью ClearML оптимизации гиперпараметров
🔭 Превратите только что обученную модельYOLOv5 в API с помощью нескольких команд, используя ClearML Serving.
И многое другое. Вы сами решаете, сколько из этих инструментов использовать: можно ограничиться менеджером экспериментов, а можно объединить их в впечатляющий конвейер!
🦾 Подготовка к работе
Чтобы отслеживать результаты ваших экспериментов и/или данные, ClearML должен взаимодействовать с сервером. У вас есть 2 варианта, как его получить:
Вы можете либо бесплатно зарегистрироваться на хостингеClearML , либо создать свой собственный сервер, см. здесь. Даже сервер имеет открытый исходный код, так что, если вы работаете с конфиденциальными данными, у вас все должно получиться!
-
Установите
clearml
python пакет: -
Подключите ClearML SDK к серверу, создав учетные данные (перейдите справа вверху в Настройки -> Рабочее пространство -> Создать новые учетные данные), затем выполните приведенную ниже команду и следуйте инструкциям:
Вот и все! Вы закончили 😎
🚀 Обучение YOLOv5 С ClearML
Чтобы включить отслеживание экспериментов ClearML , просто установите пакет ClearML pip.
Это позволит интегрироваться с обучающим скриптом YOLOv5 . С этого момента каждый тренировочный прогон будет фиксироваться и сохраняться менеджером экспериментов ClearML .
Если вы хотите изменить project_name
или task_name
используйте --project
и --name
аргументы train.py
скрипт, по умолчанию проект будет называться YOLOv5
и задача Training
. ПРИМЕЧАНИЕ: ClearML использует /
в качестве разделителя подпроектов, поэтому будьте осторожны при использовании /
в названии вашего проекта!
или с пользовательским названием проекта и задачи:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
Это позволит запечатлеть:
- Исходный код + нефиксированные изменения
- Установленные пакеты
- (Гипер)параметры
- Файлы моделей (используйте
--save-period n
для сохранения контрольной точки каждые n эпох) - Консольный вывод
- Скаляры (mAP_0.5, mAP_0.5:0.95, precision, recall, losses, learning rates, ...)
- Общая информация, такая как сведения о машине, время работы, дата создания и т. д.
- Все построенные графики, такие как коррелограмма меток и матрица смешения
- Изображения с ограничительными рамками за эпоху
- Мозаика на эпоху
- Валидационные изображения за эпоху
Многовато, правда? 🤯 Теперь мы можем визуализировать всю эту информацию в пользовательском интерфейсе ClearML , чтобы получить представление о ходе обучения. Добавьте в таблицу пользовательские столбцы (например, mAP_0.5), чтобы можно было легко отсортировать модели, показавшие наилучшие результаты. Или выберите несколько экспериментов и напрямую сравните их!
Со всей этой информацией мы можем сделать еще больше, например, оптимизировать гиперпараметры и удаленное выполнение, так что продолжайте читать, если хотите узнать, как это работает!
🔗 Управление версиями наборов данных
Версионирование данных отдельно от кода, как правило, является хорошей идеей и позволяет легко получить последнюю версию. Этот репозиторий поддерживает указание идентификатора версии набора данных, и он обязательно получит данные, если их еще нет. Кроме того, этот рабочий процесс сохраняет идентификатор используемого набора данных в параметрах задачи, так что вы всегда будете знать, какие данные были использованы в том или ином эксперименте!
Подготовьте набор данных
Репозиторий YOLOv5 поддерживает множество различных наборов данных, используя файлы YAML, содержащие информацию о них. По умолчанию наборы данных загружаются в папку ../datasets
по отношению к корневой папке репозитория. Таким образом, если вы загрузили coco128
При использовании набора данных по ссылке в YAML или с помощью скриптов, предоставленных на сайте yolov5, вы получите такую структуру папок:
Но это может быть любой набор данных, который вы пожелаете. Не стесняйтесь использовать свои собственные, если вы придерживаетесь этой структуры папок.
Затем⚠️copy поместите соответствующий YAML-файл в корень набора данных folder⚠️.Этот YAML-файл содержит информацию, которая понадобится ClearML для правильного использования набора данных. Конечно, вы можете сделать это и сами, просто следуйте структуре примеров YAML.
В основном нам нужны следующие ключи: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Загрузите свой набор данных
Чтобы добавить этот набор данных в ClearML в виде версионного набора данных, перейдите в корневую папку набора данных и выполните следующую команду:
Команда clearml-data sync
на самом деле является сокращенной командой. Вы также можете выполнять эти команды одну за другой:
# Optionally add --parent <parent_dataset_id> if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close
Запустите обучение на наборе данных ClearML .
Теперь, когда у вас есть набор данных ClearML , вы можете очень просто использовать его для обучения собственных YOLOv5 🚀 моделей!
python train.py --img 640 --batch 16 --epochs 3 --data clearml://<your_dataset_id> --weights yolov5s.pt --cache
👀 Оптимизация гиперпараметров
Теперь, когда наши эксперименты и данные версифицированы, самое время взглянуть на то, что мы можем создать на их основе!
Используя информацию о коде, установленных пакетах и сведения об окружении, можно полностью воспроизвести сам эксперимент. Фактически, ClearML позволяет клонировать эксперимент и даже изменять его параметры. Затем мы можем просто запустить его с новыми параметрами автоматически, что, по сути, и делает HPO!
Чтобы запустить оптимизацию гиперпараметров локально, мы включили готовый скрипт. Просто убедитесь, что учебная задача была запущена хотя бы один раз, чтобы она была в менеджере экспериментов ClearML . Мы, по сути, клонируем ее и изменим ее гиперпараметры.
Вам нужно будет заполнить идентификатор этого template task
в скрипте, найденном по адресу utils/loggers/clearml/hpo.py
а затем просто запустите его :) Вы можете изменить task.execute_locally()
на task.execute()
чтобы поместить его в очередь ClearML и поручить удаленному агенту работать с ним вместо этого.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py
🤯 Удаленное выполнение (расширенный вариант)
Запускать HPO локально очень удобно, но что, если мы хотим проводить эксперименты на удаленной машине? Может быть, у вас есть доступ к очень мощной машине GPU на месте, или у вас есть бюджет на использование облачных GPU. Именно здесь на помощь приходит ClearML Agent. Ознакомьтесь с возможностями агента здесь:
Вкратце: каждый эксперимент, отслеживаемый менеджером экспериментов, содержит достаточно информации, чтобы воспроизвести его на другой машине (установленные пакеты, незафиксированные изменения и т. д.). Поэтому агент ClearML делает именно это: он прослушивает очередь входящих заданий и, когда находит одно из них, воссоздает среду и запускает его, продолжая сообщать менеджеру экспериментов о скалярах, графиках и т. д.
Вы можете превратить любую машину (облачную виртуальную машину, локальную машину GPU , ваш собственный ноутбук ... ) в агента ClearML , просто запустив его:
Клонирование, редактирование и загрузка
Когда наш агент запущен, мы можем немного поработать над ним. Помните из раздела HPO, что мы можем клонировать задачу и редактировать гиперпараметры? Мы можем сделать это и из интерфейса!
🪄 Клонируйте эксперимент, щелкнув его правой кнопкой мыши.
🎯 Отредактируйте гиперпараметры так, как вам нужно.
⏳ Отнесите задачу к любой из очередей, щелкнув ее правой кнопкой мыши.
Выполнение задачи удаленно
Теперь вы можете клонировать задачу, как мы объясняли выше, или просто пометить текущий скрипт, добавив task.execute_remotely()
и после выполнения он будет помещен в очередь, чтобы агент начал работать!
Чтобы запустить обучающий скрипт YOLOv5 удаленно, достаточно добавить эту строку в скрипт training.py после инстанцирования регистратора clearml :
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ ADD THIS LINE
# Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML
data_dict = loggers.clearml.data_dict
# ...
При запуске обучающего скрипта после этого изменения python будет выполнять скрипт до этой строки, после чего упакует код и отправит его в очередь!
Автомасштабирование рабочих
ClearML также поставляется с автоскалерами! Этот инструмент будет автоматически создавать новые удаленные машины в облаке по вашему выбору (AWS, GCP, Azure) и превращать их в агентов ClearML при обнаружении в очереди экспериментов. Как только задания будут обработаны, автоскалер автоматически отключит удаленные машины, и вы перестанете платить!
Посмотрите видео о начале работы с автоскалерами ниже.