Перейти к содержимому

ClearML Интеграция

Clear|MLClear|ML

О сайте ClearML

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

🔨 Отслеживай каждый тренировочный запуск YOLOv5 в менеджере экспериментов.

🔧 Версифицируй и легко получай доступ к своим пользовательским тренировочным данным с помощью интегрированногоинструмента ClearML Data Versioning Tool.

🔦 Удаленно тренируйся и контролируй свои тренировки YOLOv5 с помощью ClearML Agent.

🔬 Получи самую лучшую карту с помощью ClearML оптимизации гиперпараметров

🔭 Преврати свою только что обученную модельYOLOv5 в API с помощью всего нескольких команд, используя ClearML Serving.


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

ClearML приборная панель со скалярами



🦾 Настройка вещей

Чтобы отслеживать результаты твоих экспериментов и/или данные, ClearML должен общаться с сервером. У тебя есть 2 варианта, как его получить:

Либо подпишись бесплатно на хостинговый сервисClearML , либо создай свой собственный сервер, смотри здесь. Даже сервер имеет открытый исходный код, так что, даже если ты имеешь дело с конфиденциальными данными, у тебя все должно получиться!

  • Установи clearml python пакет:

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

    clearml-init
    

Вот и всё! Ты закончил 😎


🚀 Обучение YOLOv5 С ClearML

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

pip install clearml>=1.2.0

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

Если ты хочешь изменить project_name или task_name, используй --project и --name аргументы train.py скрипт, по умолчанию проект будет называться YOLOv5 и задание Training. ПРИМЕЧАНИЕ: ClearML использует / как разделитель для подпроектов, поэтому будь осторожен при использовании / в названии твоего проекта!

python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache

или с пользовательским названием проекта и задачи:

python train.py --project my_project --name my_training --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), чтобы ты мог легко отсортировать модели с наилучшими показателями. Или выбирай несколько экспериментов и напрямую сравнивай их!

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

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

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

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  # <---- HERE!
        |_ LICENSE
        |_ README.txt

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

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

cd 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 , мы по сути клонируем ее и изменим ее гиперпараметры.

Тебе нужно будет заполнить идентификатор этого 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

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

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

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

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

Посмотри видео о начале работы с автоскалерами ниже.

Смотри видео



Создано 2023-11-12, Обновлено 2024-01-12
Авторы: glenn-jocher (5), chr043416@gmail.com (1)

Комментарии