ClearML Интеграция
О сайте ClearML
ClearML Это набор инструментов с открытым исходным кодом, призванный сэкономить твое время ⏱️.
🔨 Отслеживай каждый тренировочный запуск YOLOv5 в менеджере экспериментов.
🔧 Версифицируй и легко получай доступ к своим пользовательским тренировочным данным с помощью интегрированногоинструмента ClearML Data Versioning Tool.
🔦 Удаленно тренируйся и контролируй свои тренировки 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 для тебя всякий раз, когда в очереди будут обнаружены эксперименты. Как только задания будут обработаны, автоскалер автоматически отключит удаленные машины, и ты перестанешь платить!
Посмотри видео о начале работы с автоскалерами ниже.