Удаленно обучай и контролируй Ultralytics YOLOv5 с помощью ClearML
Узнай о нашем партнерстве с ClearML, которое улучшает работу с Ultralytics YOLOv5 благодаря бесшовной интеграции ML, отслеживанию экспериментов и другим возможностям.

В Ultralytics мы на коммерческой основе сотрудничаем с другими стартапами, чтобы финансировать исследования и разработку наших отличных инструментов с открытым исходным кодом, таких как YOLOv5, и сохранять их бесплатными для всех. Эта статья может содержать партнёрские ссылки на этих партнёров.
ClearML — наш новый партнёр: инструментарий с открытым исходным кодом, созданный для экономии твоего времени.
Стремясь ускорить внедрение ML, ClearML упрощает интеграцию ML в любой программный или аппаратный продукт.
Эта интеграция ещё больше упрощает обучение модели YOLOv5 и автоматическое отслеживание эксперимента с помощью менеджера экспериментов ClearML. Ты можешь легко указать ID версии набора данных ClearML в качестве входных данных, и он будет автоматически использоваться для обучения модели.
Выведи отслеживание экспериментов на новый уровень#
- Отслеживай каждый запуск обучения YOLOv5 в менеджере экспериментов.
- Версионируй и легко получай доступ к своим данным для обучения с помощью встроенного инструмента версионирования данных ClearML.
- Получи максимально высокий mAP с помощью оптимизации гиперпараметров ClearML.
- Преврати только что обученную модель YOLOv5 в API всего несколькими командами с помощью ClearML Serving.
Только тебе решать, сколько из этих инструментов использовать: можно ограничиться менеджером экспериментов или объединить их в впечатляющий конвейер.
Настройка#
Чтобы отслеживать эксперименты и данные, ClearML должен взаимодействовать с сервером. У тебя есть два варианта: бесплатно зарегистрироваться в размещённом сервисе ClearML или настроить собственный сервер — см. документацию по развёртыванию ClearML Server.
Даже сервер имеет открытый исходный код, поэтому при работе с конфиденциальными данными проблем не возникнет!
- Установи пакет clearml для Python:
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, перейди к нашему пользовательскому логгеру, где это можно сделать: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cacheБудут захвачены:
- Исходный код и незакоммиченные изменения
- Установленные пакеты
- (Гипер)параметры
- Файлы модели (используй --save-period n, чтобы сохранять контрольную точку каждые n эпох)
- Вывод консоли
- Скалярные показатели (mAP_0.5, mAP_0.5:0.95, точность, полнота, потери, скорости обучения, ...)
- Общая информация, например сведения о машине, среде выполнения, дате создания и т. д.
- Все созданные графики, например коррелограмма меток и матрица ошибок
- Изображения с ограничивающими рамками для каждой эпохи
- Мозаика для каждой эпохи
- Изображения валидации для каждой эпохи
Неплохо! Теперь мы можем визуализировать всю эту информацию в интерфейсе 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 как версионируемый набор данных, перейди в корневую папку набора данных и выполни следующую команду:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .Команда clearml-data sync на самом деле является сокращённой командой. Также можно выполнить эти команды по очереди:
# Optionally add --parent 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:// --weights yolov5s.pt --cacheОптимизация гиперпараметров#
Теперь, когда у нас есть эксперименты и версия данных, пора посмотреть, что можно построить на их основе!
Благодаря информации о коде, установленных пакетах и среде сам эксперимент теперь полностью воспроизводим. На самом деле ClearML позволяет клонировать эксперимент и даже изменять его параметры. Затем мы можем просто автоматически повторно запустить его с новыми параметрами — именно это в основном и делает HPO!
Чтобы локально выполнить оптимизацию гиперпараметров, мы подготовили для тебя готовый скрипт. Убедись, что задача обучения была запущена хотя бы один раз и поэтому появилась в менеджере экспериментов ClearML: по сути, мы клонируем её и изменяем гиперпараметры.
Тебе нужно указать ID этой шаблонной задачи в скрипте, расположенном по адресу 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 [--docker]Клонирование, редактирование и постановка в очередь#
Теперь, когда наш агент работает, мы можем дать ему задачу. Помнишь из раздела об HPO, что мы можем клонировать задачу и редактировать гиперпараметры? Это можно сделать и через интерфейс!
🪄 Клонируй эксперимент, щёлкнув по нему правой кнопкой мыши
🎯 Измени гиперпараметры по своему усмотрению
⏳ Поставь задачу в любую из очередей, щёлкнув по ней правой кнопкой мыши
Удалённое выполнение задачи#
Теперь ты можешь клонировать задачу, как описано выше, или просто пометить текущий скрипт, добавив task.execute_remotely(), и при выполнении он будет помещён в очередь, чтобы агент начал с ним работать!
Чтобы удалённо запустить скрипт обучения YOLOv5, достаточно добавить эту строку в скрипт train.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Есть вопросы? Присоединяйся к нашему сообществу и задай свой вопрос уже сегодня!









