惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
H
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
L
LINUX DO - 最新话题
A
Arctic Wolf
博客园_首页
S
Securelist
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Cyberwarzone
Cyberwarzone
小众软件
小众软件
T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
N
News and Events Feed by Topic
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
博客园 - 聂微东
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
H
Heimdal Security Blog
罗磊的独立博客
S
Security @ Cisco Blogs
B
Blog
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
S
Schneier on Security
月光博客
月光博客
L
LINUX DO - 热门话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
ClearML Agent: обучение модели в Google Colab
Ilya12c (Mag · 2026-05-14 · via Все публикации подряд на Хабре

Время на прочтение8 мин

Охват и читатели353

Туториал

ClearML — это целый космос, так что мы продолжаем разбирать его компоненты. В прошлой статье мы рассматривали ClearML Session и настраивали удаленную среду разработки с Jupyter Lab и VSCode. В этот раз поговорим о ClearML Agent и разберем, как с его помощью запустить обучение на удаленном сервере, в частности, Google Colab.

Итак, поехали!

Кратко о ClearML Agent

ClearML Agent — это виртуальная среда и менеджер выполнения решений DL/ML на машинах с GPU «в одном флаконе». Он представляет собой полноценное кластерное решение.

Вот основные возможности ClearML Agent:

  • запуск экспериментов на произвольных ресурсах — локальных или в облаке;

  • воспроизведение экспериментов: агент клонирует код, устанавливает зависимости, воспроизводит окружение, а затем запускает код (это позволяет запускать задачи на удаленной машине так же, как и на локальной);

  • запуск сервисов/контейнеров для долгоживущих задач (не только коротких экспериментов);

  • управление ресурсами: агент можно запустить в CPU-only режиме или с --gpus, а также управлять выделением GPU через NVIDIA_VISIBLE_DEVICES;

  • планирование выполнения задач: можно запускать задачи по очереди/в зависимости от очередей, а также назначать им приоритеты;

  • масштабирование: можно добавлять/удалять машины из «кластера», использовать ресурсы разных машин — облачных и on-premise вместе;

  • логирование: stdout/stderr процесса, установка зависимостей, клонирование — всё логируется и может просматриваться через UI;

  • конфигурация запуска/переопределение параметров задачи через UI, SDK, CLI — без необходимости менять код, например, можно менять гиперпараметры, зависимости, аргументы командной строки, docker-образ;

  • возможность интеграции с Kubernetes/bare-metal/SLURM.

Рисунок 1. Логика запуска эксперимента на удаленной машине с ClearML Agent

Рисунок 1. Логика запуска эксперимента на удаленной машине с ClearML Agent

Если вкратце, ClearML Agent обеспечивает запуск кода на удаленной машине, воссоздавая окружение проекта так, словно эксперимент проводится локально. Заглянем под капот этого процесса.

  1. При локальном запуске кода вызов Task.init(...) создает новую Task на ClearML Server. В этой Task сохраняется:

    • ссылка на Git-репозиторий;

    • незакоммиченные изменения в виде diff-патча;

    • автоматически собранный список зависимостей;

    •  параметры, метрики, stdout / stderr;

    •  конфигурации и артефакты.

    Поясним, что Task — это полное и исчерпывающее описание состояния проекта в момент запуска.

  2. После локального запуска Task отправляется в очередь — канал, по которому задачи распределяются от сервера к агентам. Процесс назначения может осуществляться через SDK, CLI или ClearML UI, о чем расскажем подробнее ниже. Агент способен слушать сразу несколько очередей, откуда задачи берутся в работу. Каждый агент работает только над одним task-ом в моменте, сколько бы их не скопилось в очереди. Притом ClearML Agent выполняет следующие действия.

  • Загружает метаданные задачи с ClearML Server, получая план действий от главного вычислительного центра.

  • Клонирует Git-репозиторий, указанный в задаче, воссоздавая основу проекта. Если репозиторий приватный, необходимо предоставить SSH-ключи или credentials.

  • Применяет diff-патч с локальными незакомиченными изменениями, настраивая репозиторий под конкретную задачу. Патч применяется только к текстовым файлам.

  • Создает виртуальное окружение (pip / conda / poetry), подготавливая лабораторное пространство для эксперимента.

  • Восстанавливает зависимости (сначала из списка библиотек, собранного на локальной машине, затем из requirements.txt, если он существует).

  • Запускает основной скрипт в этом окружении, оживляя код.

  • Передает stdout, метрики и логи обратно на ClearML Server.

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

Рисунок 2. Назначение очереди на ClearML агента и последовательность воспроизведения эксперимента

Рисунок 2. Назначение очереди на ClearML агента и последовательность воспроизведения эксперимента

Подготовка окружения

Самое время перейти от теории к практике. Работа с ClearML начинается с регистрации на сервере и установки экосистемы на локальную машину. Далее необходимо настроить ClearML Agent и создать очереди. Мы уже рассматривали эти два шага в статье про ClearML Session, так что здесь повторяться не станем и сразу пойдем дальше.

Поскольку в одной статье все не отразишь, мы подготовили несколько полезных «плюшек» для подготовки окружения. Прежде всего это репозиторий с дообучением BERT на решение определения тональности текста. В README.md содержится подробный гайд по локальному развертыванию проекта.

Но и это не все: в файле train.py реализовано дообучение модели с использованием фреймворка PyTorch Lightning и логированием в ClearML.

Локальный запуск обучения и логирование в ClearML

Опишем пошагово логирование эксперимента в ClearML.

# Импортируем Task из библиотеки clearml
from clearml import Task

BATCH_SIZE = args.batch_size
MAX_EPOCHS = args.max_epochs
LEARNING_RATE = args.learning_rate
MAX_LENGTH = 128
SUBSET_SIZE = args.subset_size

# Самая главная часть для логгирования Task.init 
# с Task.init уже работает логгирование большей части информации в ClearML Server
task = Task.init( # 
    project_name="BERT-Sentiment-Classification",
    task_name="IMDB-Training-BERT-Base",
    task_type=Task.TaskTypes.training,
)

# логгируем интересующие нас гиперпараметры
task.connect(
      {
          "batch_size": BATCH_SIZE,
          "max_epochs": MAX_EPOCHS,
          "learning_rate": LEARNING_RATE,
          "max_length": MAX_LENGTH,
          "subset_size": SUBSET_SIZE,
          "model_name": "bert-base-uncased",
          "device_arg": args.device,
          "cuda_available": device_info["cuda_available"],
          "device_name": device_info["device_name"],
          "device_count": device_info["device_count"],
      }
  )

# Так как мы используем PyTorch Lightning, добавляем логгер clearml в класс модели
model = BERTSentimentClassifier(
    learning_rate=LEARNING_RATE,
    num_labels=2,
    clearml_logger=task.get_logger(),  # передаем ClearML logger
)

Как говорится, семь раз отмерь: прежде чем запускать код на удаленном сервере, сделаем это локально. Установим зависимости согласно инструкции в README.md и запустим файл train.py для начала обучения:

python train.py

Далее проверяем в ClearML UI корректность логирования.

Рисунок 3. Результаты логирования метрик в ClearML UI при локальном запуске обучения

Рисунок 3. Результаты логирования метрик в ClearML UI при локальном запуске обучения

Запуск ClearML Agent в Google Colab

Для начала создадим очередь, откуда в агент будут поступать задачи. Это можно сделать в ClearML UI в разделе с очередями «Queues». Если не хочется совершать лишних телодвижений, используйте канал по умолчанию — default.

Рисунок 4. Пример создания очереди через ClearML UI

Рисунок 4. Пример создания очереди через ClearML UI

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

  • устанавливается clearml-agent;

  • проверяется доступность GPU;

  • добавляется SSH-ключ, чтобы агент ClearML смог склонировать GitHub-репозиторий с обучением.

Инструкция по созданию SSH-ключа и добавлению его на GitHub

Генерация SSH-ключей выполняется следующей командой:

ssh-keygen -t ed25519 -C "example@gmail.com"
Рисунок 5. Создание SSH-ключей

Рисунок 5. Создание SSH-ключей

В результате будут сгенерированы два файла: id_ed25519.pub и id_ed25519.

Далее нужно:

  • Авторизоваться на GitHub, перейти в настройки: Settings → SSH and GPG keys → New SSH key.

  • Скопировать содержимое ключа с расширением .pub и вставить в поле «Key». После этого нажать кнопку «Add SSH key»:

Рисунок 6. Добавление публичного SSH-ключа в GitHub для доступа к приватным репозиториям по SSH

Рисунок 6. Добавление публичного SSH-ключа в GitHub для доступа к приватным репозиториям по SSH

Теперь пройдем весь путь создания агента. 

Шаг 1. Добавляем созданные SSH-ключи в папку на Google Drive.

Рисунок 7. Добавление ключей в Google Drive

Рисунок 7. Добавление ключей в Google Drive

Шаг 2. Подключаем Google Drive в Google Colab. При этом Google запрашивает подтверждение для доступа к вашим данным:

from google.colab import drive
drive.mount('/content/drive')

Шаг 3. Подключаем и проверяем доступ к GitHub:

# копируем эти файлы из google drive в папку .ssh в Google Colab
!mkdir /root/.ssh/
!cp -r /content/drive/MyDrive/rsa_keys/id_ed25519* /root/.ssh/

# Проверяем 
!ls -a /root/.ssh

# Для получения публичных ключей хоста SSH для GitHub.com добавляем github в файл known_hosts
!ssh-keyscan github.com >> /root/.ssh/known_hosts

# Проверяем, что мы можем получить доступ к нашему github
!ssh -T git@github.com # Hi {тут будет ваш никнейм}! You've successfully authenticated, but GitHub does not provide shell access.

# Добавляем переменную окружения, чтобы не отрисовывать и не выводить информацию matplotlib
!export MPLBACKEND=TkAg 

Шаг 4. Устанавливаем credentials для ClearML Agent.

Как и на этапе настройки ClearML, хорошей практикой считается создание отдельных credentials для агента.

Пример создания отдельных credentials для ClearML Agent

Settings → Workspace → Create new credentials

Рисунок 8. Настройка рабочего пространства и создание кредов

Рисунок 8. Настройка рабочего пространства и создание кредов

Добавляем переменные CLEARML_API_ACCESS_KEY и CLEARML_API_SECRET_KEY в секретах Google Colab:

Рисунок 9. Создание переменных окружения в Google Colab

Рисунок 9. Создание переменных окружения в Google Colab

Затем эти переменные используются для подключения к ClearML Server.

from clearml import Task
from google.colab import userdata

# Читаем переменные окружения
clearml_api_key = userdata.get('CLEARML_API_ACCESS_KEY')
clearml_secret_key = userdata.get('CLEARML_API_SECRET_KEY')

# Настраиваем креды для подключения к ClearML Server
Task.set_credentials(
    api_host="<https://api.clear.ml>",
    web_host="<https://app.clear.ml>",
    files_host="<https://files.clear.ml>",
    key=clearml_api_key,
    secret=clearml_secret_key,
)

Шаг 5. Запускаем ClearML Agent для прослушивания очереди. По умолчанию задача выполняется в фоновом режиме.

Список аргументов для запуска агента доступен по ссылке.

Рисунок 10. Запуск агента ClearML в ячейке Google Colab ноутбука

Рисунок 10. Запуск агента ClearML в ячейке Google Colab ноутбука

Поведение агента задается переменными окружения, которые отображаются в терминале при запуске. Задать или поменять значение переменной можно в файле clearml.conf. Или же это делается напрямую — через переменную окружения. Список переменных доступен по ссылке. Будьте внимательны: не все переменные в clearml.conf дублируются переменными окружения!

Итак, ClearML Agent на удаленном сервере создан и отслеживается, о чем сообщается в ClearML UI. Теперь на агента можно назначать задачи.

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

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

Назначение задачи в очередь

С процессом подготовки среды разобрались — переходим к следующему шагу. Существуют три способа назначения задач в очередь. Рассмотрим каждый из них подробно.

Назначение задачи в очередь средствами ClearML UI

Появившуюся в ClearML UI задачу можно клонировать, после чего она перейдет в статус Draft. Это позволяет менять гиперпараметры задачи и назначать её на выполнение в нужную очередь.

На видео ниже продемонстрировано, как это сделать:

Назначение задачи в очередь с помощью SDK

В этом случае для добавления задачи в очередь необходимо дописать в код train.py следующую строку:

task.execute_remotely(queue_name="deep_school")

Вуаля! При выполнении скрипта train.py создается Task в ClearML Server, где сохраняется всё необходимое для воспроизведения эксперимента. Вызов task.execute_remotely() завершает локальное выполнение кода и назначает созданный task из ClearML Server в очередь deep_school, указанную в аргументе queue_name. Прослушивающий очередь агент извлекает задачу и запускает её выполнение с нуля.

Лайфхак: лучше вызвать task.execute_remotely() после первой или второй эпохи, когда нет сомнений в том, что эксперимент работает локально и не падает.

Назначение задачи в очередь с помощью CLI

В этом сценарии используется уже запущенная локально задача. Она назначается на выполнение в очередь при запуске агента. При необходимости можно изменить параметры задачи: количество эпох, пути к данным или другие аргументы командной строки.

clearml-task --base-task-id b8e466bc55b24a5b9cc164b6cb986fab --queue deep_school

После выполнения этой команды агент возьмет задачу из очереди и запустит её в полностью воспроизводимой среде:

  • —base-task-id — id задачи, на основе которой будет воспроизведен эксперимент;

  • —queue — очередь, на которую назначаем задачу. Важно, чтобы был агент, который её слушает.

Документация по ClearML Task доступна по ссылке.

Вне зависимости от способа запуска логи выполнения задачи доступны в интерфейсе ClearML UI.

Рисунок 13. Логи обучения задачи на удаленном сервере (в Colab)

Рисунок 13. Логи обучения задачи на удаленном сервере (в Colab)


Итак, мы рассмотрели принципы работы ClearML Agent и запуск обучения на удаленной машине с его помощью, а также способы назначения задач для агента в очередь.

Среди плюсов ClearML Agent — возможность запускать эксперименты на разных удаленных серверах c логированием в ClearML UI. Важно, что при запуске задачи в ClearML применяются все изменения в репозитории (даже незакоммиченные). Это позволяет сравнивать эксперименты и дает уверенность в их воспроизводимости.

Полезные ссылки

P.S. Первая версия статьи написана для блога DeepSchool. На Хабре публикуется с изменениями и дополнениями.