![](https://habrastorage.org/getpro/habr/upload_files/d48/f72/f43/d48f72f433d436e4b6fd25dc480858ee.jpeg)
В предыдущей статье мы познакомились с основными составляющими ClearML и детально рассмотрели модуль работы с данными. Теперь речь пойдёт о работе на удалённом сервере и настройках рабочего места с использованием ClearML Session. Заодно немного поговорим о модуле ClearML Agent. Поскольку эта тема вполне заслуживает отдельной статьи, в этот раз затронем агента лишь по касательной.
Что такое ClearML Session и для чего он используется в ML-задачах
ClearML Session — это инструмент для запуска удалённых экземпляров Jupyter Notebooks и VSCode внутри какого-либо докер-контейнера и в любом развёртывании: Cloud, Kubernetes, Bare-Metal. Таким образом, инструмент позволяет создавать рабочие места для ML-инженеров и выделять нужное количество мощностей для каждого из них.
Примеры использования ClearML Session:
-
Подключение к удаленным серверам с GPU;
-
Дебаггинг удаленного запуска (воспроизведения) ранее выполненного эксперимента в изолированной среде;
-
Быстрый перенос рабочего пространства на новый сервер.
С помощью этого решения можно эффективно распределять мощности и настраивать рабочие места для сотрудников. Об этом, например, рассказывал руководитель направления MLOps МТС в докладе на Data Fest Siberia.
Как применять Clear ML Session для настройки рабочей среды
Теперь рассмотрим по шагам, как настроить рабочую среду с Jupyter Lab и VSCode при использовании ClearML Session. Итак, поехали!
Шаг 1. Регистрация и установка ClearML
Как и в прошлый раз, начинаем с регистрации на сервере ClearML или разворачиваем свой фреймворк локально. Затем получаем креды (более подробно этот момент раскрыт в официальной документации). Поскольку мы подробно рассматривали процесс регистрации и установки в предыдущей публикации, не будем повторяться и обозначим лишь основные моменты под спойлером.
Установка ClearML
Для начала установим ClearML на локальной машине:
-
Устанавливаем у себя ClearML через
pip install clearml
-
Регистрируемся по ссылке: app.clear.ml/login
-
Заходим в Settings → Workspace → Создаем креды «Create new credentials»
-
Устанавливаем ClearML на локальную машину при помощи следующей команды:
pip install clearml clearml-init
![Настройка рабочего пространства и создание кредов Настройка рабочего пространства и создание кредов](https://habrastorage.org/getpro/habr/upload_files/b30/dd1/bd7/b30dd1bd792dcd1b731b5087032243c9.png)
Затем используем креды во вкладке Local Python:
![Создание кредов Создание кредов](https://habrastorage.org/getpro/habr/upload_files/084/8bd/1c6/0848bd1c63405a4582d6919c236e3205.png)
В консоли локальной машины запускаем команду clearml-init и вставляем креды:
![Настройка рабочего пространства на локальной машине Настройка рабочего пространства на локальной машине](https://habrastorage.org/getpro/habr/upload_files/857/0bd/77a/8570bd77af26837fe9139681a7542049.png)
После создания и получения кредов появится конфигурационный файл ~/clearml.conf для Linux.
А вот пути для других ОС:
Mac — $HOME/clearml.conf
Windows — \User\<username>\clearml.conf
Креды не должны коммититься и показываться публично. Примеры выше представлены только в демонстрационных целях.
После выполнения перечисленных действий появится файл clearml.conf, где будут записаны все созданные креды.
Шаг 2. Создание очереди в СlearML UI и агента на удаленном cервере
Как гласит народная мудрость, практика без теории слепа. Поэтому сперва немного поговорим о том, что такое агенты и очереди и как они работают, и только потом перейдём к пошаговым инструкциям.
Что такое агенты и очереди
ClearML Agent — это виртуальная среда и менеджер выполнения решений DL/ML на машинах с GPU, обеспечивающий полноценное кластерное решение.
В целом же агенты позволяют воспроизводить уже проведённые эксперименты и легко масштабироваться на нескольких удалённых серверах.
Например, есть код обучения, который был запущен с ClearML для отслеживания экспериментов (2 строки в начале вашего скрипта обучения). На сервере ClearML будет создана соответствующая задача. Напомним, что все сущности в СlearML относятся к типу task: для них сохраняются установленные пакеты с версиями, артефакты, не закоммиченый код, ссылки на репозиторий, запущенный скрипт, графики и др. Всё это позволяет воспроизвести эксперимент, клонировав задачу (task), изменив гиперпараметры и назначив его на очередь.
Запущенный агент будет слушать те очереди на сервере, на которые назначаются задачи. Притом в ClearML UI можно изменять приоритет выполнения задач, слушать несколько очередей и использовать множество других полезных фичей. Впрочем, здесь мы уже отклоняемся в тему для отдельной статьи 🙂
Для закрепления материала по ClearML Agent посмотрим на диаграмму из документации. Как видно, на сервере ClearML создаётся и назначается в очередь задача (Task). Затем она поступает в агент на машине пользователя, где начинается воспроизведение среды и состояния проекта. Далее запускается эксперимент, и его результаты логируются.
![Диаграмма ClearML Agent Диаграмма ClearML Agent](https://habrastorage.org/getpro/habr/upload_files/cde/2e2/b90/cde2e2b90bc11bfd538f4bcbc1c52b29.png)
Снова к практике
С основными принципами работы агентов и очередей разобрались. Самое время попробовать самим создать очередь, в которую будут добавляться задачи. Агент может выполнять только одну задачу из очереди за раз. Однако он способен прослушивать несколько очередей в зависимости от установленного приоритета.
Прежде всего необходимо перейти в раздел с очередями «Queues» в пользовательском интерфейсе ClearML и создать там собственную очередь. Также можно воспользоваться очередью по умолчанию — default.
![Создание очереди Создание очереди](https://habrastorage.org/getpro/habr/upload_files/405/e1d/775/405e1d775f43662d288391ce2f02ff52.png)
На удаленном сервере нужно создать агента Clear ML (подробнее смотрите в разделе руководства, посвященном, добавлению агента в файл конфигурации). Для этого придется выполнить несколько шагов.
-
Устанавливаем зависимости на удаленном сервере и инициализируем конфигурацию агента 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
— вывод дебага информации.
3 После создания на удаленном сервере clearml-agent’а (воркера) стоит проверить в интерфейсе ClearML UI, что воркер действительно появился и отслеживается и на него можно назначать задания.
![Слева: очереди default и deep_school. Справа: воркер, слушающий выбранную очередь deep_school Слева: очереди default и deep_school. Справа: воркер, слушающий выбранную очередь deep_school](https://habrastorage.org/getpro/habr/upload_files/8bd/fb3/92c/8bdfb392c5fc6aa636b8f5379d51ff1e.png)
Существуют несколько способов назначать задания:
-
Из ClearML UI, клонировав ранее выполненный эксперимент;
-
Из кода через API;
-
Из консоли через CLI.
Мы же воспользуемся СlearML Session, которая будет задачей в назначенной нами очереди.
Шаг 3. Установка и запуск ClearML Session
Переходим к третьей части Марлезонского балета последнему этапу настройки — созданию рабочей сессии на удаленном сервере.
Для этого нужно установить на локальную машину clearml-session:
pip install clearml-session
Теперь запускаем сессию с локальной машины. При этом нам доступно множество различных опций, с полным списком которых можно ознакомиться здесь.
При создании интерактивной сессии система обязательно задаст вопрос, к какой очереди подключиться, если это не указано явно. Если же вы уже создавали интерактивную сессию, ClearML уточнит, нужно ли использовать именно её:
clearml-session <опции>
![](https://habrastorage.org/getpro/habr/upload_files/31e/25a/6bd/31e25a6bd3c3a56a36274e35ead5c393.png)
Все настройки сохраняются. При создании новой сессии по умолчанию будут выставлены параметры старой.
Затем система спросит, хотите ли вы начать сессию. Чтобы не отвечать каждый раз, лучше воспользоваться аргументом — 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) — там можно посмотреть все параметры запуска и вывод в консоли.
![Созданная сессия в проекте DevOps Созданная сессия в проекте DevOps](https://habrastorage.org/getpro/habr/upload_files/d85/c81/455/d85c814559bfedfe6379221a3510d123.png)
Кстати, если не завершить сессию и ввести в консоль 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>
Пара полезных хитростей или Как не потерять данные и конфиги
А «на десерт» у нас припасена пара полезных лайфхаков по работе с данными и конфигами.
-
Чтобы не потерять данные при работе в контейнере, нужно смонтировать туда директорию с удаленного сервера. Это можно прописать в конфиге ClearML-агента в поле extra_docker_arguments (clearml.conf).
-
Иногда ClearML-агент теряет свой конфиг. Его можно «напомнить», обновив переменную окружения:
export CLEARML_CONFIG_FILE=~/clearml.conf
Как видно из нашей инструкции, ClearML Session позволяет довольно быстро настроить рабочую среду с Jupyter Lab и VSCode. Конфигурационный файл clearml.conf дает возможность легко изменять важные параметры для работы с ClearML.
В свою очередь, ClearML Agent помогает создавать воркеры на удаленном сервере и назначать им задачи через пользовательский интерфейс (UI) или интерфейс командной строки (CLI). Именно об этом полезном модуле мы и поговорим в следующей статье: научимся назначать и приоритизировать задачи, воспроизводить эксперименты и использовать мощности colab. Так что продолжение следует 🙂
P.S.
Первая версия статьи написана для deep school-pro, на Хабре публикуется с изменениями и дополнениями.
ссылка на оригинал статьи https://habr.com/ru/articles/824798/
Добавить комментарий