Интеграция с ClearML


О ClearML
ClearML — это open-source MLOps-платформа, созданная для оптимизации твоего рабочего процесса машинного обучения и экономии времени ⏱️.
🔨 Отслеживай каждую тренировку YOLOv5 в менеджере экспериментов
🔧 Версионируй и легко получай доступ к своим обучающие данные с помощью интегрированного Data Versioning Tool
🔦 Удаленно тренируй и отслеживай свои запуски YOLOv5, используя ClearML Agent
🔬 Получай наилучший mAP с помощью ClearML оптимизации гиперпараметров
🔭 Преврати свою только что обученную YOLOv5 model into an API всего за несколько команд, используя ClearML Serving
And so much more. It's up to you how many of these tools you want to use, you can stick to the experiment manager, or chain them all together into an impressive pipeline!

🦾 Настройка
Чтобы отслеживать эксперименты и/или данные, ClearML должен связываться с сервером. У тебя есть 2 способа его получить:
Либо зарегистрируйся бесплатно в ClearML Hosted Service или разверни свой собственный ClearML server. Сам сервер тоже является open-source, так что даже если ты работаешь с конфиденциальными данными, всё будет в порядке!
-
Установи
clearmlpython-пакет:pip install clearml -
Подключи ClearML SDK к серверу, создав учетные данные (перейди в правый верхний угол: Settings -> Workspace -> Create new credentials), затем выполни приведенную ниже команду и следуй инструкциям:
clearml-init
Вот и всё! Готово 😎
🚀 Тренировка YOLOv5 с ClearML
Чтобы включить отслеживание экспериментов ClearML, просто установи пакет ClearML через pip, как показано ранее (или выполни команду ниже, если пропустил этот шаг).
pip install clearmlЭто включит интеграцию со скриптом тренировки YOLOv5. Отныне каждая тренировка будет фиксироваться и сохраняться в ClearML менеджере экспериментов.
Если хочешь изменить project_name или task_name модели используй режим --project и --name аргументы train.py скрипта, то по умолчанию проект будет называться YOLOv5 а задача Training. ВНИМАНИЕ: ClearML использует / в качестве разделителя для подпроектов, так что будь осторожен, используя / в названии своего проекта!
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cacheили с пользовательским названием проекта и задачи:
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, потери, скорость обучения и т.д.)
- Общая информация: данные о машине, время выполнения, дата создания и т.д.
- Все созданные графики, такие как коррелограмма меток и матрицей ошибок
- Изображения с ограничивающими рамками (BBox) для эпоха
- Мозаика за эпоху
- Валидационные изображения за эпоху
Немало, правда? 🤯 Теперь мы можем визуализировать всю эту информацию в интерфейсе ClearML, чтобы получить обзор прогресса тренировки. Добавляй пользовательские столбцы в таблицу (например, mAP_0.5), чтобы легко сортировать модели по эффективности. Или выбери несколько экспериментов и сравни их напрямую!
С этой информацией можно сделать еще больше, например, оптимизацию гиперпараметров и удаленное выполнение, так что читай дальше, если хочешь узнать, как это работает!
🔗 Управление версиями набора данных
Версионировать данные отдельно от кода — хорошая практика, которая упрощает получение последней версии. Этот репозиторий поддерживает указание ID версии набора данных, и он позаботится о загрузке данных, если их еще нет. Кроме того, этот процесс сохраняет ID используемого набора данных как часть параметров задачи, поэтому ты всегда будешь знать наверняка, какие данные использовались в каком эксперименте!

Подготовь свой набор данных
Репозиторий YOLOv5 поддерживает ряд различных наборов данных с помощью YAML-файлов, содержащих информацию о них. По умолчанию наборы данных загружаются в папку ../datasets относительно корневой папки репозитория. Так что если ты скачал набор данных coco128 по ссылке в YAML или с помощью скриптов из YOLOv5, у тебя будет такая структура папок:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtНо это может быть любой набор данных. Не стесняйся использовать свой собственный, главное — придерживайся этой структуры папок.
Далее, ⚠️скопируй соответствующий YAML-файл в корень папки с набором данных⚠️. Этот YAML-файл содержит информацию, необходимую ClearML для правильной работы с набором данных. Ты, конечно, можешь составить его сам, просто следуй структуре примеров YAML.
В основном нам нужны следующие ключи: path, train, test, val, nc, names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txtЗагрузи свой набор данных
Чтобы добавить этот набор данных в ClearML как версионированный, перейди в корневую папку набора данных (например, ../datasets/coco128 при работе из репозитория YOLOv5) и выполни следующую команду:
cd ../datasets/coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .Команда 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 — мы по сути клонируем ее и изменим гиперпараметры.
Тебе нужно будет вставить ID этой 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 делает именно это: он слушает очередь в ожидании задач, и когда находит одну, воссоздает окружение и запускает её, продолжая отправлять скалярные значения, графики и т.д. в менеджер экспериментов.
Ты можешь превратить любую машину (облачную VM, локальную машину с GPU, свой ноутбук...) в агент ClearML, просто запустив:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]Клонирование, редактирование и постановка в очередь
Когда агент запущен, мы можем дать ему работу. Помнишь из раздела 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 if 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, как только в очереди будут обнаружены эксперименты. Как только задачи будут обработаны, автомасштабировщик автоматически выключит удаленные машины, и ты перестанешь платить!
Посмотри видео по началу работы с автомасштабировщиками ниже.
Узнать больше
Для получения дополнительной информации об интеграции ClearML с моделями Ultralytics, ознакомься с нашим руководством по интеграции ClearML и узнай, как ты можешь улучшить свой MLOps workflow с помощью других инструментов для отслеживания экспериментов.