Назад
118

ClearML Session

118

Введение

В предыдущей статье мы познакомились с основными модулями ClearML и подробно рассмотрели модуль работы с данными. Сегодня изучим работу на удаленном сервере и настройку рабочего места с использованием ClearML Session. А еще немного обсудим модуль ClearML Agent. О нем подробнее расскажем в отдельной статье 🙂

ClearML Session — инструмент для запуска удаленных экземпляров Jupyter Notebooks и VSCode внутри любого докер-контейнера в любом развертывании: Cloud / Kubernetes / Bare-Metal.

То есть мы можем создавать рабочие места для ML-инженеров и выделять нужное количество мощностей для каждого из них.

Примеры использования ClearML Session:

  1. Подключение к удаленным серверам с GPU;
  2. Дебаггинг удаленного запуска (воспроизведения) ранее выполненного эксперимента в изолированной среде;
  3. Быстрый перенос рабочего пространства на новый сервер.

Руководитель направления MLOps в компании МТС рассказал о том, как с помощью этого решения можно эффективно распределять мощности и настраивать рабочие места для сотрудников.

Регистрация и установка ClearML

Как и в прошлой статье, начинаем с регистрации на сервере ClearML или разворачиваем свой ClearML локально. Затем получаем креды [более подробно см. в документации].

Поскольку процесс регистрации и установки мы подробно рассматривали в прошлый раз, здесь вы его сможете посмотреть в toggle ниже.

Первый этап: установка ClearML на локальной машине
  1. Устанавливаем у себя ClearML через pip install clearml
  2. Регистрируемся по ссылке: app.clear.ml/login
  3. Заходим в Settings → Workspace → Создаем креды “Create new credentials”
Рисунок 1. Настройка рабочего пространства и создание кредов

Далее устанавливаем ClearML на локальную машину:

pip install clearml
clearml-init

Используем креды во вкладке Local Python:

Рисунок 2. Создание кредов

В консоли локальной машины запускаем команду clearml-init и вставляем креды:

Рисунок 3. Настройка рабочего пространства на локальной машине

После создания и получения кредов появится конфигурационный файл ~/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) и назначается в очередь. Затем она поступает в агент на машине пользователя, где начинается воспроизведение среды и состояния проекта. Далее запускается эксперимент, и его результаты логгируются.

Рисунок 4. Диаграмма ClearML Agent

Теперь, когда вы понимаете, как работают агенты и очереди, вы можете создавать собственные.

Давайте создадим очередь, в которую будем добавлять задачи. Агент может выполнять только одну задачу из очереди за раз. При этом он способен прослушивать несколько очередей в зависимости от установленного приоритета.

В ClearML UI нужно зайти в раздел с очередями и создать себе очередь. Ещё можно использовать существующую по умолчанию очередь default.

В пользовательском интерфейсе ClearML необходимо перейти в раздел с очередями «Queues» и создать собственную очередь. Также можно воспользоваться очередью по умолчанию — default.

Рисунок 5. Создание очереди

На удаленном сервере необходимо создать сlearml агента [подробнее см. здесь]:

  1. Чтобы это сделать, мы устанавливаем зависимости на удаленном сервере и инициализируем конфигурацию агента 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.

  1. Затем запускаем агента и назначаем его на созданную очередь:
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 можно убедиться в том, что воркер создан и отслеживается, и на него можно назначить задания.

Рисунок 6. Слева: очереди default и deep_school. Справа: воркер, слушающий выбранную очередь deep_school

Задания можно назначать следующими способами:

  • из 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) — там можно посмотреть все параметры запуска и вывод в консоли.

Рисунок 7. Созданная сессия в проекте DevOps

Если вы не завершите сессию и введете в консоль 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

  1. Чтобы не потерять данные при работе в контейнере, нужно смонтировать туда директорию с удаленного сервера. Это можно прописать в конфиге ClearML-агента в поле extra_docker_arguments (clearml.conf).
  2. Иногда ClearML-агент теряет свой конфиг. Его можно ему «напомнить», обновив переменную окружения:
export CLEARML_CONFIG_FILE=~/clearml.conf

Заключение

В этой статье мы рассмотрели, как можно настроить рабочую среду с Jupyter Lab и VSCode при использовании ClearML Session. А еще познакомились с конфигурационным файлом clearml.conf, который позволяет легко изменять важные параметры для работы с ClearML.

Кроме того, мы кратко обсудили Clearml Agent — инструмент, который помогает создавать воркеры на удаленном сервере и назначать им задачи через пользовательский интерфейс (UI) или интерфейс командной строки (CLI).

В следующей статье мы подробнее рассмотрим модуль ClearML Agent, научимся назначать задачи и приоритизировать их, воспроизводить эксперименты и использовать мощности colab. Продолжение следует 🙂

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!