Удаленное обучение и мониторинг Ultralytics YOLOv5 с помощью ClearML

Команда Ultralytics

4 мин. чтения

21 октября 2022 г.

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

В Ultralytics мы на коммерческой основе сотрудничаем с другими стартапами, которые помогают нам финансировать исследования и разработку наших замечательных инструментов с открытым исходным кодом, таких как YOLOv5, чтобы они оставались бесплатными для всех. Эта статья может содержать партнерские ссылки на этих партнеров.

ClearML - наш новый партнер: набор инструментов с открытым исходным кодом, призванный сэкономить ваше время.

Задача ClearML - ускорить внедрение ML, благодаря чему ML легко интегрируется в любые программные и аппаратные продукты.

Эта интеграция еще больше упрощает обучение модели YOLOv5 и позволяет использовать менеджер экспериментов ClearML для ее автоматического отслеживания. Вы можете легко указать идентификатор версии набора данных ClearML в качестве входных данных, и он автоматически будет использован для обучения вашей модели.

Поднимите отслеживание экспериментов на новый уровень

  • Отслеживайте каждую тренировку YOLOv5 в менеджере экспериментов.
  • Версии и удобный доступ к данным пользовательского обучения с помощью встроенного инструмента версионирования данных ClearML.
  • Получите наилучший mAP с помощью оптимизации гиперпараметров ClearML.
  • Превратите только что обученную модель YOLOv5 в API всего несколькими командами с помощью ClearML Serving.

Вы сами решаете, сколько из этих инструментов использовать: можно ограничиться менеджером экспериментов, а можно объединить их в впечатляющий конвейер.

Установка вещей

Чтобы отслеживать результаты ваших экспериментов и данные, ClearML необходимо взаимодействовать с сервером. У вас есть два варианта: либо бесплатно подписаться на хостинг ClearML Hosted Service, либо создать свой собственный сервер, см. здесь.

Даже сервер - с открытым исходным кодом, так что если вы имеете дело с конфиденциальными данными, это не проблема!

  1. Установите python-пакет clearml: pip install clearml
  2. Подключите ClearML SDK к серверу, создав учетные данные (перейдите справа вверху в Настройки → Рабочее пространство → Создать новые учетные данные), затем выполните команду ниже и следуйте инструкциям: clearml-init

И вуаля! Вы готовы приступить к работе...

Обучение YOLOv5 с помощью ClearML

Чтобы включить функцию отслеживания экспериментов ClearML, просто установите пакет ClearML pip.

pip install clearml

Это позволит интегрироваться со сценарием обучения YOLOv5. С этого момента каждый тренировочный прогон будет перехватываться и сохраняться менеджером экспериментов ClearML. Если вы хотите изменить имя_проекта или имя_задачи, перейдите в наш пользовательский логгер, где вы можете изменить его: 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, precision, recall, losses, learning rates, ...)
  • Общая информация, такая как сведения о машине, время работы, дата создания и т. д.
  • Все построенные графики, такие как коррелограмма меток и матрица смешения
  • Изображения с ограничительными рамками за эпоху
  • Мозаика на эпоху
  • Валидационные изображения за эпоху

Не так уж плохо! Теперь мы можем визуализировать всю эту информацию в пользовательском интерфейсе ClearML, чтобы получить представление о ходе обучения. Добавьте в таблицу пользовательские столбцы (например, mAP_0.5), чтобы можно было легко отсортировать модели, показавшие наилучшие результаты. Или выберите несколько экспериментов и напрямую сравните их!

Со всей этой информацией можно сделать еще больше, например, оптимизировать гиперпараметры и удаленное выполнение, так что продолжайте читать, чтобы узнать, как это сделать!

Управление версиями наборов данных

Версионирование данных отдельно от кода, как правило, является хорошей идеей и позволяет легко получить последнюю версию. Этот репозиторий поддерживает указание идентификатора версии набора данных, и он обязательно получит данные, если их еще нет. Кроме того, этот рабочий процесс сохраняет идентификатор используемого набора данных в параметрах задачи, так что вы всегда будете знать, какие данные были использованы в том или ином эксперименте!

Данные, Ultralytics YOLOv5 и ClearML

Подготовьте набор данных

Репозиторий YOLOv5 поддерживает множество различных наборов данных, используя файлы YAML, содержащие информацию о них. По умолчанию наборы данных загружаются в папку ../datasets по отношению к корневой папке репозитория. Таким образом, если вы загрузили набор данных coco128 по ссылке в YAML или с помощью скриптов, предоставляемых yolov5, вы получите такую структуру папок:

...
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt

Но это может быть любой набор данных, который вы пожелаете. Не стесняйтесь использовать свои собственные, если вы придерживаетесь этой структуры папок.

Далее, ⚠️copy соответствующий YAML-файл в корень набора данных folder⚠️. Эти YAML-файлы содержат информацию, которая понадобится ClearML для правильного использования набора данных. Конечно, вы можете сделать это и сами, просто следуйте структуре примеров YAML.

В основном нам нужны следующие ключи: path, train, test, val, nc, names.

...
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← ЗДЕСЬ!
|_ LICENSE
|_ README.txt

Загрузите свой набор данных

Чтобы включить этот набор данных в ClearML в качестве версионного набора данных, перейдите в корневую папку набора данных и выполните следующую команду:

cd coco128

clearml-data sync --project YOLOv5 --name coco128 --folder .


Команда clearml-data sync на самом деле является сокращением. Вы также можете выполнить эти команды одну за другой:

# Опционально добавьте --parent, если хотите взять за основу

# эта версия на другой версии набора данных, чтобы не загружать дубликаты файлов!

clearml-data create --name coco128 --project YOLOv5/p>

clearml-data add --files .

очистить данные Закрыть

Запустите обучение с использованием набора данных 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 и заставить удаленного агента работать с ней вместо этого.

# Чтобы использовать optuna, сначала установите его, иначе вы можете изменить оптимизатор на просто RandomSearch pip install optuna python utils/loggers/clearml/hpo.py

HPO, Ultralytics YOLOv5 и ClearML

Удаленное выполнение (расширенный вариант)

Запускать HPO локально очень удобно, но что, если мы хотим проводить эксперименты на удаленной машине? Возможно, у вас есть доступ к очень мощной машине с GPU на месте, или у вас есть бюджет на использование облачных GPU. Здесь на помощь приходит ClearML Agent.

Узнайте, что может сделать агент, здесь:

Вкратце: каждый эксперимент, отслеживаемый менеджером экспериментов, содержит достаточно информации, чтобы воспроизвести его на другой машине (установленные пакеты, незафиксированные изменения и т. д.). Поэтому агент ClearML делает именно это: он прослушивает очередь входящих заданий и, когда находит одно из них, воссоздает среду и запускает его, продолжая сообщать менеджеру экспериментов о скалярах, графиках и т. д.

Вы можете превратить любую машину (облачную виртуальную машину, локальную машину с GPU, ваш собственный ноутбук) в агента ClearML, просто запустив его:

clearml-agent daemon --queue [--docker]

Клонирование, редактирование и загрузка

Запустив агента, мы можем немного поработать над ним. Помните из раздела HPO, что мы можем клонировать задачу и редактировать гиперпараметры? Мы можем сделать это и из интерфейса!

🪄 Клонируйте эксперимент, щелкнув его правой кнопкой мыши.

🎯 Отредактируйте гиперпараметры так, как вам нужно.

⏳ Запишите задачу в любую из очередей, щелкнув ее правой кнопкой мыши.

Enqueue, Ultralytics YOLOv5 и ClearML

Выполнение задачи удаленно

Теперь вы можете клонировать задачу, как мы объясняли выше, или просто пометить свой текущий скрипт, добавив 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 при обнаружении экспериментов в очереди. Как только задания будут обработаны, автомасштабатор автоматически отключит удаленные машины, и вы перестанете платить! Посмотрите видео о начале работы с автомасштабировщиком ниже.

Есть вопросы? Присоединяйтесь к нашему сообществу и оставьте свой вопрос сегодня!

Давайте вместе построим будущее
искусственного интеллекта!

Начните свое путешествие в будущее машинного обучения

Начните бесплатно
Ссылка копируется в буфер обмена