Первая ML-платформа для трекинга экспериментов, которую мне довелось использовать в проде - это MLFlow. В далёком 2018 мне это показалось чудом - это что же, теперь не надо заносить результаты обучения в Эксель-табличку??

Душа, однако, всегда требует перемен - хочется обновить куду, версию пайторча и фон в зуме. Так что, когда в июне 2019 открылся ML-отдел Цельса, мой взор упал на свеженький, прям из печки Trains AI, ныне известный как ClearML. Может показаться, что базировать ML-инфрастуктуру компании на продукте в бета-версии было слегка рискованно. Отчасти это так, но на самом деле даже сейчас переезд на какое-то аналогичное решение вряд ли стал бы катастрофой. Например, интеграция ClearML в код - это буквально строчки три на сложный проект.

Если вы хотите узнать ещё больше об организации процессов ML-разработки, подписывайтесь на наш Телеграм-канал Варим ML

Ребрендинг явно пошёл на пользу - теперь хотя бы гугле можно искать нормально
Ребрендинг явно пошёл на пользу - теперь хотя бы гугле можно искать нормально

Материалов про ClearML даже на русском немало (хотя и меньше, чем про аналогичные платформы), правда, они в основном дублируют сайт продукта и его документацию. Здесь я хочу рассказать про топ-5 фичей и особенностей, которые деляют ClearML бесценным инструментом именно для меня и Цельса. Конечно же, с картинками и настоящими примерами.

Предупреждение:

  • Для вашего сценария применения список может сильно отличаться.

  • Я не утверждаю, что в других инструментах этих фичей нет. MLFlow и W&B я последний раз использовал в 2019-2020, а какой-нибудь Neptune - никогда.

Экспериментирование из любой точки мира

Я люблю перед сном посмотреть, что там происходит с моими экспериментами. Да-да, у меня нет ворк-лайф баланса, я через месяц выгорю, и всё такое. Так или иначе, иногда с экспериментами что-то происходит - CUDA out of memory, градиенты взорвались, метрики ниже ожидаемого, багуля в коде, в конфиге указали не ту версию библиотеки, полный фриз в конце концов. Терять целую ночь драгоценного трейна - это грустно, и ClearML позволяет в несколько кликов перезапустить исправленную версию экспа.

Далее покажу ряд картинок, которые дадут представление о возможностях для изменения настроек экспериментов и мониторинга их состояния.

  • Если нашёлся косячок ???? в коде, всегда можно быстренько закоммитить изменения прям в интерфейсе Гитхаба или в VSCode через SSH и попросить ClearML спулить последний коммит в ветке:

  • Версию пакета можно поменять в requirements.txt в папке, где лежит трейн-скрипт, или прям в интерфейсе:

  • Время от времени хочется поменять базовый контейнер или аргументы docker run:

  • Гиперпараметры - одна из самых частых точек изменений. Например, можно понизить learning rate, если что-то взорвалось, или поменять интенсивность аугментаций:

Пожилой РезНет ещё в строю
Пожилой РезНет ещё в строю
  • Логи позволяют в лайв-режиме понять, что именно происходит во время обучения:

В данном случае происходит валидация
В данном случае происходит валидация
  • Машинлернеры не могут существовать без метрик - тут можно посмотреть их динамику и сравнить с любым количеством других экспериментов:

  • Киллер-фича - возможность онлайн смотреть, как изменяются предикты сетки на валидации и сравнивать их с врачебной разметкой:

Подключение тачек к агентской сети в пару команд

Иногда офисных трейн-серверов не хватает - и тогда мы берём прерываемые инстансы в облаках или обучаемся локально на рабочих компах. При условии, что у этих машин есть доступ к обучающим данным (например, через NFS) их подключение к агентской сети выглядит примерно так:

pip install clearml-agent && CLEARML_WORKER_NAME=crazyfrogspb_local clearml-agent daemon --queue crazyfrogspb --gpus 0 --detach

Ну окей, ещё конфиг с ключиками надо положить в хоум-директорию. Это безумно удобно - любые ресурсы для обучения можно использовать единообразно - например, точно так же ставить эксперименты из браузера. Если всё правильно организовать, в настройках экспа даже ничего менять не надо, просто выбираем другую очередь при запуске:

Взаимодействие с платформой через SDK

Иногда всё-таки появляется желание и необходимость взаимодействовать с ClearML программным путём. Это достаточно легко делать через SDK или API. Некоторые популярные у нас сценарии:

  • Обучение на прерываемых инстансах. Если говорить простым языком, прерывайки - это машины в облаке, которые могут внезапно отключиться на какое-то, обычно непродолжительное время. За счёт этого стоят они в два раза дешевле. У нас есть специальные мониторинг-скрипты, которые проверяют статус эксперимента (объект типа Task), и в случае его остановки из-за смерти машины автоматически подставляют нужные гиперпараметры (в первую очередь адрес последнего чекпойнта) и перезапускают эксперимент.

Произошёл фризик
Произошёл фризик
  • Очистка старых экспов и следов их жизнедеятельности. Наша база экспериментов за три с половиной года разрослась до половины терабайта - это мета-данные об экспах, метрики и дебаг-картинки. ClearML позволяет автоматически всё это чистить по заданным условиям - архивный или проваленный статус, дата создания и так далее. Такую сервисную джобу можно запустить так же, как эксперимент, или просто время от времени запускать чистящий скрипт с нужными параметрами.

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

Независимость от чужих облаков

ClearML-сервер состоит из нескольких компонентов - Web UI, API-сервер, файловый сервер, MongoDB, Redis, ElasticSearch. Всё это деплоится одной командой на любом железе при помощи Docker-Compose. При желании можно вносить свои модификации в конфиг или наращивать железо при росте количества экспериментов. Мы ни за что не платим, кроме инстанса, на котором всё крутится, нам не нужно искать окольные пути оплаты казахстанскими картами, и все данные хранятся на нашем сервере. Кайф!

https://clear.ml/docs/latest/docs/deploying_clearml/clearml_server/#what-is-clearml-server
https://clear.ml/docs/latest/docs/deploying_clearml/clearml_server/#what-is-clearml-server

Постоянная поддержка в Слаке

Экосистема ClearML постоянно развивается - накатываются апдейты на SDK и UI, появляются новые подпродукты (типа Serving или Datasets). Увы, документация не всегда поспевает за свежими обновлениями, а время от времени появляются и баги. Думаю, слишком жирно было бы от бесплатного продукта требовать ещё и этого. Тем более, что у ребят есть Slack-сообщество, в котором можно задавать вопросы и быстро получать на них ответы.

Скажем так, я активный участник сообщества ClearML
Скажем так, я активный участник сообщества ClearML

Чего не хватает?

Главная моя боль - отсутствие вменяемой мобильной версии или приложения. Пользоваться ClearML с телефона абсолютно невозможно. Может, оно, конечно, и к лучшему для моей психики, но всё-таки хотелось бы иметь полный спектр возможностей.

Остальное, честно говоря, это какие-то мелочи типа объединения экспериментов в цепочки или группы через UI. Основным функционалом я полностью удовлетворён. Если я что-то упускаю, и есть какая-то мега-фича, пишите в комментариях, попробуем запросить её у разрабов =)

Если вы хотите узнать ещё больше об организации процессов ML-разработки, подписывайтесь на наш Телеграм-канал Варим ML

Комментарии (0)