Удалённо обучай и контролируй Ultralytics YOLOv5 с помощью ClearML
Узнай, как отслеживать эксперименты, версионировать наборы данных, настраивать гиперпараметры и обучать модели Ultralytics YOLOv5 на удалённых машинах с ClearML.
Nuvola Ladi6 мин. чтения
В Ultralytics мы сотрудничаем с другими стартапами на коммерческой основе, чтобы финансировать исследования и разработку наших инструментов с открытым исходным кодом, таких как YOLOv5, и сохранять их бесплатными для всех. Эта статья может содержать партнерские ссылки на этих партнеров.
ClearML — наш новый партнёр: набор инструментов с открытым исходным кодом, который поможет тебе сэкономить время.
ClearML стремится ускорить внедрение ML и упрощает интеграцию ML в любые программные или аппаратные продукты.
Эта интеграция упрощает обучение модели YOLOv5 и позволяет использовать менеджер экспериментов ClearML для автоматического отслеживания обучения. Ты можешь легко указать ID версии набора данных ClearML в качестве входных данных, и этот набор данных автоматически будет использоваться для обучения модели.
Выведи отслеживание экспериментов на новый уровень#
- Отслеживай каждый запуск обучения YOLOv5 в менеджере экспериментов.
- Создавай версии своих данных для обучения и легко получай к ним доступ с помощью интегрированного инструмента версионирования данных ClearML.
- Добивайся наилучшего показателя mAP с помощью оптимизации гиперпараметров ClearML.
- Преврати только что обученную модель YOLOv5 в API всего за несколько команд с помощью ClearML Serving.
Тебе решать, сколько из этих инструментов использовать: можно ограничиться менеджером экспериментов или объединить их в впечатляющий конвейер.
Настройка#
Чтобы отслеживать эксперименты и данные, ClearML должен взаимодействовать с сервером. У тебя есть два варианта: бесплатно зарегистрироваться в ClearML Hosted Service или настроить собственный сервер.
Даже сервер имеет открытый исходный код, поэтому работа с конфиденциальными данными не станет проблемой!
- Установи пакет 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 эпох)
- Вывод консоли
- Скалярные значения (mAP50, mAP50-95, точность, полнота, потери, скорости обучения, ...)
- Общая информация: сведения о машине, время выполнения, дата создания и т. д.
- Все построенные графики, например коррелограмма меток и матрица ошибок
- Изображения с ограничивающими рамками для каждой эпохи
- Мозаика для каждой эпохи
- Изображения для валидации для каждой эпохи
Теперь мы можем визуализировать всю эту информацию в интерфейсе ClearML, чтобы получить общее представление о ходе обучения. Добавь в табличное представление пользовательские столбцы (например, mAP50), чтобы легко сортировать модели по результатам. Или выбери несколько экспериментов и сравни их напрямую!
С этой информацией можно сделать ещё больше: например, оптимизировать гиперпараметры и запускать задачи удалённо. Читай дальше, чтобы узнать как!
Управление версиями датасетов#
Как правило, полезно версионировать данные отдельно от кода — так проще получать актуальную версию. Этот репозиторий позволяет указывать идентификатор версии датасета и при необходимости автоматически загружает данные. Кроме того, этот рабочий процесс сохраняет идентификатор использованного датасета в параметрах задачи, поэтому ты всегда будешь точно знать, какие данные использовались в каждом эксперименте!
Подготовка датасета#
Репозиторий YOLOv5 поддерживает множество наборов данных, используя YAML-файлы с информацией о них. По умолчанию наборы данных загружаются в папку ../datasets относительно корневой папки репозитория. Поэтому, если ты загрузил набор данных COCO128 по ссылке из YAML-файла или с помощью скриптов YOLOv5, структура папок будет такой:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtНо можно использовать любой нужный тебе датасет. Используй свой, если хочешь, главное — придерживайся этой структуры папок.
Затем скопируй соответствующий YAML-файл в корневую папку набора данных. В этих YAML-файлах содержится информация, необходимая ClearML для корректной работы с набором данных. Разумеется, ты можешь создать файл самостоятельно — просто используй структуру примеров YAML-файлов.
В 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: скрипт клонирует ее и меняет гиперпараметры.
Укажи идентификатор шаблонной задачи в скрипте по пути 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 Agent делает именно это: он отслеживает очередь входящих задач, а когда находит задачу, воссоздаёт окружение и запускает её, продолжая отправлять скалярные метрики, графики и прочие данные в менеджер экспериментов.
Любую машину (облачную VM, локальную GPU-машину или собственный ноутбук) можно превратить в агент ClearML — для этого просто выполни:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--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
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ ДОБАВЬ ЭТУ СТРОКУЕсть вопросы? Присоединяйся к нашему сообществу и задай свой вопрос уже сегодня!
Автор
Комментарии
Задай вопрос, поделись результатами или помоги кому-нибудь.










