Привет, товарищи! В предыдущем посте я рассказывал, зачем нужен менеджер ML-экспериментов, поговорили про базовый функционал ClearML. А теперь мы рассмотрим, как можно создавать эксперименты, их настраивать, ставить в очередь и запускать прям из веб-браузера. Кроме того, возникает необходимость автоматически обучать/переобучать модель по расписанию. Для того, чтобы это осуществить в ClearML существуют 2 ключевых концепта:
Воркеры и очереди
Для запуска эксперимента по обучению или тестированию его нужно сначала поставить в очередь на выполнение. При этом эксперименты в очереди будут выполняться по мере добавления в нее. Очередей может быть множество. Воркер в свою очередь является самим исполнителем эксперимента. Он имеет окружение (например, docker-образ), доступные вычислительные ресурсы (только CPU, GPU или несколько GPUs), а также очередь экспериментов, которую нужно обрабатывать (иначе говоря, на которую он подписан). Воркеров тоже может быть множество, которые могут работать параллельно.
Все как в супермаркете: воркеры-кассиры параллельно обслуживают свои очереди из клиентов. В нашем случае клиенты — это эксперименты.

Очередь можно создать в самом веб-интерфейсе ClearML. Делается это во вкладке Workers&Queues → Queues → New Queue. А вот пример создание воркера на docker-образе с двумя доступными видеокартами 0 и 1 и подпиской на очередь (которая уже должна быть создана):
clearml-agent daemon --queue {QUEUE_NAME} --detached --docker {image_name:tag} --gpus 0,1
Как запустить несколько воркеров на одной видеокарте?
По умолчанию уникальное имя воркера задается по шаблону host:gpuID
. Соответственно, если хост и GPU-ID одни и те же, возникнет конфликт имен. Поэтому во время создания воркера нужно определить свое имя.
CLEARML_WORKER_ID="super:gpu4-1" clearml-agent daemon --queue {QUEUE_NAME} --detached --docker {image_name:tag} --gpus 4
CLEARML_WORKER_ID="super:gpu4-2" clearml-agent daemon --queue {QUEUE_NAME} --detached --docker {image_name:tag} --gpus 4
Какие сценарии использования могут быть?
Представим, что есть 2 разработчика — Алекс и Яков. У каждого свой проект, соответственно, FaceRec и Denoiser. У каждого своя очередь из экспериментов, которые нужно выполнять. И каждый имеет своего воркера со своим docker-образом. Разве что у Алекса 2 видеокарты, а у Якова — одна.

Ситуация, приведенная выше — не единственный возможный вариант. Может быть и такое, что
один воркер обслуживает несколько очередей
несколько воркеров обслуживают одну и ту же очередь. Представим, что вы создали 4 воркера, запихнули в очередь сразу 4 эксперимента. Тогда каждый воркер возьмет из этой очереди свой эксперимент, и выполнение будет идти параллельно
Определение эксперимента
Как уже было сказано, очередь формируется из экспериментов. Запустив какой-то из них из консоли, вы можете взять его за основу для будущих запусков из ClearML. Что значит взять за основу? Это значит взять выполненный эксперимент, склонировать его, обновить такие вещи как аргументы командной строки, гиперпараметры, конфиг-файл или даже код (хотя это очень неудобно), а затем обновленный эксперимент кинуть в очередь на выполнение.
Давайте подробно по порядку
Пусть мы запустили эксперимент из консоли, сохранив его в ClearML. Выполненный эксперимент имеет статус Completed
Эксперимент train-002 выполнен (Completed) Важно! ClearML требует, чтоб ваш удаленный репозиторий имел последний коммит такой же, как при у вашего локального репозитория. Иначе при дальнейшем запуске через воркер вы увидите ошибку несостыковки коммитов.
Нажав ПКМ на нем, его можно склонировать. Новый склонированный эксперимент получает статус draft, а значит доступен для редактирования. В качестве примера ниже показал редактирование гиперпараметров.
Редактирование hparams у эксперимента со статусом drat Обновив все нужные поля и параметры, мы ставим draft эксперимент в нужную очередь
Постановка эксперимента в очередь Эксперимент, ожидающий своей очереди имеет статус Pending. Как до него дойдет черед, он станет Running.
Для запуска экспериментов по расписанию. ClearML для таких целей предлагает Task Scheduler.
Это всё или что-то еще?
Я показал, как пользоваться возможностью запускать эксперименты не из CLI, а через сам веб-интерфейс. На мой взгляд, это приятнее и быстрее. На пути своей собственной реализации всего вышеописанного у вас могут возникнуть трудности, связанные с конфигом ClearML и правами. Я с этим сталкивался, но решил не раздувать статью описанием всех проблем. Поэтому задавайте свои вопросы в комментариях, буду готов помочь в решении проблем.
Далее по плану написать статью об организации датасетов в ClearML, чем зачастую пренебрегают ML-щики.