ClearML Session
Введение
В предыдущей статье мы познакомились с основными модулями ClearML и подробно рассмотрели модуль работы с данными. Сегодня изучим работу на удаленном сервере и настройку рабочего места с использованием ClearML Session. А еще немного обсудим модуль ClearML Agent. О нем подробнее расскажем в отдельной статье 🙂
ClearML Session — инструмент для запуска удаленных экземпляров Jupyter Notebooks и VSCode внутри любого докер-контейнера в любом развертывании: Cloud / Kubernetes / Bare-Metal.
То есть мы можем создавать рабочие места для ML-инженеров и выделять нужное количество мощностей для каждого из них.
Примеры использования ClearML Session:
- Подключение к удаленным серверам с GPU;
- Дебаггинг удаленного запуска (воспроизведения) ранее выполненного эксперимента в изолированной среде;
- Быстрый перенос рабочего пространства на новый сервер.
Руководитель направления MLOps в компании МТС рассказал о том, как с помощью этого решения можно эффективно распределять мощности и настраивать рабочие места для сотрудников.
Регистрация и установка ClearML
Как и в прошлой статье, начинаем с регистрации на сервере ClearML или разворачиваем свой ClearML локально. Затем получаем креды [более подробно см. в документации].
Поскольку процесс регистрации и установки мы подробно рассматривали в прошлый раз, здесь вы его сможете посмотреть в toggle ниже.
Первый этап: установка ClearML на локальной машине
- Устанавливаем у себя ClearML через pip install clearml
- Регистрируемся по ссылке: app.clear.ml/login
- Заходим в Settings → Workspace → Создаем креды “Create new credentials”
Далее устанавливаем ClearML на локальную машину:
pip install clearml
clearml-init
Используем креды во вкладке Local Python:
В консоли локальной машины запускаем команду clearml-init и вставляем креды:
После создания и получения кредов появится конфигурационный файл ~/clearml.conf для Linux.
Пути для других ОС:
Mac — $HOME/clearml.conf
Windows — \User\<username>\clearml.conf
Креды не должны коммититься и публично показываться. Примеры выше представлены только в демонстрационных целях.
После этого появится файл clearml.conf, где будут записаны все созданные креды.
Создание очереди и агента на удаленной машине
Второй этап: создание очереди в ClearML UI и агента на удаленном сервере, который будет слушать эту очередь и выполнять из нее задачи. Но перед этим немного об агентах и очередях.
ClearML Agent — это виртуальная среда и менеджер выполнения решений DL/ML на машинах с GPU, обеспечивающий полноценное кластерное решение.
Агенты позволяют воспроизводить эксперименты, создавая условия уже проведенных экспериментов, и легко масштабироваться на нескольких удаленных серверах.
Например, у нас есть код обучения, который был запущен с ClearML отслеживания экспериментов (2 строки в начале вашего скрипта обучения). На сервере ClearML будет создана задача, напомним, что все в clearml это task, для которой сохранятся установленные пакеты с версиями, артефакты, не закоммиченый код, ссылка на репозиторий, запущенный скрипт, графики и др. Все это позволяет воспроизвести эксперимент заново, просто клонировав задачу (task), изменив гиперпараметры и назначив его на очередь. На сервере запущенный агент будет слушать те очереди, на которые вы назначаете задачи. Кроме того, в Clearml UI можно изменять приоритет выполнения задач, слушать несколько очередей и использовать множество других полезных фичей. Но это тема уже для отдельной статьи 🙂
Для закрепления материала по clearml-agent посмотрим на диаграмму из документации. Мы видим, как на сервере ClearML создается задача (Task) и назначается в очередь. Затем она поступает в агент на машине пользователя, где начинается воспроизведение среды и состояния проекта. Далее запускается эксперимент, и его результаты логгируются.
Теперь, когда вы понимаете, как работают агенты и очереди, вы можете создавать собственные.
Давайте создадим очередь, в которую будем добавлять задачи. Агент может выполнять только одну задачу из очереди за раз. При этом он способен прослушивать несколько очередей в зависимости от установленного приоритета.
В ClearML UI нужно зайти в раздел с очередями и создать себе очередь. Ещё можно использовать существующую по умолчанию очередь default.
В пользовательском интерфейсе ClearML необходимо перейти в раздел с очередями «Queues» и создать собственную очередь. Также можно воспользоваться очередью по умолчанию — default.
На удаленном сервере необходимо создать сlearml агента [подробнее см. здесь]:
- Чтобы это сделать, мы устанавливаем зависимости на удаленном сервере и инициализируем конфигурацию агента clearml. В результате у нас получится конфигурационный файл clearml.conf.
pip install clearml
pip install clearml-agent
clearml-agent init
Обратите внимание: если у нас уже есть конфигурационный файл clearml.conf, мы должны дописать в него блок про агента. Минимальное наполнение выглядит так:
agent {
# Set GIT user/pass credentials (if user/pass are set, GIT protocol will be set to https)
git_user=""
git_pass=""
# all other domains will use public access (no user/pass). Default: always send user/pass for any VCS domain
git_host=""
# Force GIT protocol to use SSH regardless of the git url (Assumes GIT user/pass are blank)
force_git_ssh_protocol: false
# unique name of this worker, if None, created based on hostname:process_id
# Overridden with os environment: CLEARML_WORKER_NAME
worker_id: ""
}
Полный вариант clearml.conf можно найти в репозитории ClearML.
- Затем запускаем агента и назначаем его на созданную очередь:
clearml-agent daemon --queue <имя очереди>
Агент создаст виртуальное окружение — туда и будут устанавливаться нужные зависимости для работы вашей программы.
Некоторые аргументы для его создания:
- —docker <название образа> — запуск агента в докер-режиме. Когда к нему придет новая задача, он сначала создаст докер-контейнер на основе выбранного образа (образ по умолчанию указан в конфиге clearml.conf), а затем выполнит задачу внутри него. Можно как использовать готовые образы из известных репозиториев (например, nvidia/cuda:11.6.2-cudnn8-runtime-ubuntu20.04), так и собирать образ на ML-сервере по желанию и затем подтягивать его по названию;
- —detached — запуск в фоновом режиме;
- —gpus <номер GPU> — разрешение агенту пользоваться только конкретной видеокартой (или несколькими);
- —foreground — вывод дебага информации.
После создания clearml-agent’а (воркера) на удаленном сервере в ClearML UI можно убедиться в том, что воркер создан и отслеживается, и на него можно назначить задания.
Задания можно назначать следующими способами:
- из ClearML UI, клонировав ранее выполненный эксперимент;
- из кода через API;
- из консоли через CLI.
Мы воспользуемся СlearML Session, которая будет задачей в назначенной нами очереди.
Установка и запуск ClearML Session
Последний этап: создание рабочей сессии на удаленном сервере.
Для этого нужно установить на локальную машину clearml-session:
pip install clearml-session
Запустить сессию с локальной машины: опций очень много, с полным списком можно ознакомиться здесь. При создании интерактивной сессии вас обязательно спросят, к какой очереди подключиться, если она не была указана явно. А если вы уже создавали интерактивную сессию — спросят, нужно ли использовать предыдущую сессию:
clearml-session <опции>
Все настройки сессии сохраняются. При создании новой по умолчанию будут выставлены параметры старой.
Затем вас спросят, хотите ли вы начать сессию. Чтобы не отвечать каждый раз, можно воспользоваться аргументом —yes
.
Некоторые полезные аргументы для создания сессии [все можно посмотреть тут, а описание фичей — здесь]:
- —queue — очередь, в которой создаем наше задание;
- —project — создание проекта в ClearML;
- —docker — указание докер образа;
- —packages — указание конкретных библиотек для установки;
- —requirements — указание файла с зависимостями;
- —store-workspace — автоматическое создание с помощью сlearml-session снепшота всего вашего рабочего пространства при его закрытии, а затем его восстановление в новом сеансе на любой удаленной машине;
- —vscode-extensions — заранее заданные расширения, которые нужно поставить в VSCode.
Сессия станет заданием вашего агента, развернув Docker-контейнер на основе выбранного вами образа и установив в него (по умолчанию) Jupyter Lab и VSCode. Успешно созданная сессия выдаст следующее сообщение:
Interactive session is running:
SSH: ssh root@localhost -p 8022 [password: пароль]
Jupyter Lab URL: <http://localhost:8878/?token=277bfb2c594686d8c139943202d17777d0e1863057583845>
VSCode server available at <http://localhost:8898/>
После этого вы можете подключиться к удобной среде разработки по указанному адресу.
Сессия будет создана в качестве task в проекте DevOps (на рисунке ниже это WP_Session) — там можно посмотреть все параметры запуска и вывод в консоли.
Если вы не завершите сессию и введете в консоль Shutdown, вы сможете позже, даже после закрытия консоли, переподключиться к последней сессии с помощью этой команды:
clearml-session
Еще можно подключиться к вашей сессии или сессии коллеги через —attach:
clearml-session --attach <session_id>
Чтобы пользоваться сессией после ее завершения, можно обратиться к параметру —store-workspace. С ним весь ваш проект будет храниться в ClearML даже после завершения сессии.
clearml-session --store-workspace ~/workspace
# Создание сессии из сохраненного воркспейса,
# но подключиться к завершенной сессии уже нельзя
clearml-session --continue-session <session_id> --store-workspace ~/workspace
Для завершения сессии нужно ввести в консоль с запущенной сессией команду “Shutdown”.
А если консоль закрыта — сессию можно закрыть по id через команду:
clearml-session shutdown --id <session_id>
Tips & Tricks
- Чтобы не потерять данные при работе в контейнере, нужно смонтировать туда директорию с удаленного сервера. Это можно прописать в конфиге ClearML-агента в поле extra_docker_arguments (clearml.conf).
- Иногда ClearML-агент теряет свой конфиг. Его можно ему «напомнить», обновив переменную окружения:
export CLEARML_CONFIG_FILE=~/clearml.conf
Заключение
В этой статье мы рассмотрели, как можно настроить рабочую среду с Jupyter Lab и VSCode при использовании ClearML Session. А еще познакомились с конфигурационным файлом clearml.conf, который позволяет легко изменять важные параметры для работы с ClearML.
Кроме того, мы кратко обсудили Clearml Agent — инструмент, который помогает создавать воркеры на удаленном сервере и назначать им задачи через пользовательский интерфейс (UI) или интерфейс командной строки (CLI).
В следующей статье мы подробнее рассмотрим модуль ClearML Agent, научимся назначать задачи и приоритизировать их, воспроизводить эксперименты и использовать мощности colab. Продолжение следует 🙂