Первая 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