Первая 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. При желании можно вносить свои модификации в конфиг или наращивать железо при росте количества экспериментов. Мы ни за что не платим, кроме инстанса, на котором всё крутится, нам не нужно искать окольные пути оплаты казахстанскими картами, и все данные хранятся на нашем сервере. Кайф!

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

Чего не хватает?
Главная моя боль — отсутствие вменяемой мобильной версии или приложения. Пользоваться ClearML с телефона абсолютно невозможно. Может, оно, конечно, и к лучшему для моей психики, но всё-таки хотелось бы иметь полный спектр возможностей.
Остальное, честно говоря, это какие-то мелочи типа объединения экспериментов в цепочки или группы через UI. Основным функционалом я полностью удовлетворён. Если я что-то упускаю, и есть какая-то мега-фича, пишите в комментариях, попробуем запросить её у разрабов =)
Если вы хотите узнать ещё больше об организации процессов ML-разработки, подписывайтесь на наш Телеграм-канал Варим ML
ссылка на оригинал статьи https://habr.com/ru/post/700536/
Добавить комментарий