clearml/clearml · 上手攻略

  • 仓库:clearml/clearml
  • 链接:https://github.com/clearml/clearml
  • 分类:ai
  • 作者:Jay
  • 更新:2026-07-15

这是什么

ClearML 是一个开源的 ML/DL/GenAI 全栈开发与生产平台,涵盖实验管理(Experiment Manager)、数据管理与版本控制(Hyper-Datasets)、MLOps/LLMOps 编排(Agent + Orchestration)、模型服务(Model Serving)、报表与可视化(Reports)五大模块。用作者自己的话说:解决的是"训练生产级深度学习模型这个光荣但混乱的过程"的追踪与管控问题。

核心设计哲学是零摩擦集成:只需在代码里加两行(from clearml import Task + Task.init()),就能自动记录完整的实验环境、代码版本、超参数、输出日志、GPU 利用率等所有信息,无需修改现有训练代码结构。

目前 GitHub Stars 超过 6700,被大量 AI 研究团队和企业用于管理从研究到生产的完整工作流。


解决什么问题

机器学习项目在实际推进中会面临一系列基础设施挑战:

  • 实验混乱:跑了上百次实验,不知道哪个超参数对应哪个结果,代码改了也不知道有没有提升
  • 环境不可复现:队友的代码在自己机器上跑不通,缺少完整的环境记录
  • 算力调度原始:GPU 机器空闲时无法自动排队跑任务,需要人工干预
  • 数据版本缺失:训练数据更新后,无法追踪哪个模型用了哪版数据
  • 模型上线复杂:训练完的模型没有统一途径部署为 API 服务

ClearML 用一套平台把这五件事统一解决,且全部开源可自托管。


快速安装

前置:准备 ClearML Server

使用 ClearML 前需要连接到后端服务,有两种方式:

方式一:使用官方免费托管服务(推荐入门) 1. 访问 https://app.clear.ml 注册免费账号 2. 在 Settings → Workspace → Create credentials 获取 API KeySecret 3. 本地执行 clearml-init,按提示填入凭证

方式二:自托管(企业/隐私需求)

# 使用 Docker 部署完整 ClearML Server
# 参考:https://clear.ml/docs/latest/docs/deploying_clearml/clearml_server
docker pull allegroai/clearml

# docker-compose 快速启动
git clone https://github.com/clearml/clearml-server.git
cd clearml-server/docker
docker-compose up -d

安装 Python SDK

pip install clearml

# 可选:完整全家桶(含 Agent、Data 等)
pip install "clearml[full]"

初始化

clearml-init

按提示输入 api.clear.ml(托管服务地址)和从 https://app.clear.ml 获取的凭据。


核心用法

1. 实验追踪(Experiment Manager)——两行接入

from clearml import Task

# 初始化任务(这行代码之后,所有输出自动记录)
task = Task.init(
    project_name='my-research-project',
    task_name='ResNet50-baseline-v3'
)

# 正常写训练代码即可
# ClearML 会自动记录:
# - 代码(git commit + diff)
# - 依赖包及版本
# - 超参数(argparse/Click/Hydra 等)
# - 控制台输出(stdout/stderr)
# - TensorBoard / Matplotlib / 图像等各类 scalar
# - GPU/CPU 利用率
# - 模型快照

import torch
# ... 正常训练代码 ...

task.close()  # 任务结束时调用

2. 超参数记录(手动记录更精细控制)

from clearml import Task

task = Task.init(project_name='hpo', task_name='search')

# 记录字典类型的超参数
task.connect({
    'learning_rate': 0.001,
    'batch_size': 32,
    'optimizer': 'Adam'
})

# connect 还能追踪 argparse
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--lr', type=float, default=0.01)
args = parser.parse_args()
task.connect(parser)  # argparse 自动记录

3. 数据集管理(Hyper-Datasets)

# 创建数据集
clearml-data create --project my-project --name CIFAR10

# 上传本地数据
clearml-data upload --id <dataset_id> --files ./data/cifar10/

# 在代码中引用数据集
from clearml import Dataset

dataset = Dataset.get(dataset_id='<your-dataset-id>', dataset_project='my-project')
local_path = dataset.get_local_copy()  # 下载到本地

Python API 记录数据集版本:

from clearml import Dataset
import shutil

# 创建新版本
dataset = Dataset.create(
    dataset_project='my-project',
    dataset_name='coco2017'
)
dataset.add_files(path='./data/coco/train')
dataset.upload()
dataset.finalize()

4. 超参优化(Hyper-Parameter Optimization)

from clearml import Task
from clearml.automation.optuna import OptunaOptimizer

# 启动 Optuna 超参搜索
optimizer = OptunaOptimizer(
    task=Task.init(project_name='hpo', task_name='lr-search'),
    # 定义目标函数
    parameter_names=['config.lr', 'config.batch_size'],
    # 搜索空间
    search_space={
        'config.lr': {'type': 'uniform', 'min': 1e-5, 'max': 1e-1},
        'config.batch_size': {'type': 'choice', 'values': [16, 32, 64]},
    },
    # 优化目标:最小化 val_loss
    objectives=[{'type': 'minimize', 'metric': 'validation/loss'}],
)
optimizer.start()
optimizer.wait()  # 阻塞直到完成
best = optimizer.get_best_parameters()

5. Pipeline 编排

from clearml import PipelineController

pipeline = PipelineController(
    project='my-pipeline',
    name='training-pipeline',
)

# 添加步骤
pipeline.add_step(name='data_prep',  # 预处理步骤
    base_task_project='templates',
    base_task_name='preprocess-script',
)

pipeline.add_step(name='training',    # 训练步骤
    base_task_project='templates',
    base_task_name='train-script',
    parameter_override={'Args/lr': 0.001}  # 注入参数
)

pipeline.start()

6. 模型服务

# 启动模型服务(基于 Triton 或自带服务)
clearml-serving create --name my-service
clearml-serving add model --model_id <model_id> --endpoint /predict
clearml-serving start

典型适用场景

场景 适用模块
研究团队记录每次实验结果 Experiment Manager
团队共享训练环境和代码 Experiment Manager + Agent
大规模超参搜索(Bayesian / Optuna) Hyper-Parameter Optimization
大型数据集版本管理与共享 Hyper-Datasets
训练任务自动化调度(定时/Cron) Orchestration / Pipeline
训练完一键部署为 REST API Model Serving
监控模型推理性能与漂移 Model Monitoring(Serving 内置)
构建 RAG Pipeline(v3.25+ 向量库) Hyper-Datasets(向量字段)

坑与注意

1. 默认使用 demo server 的变更

ClearML 已不再默认连接公开 demo server(新用户若不加 CLEARML_NO_DEFAULT_SERVER=0 环境变量则不会连)。注意:发送到 demo server 的实验是公开的,请勿上传敏感实验。正式使用务必初始化自己的服务或使用托管版。

2. 初始化后配置存在本地

clearml-init 会把凭据写入 ~/clearml.conf(Linux/Mac)或 %USERPROFILE%\.clearml.conf(Windows),这台机器上所有项目共享同一身份。切换账号需要重新 clearml-init

3. Git 集成需注意未提交代码

ClearML 会自动记录 git diff(包括未 commit 的本地修改),这对追踪实验有帮助,但如果代码含敏感信息要注意。

4. 大文件上传需配置存储后端

直接用托管服务时,模型快照和数据集默认存在 ClearML 的存储中(免费额度有限)。生产环境建议配置 S3 / GCS / Azure Blob Storage 作为存储后端:

from clearml import OutputModel
model = OutputModel(task=task)
model.upload_storage = 's3://my-bucket/models/'

5. v3.25 新增向量数据库

v3.25(2025 年中)引入了 Hyper-Datasets 内置向量字段,可直接存储 embeddings 并在 UI 内做向量相似度搜索。这是构建 RAG pipeline 的新方式,但尚属新功能,相关 SDK API 可能仍在演进中,使用前核对当前最新版本文档。

6. 多 GPU / 分布式训练

ClearML Agent 支持 Docker 容器化的任务分发,但分布式 PyTorch(DDP)训练需要在代码层面正确配置 local_rank,ClearML 本身不自动处理多卡通信。


与同类对比

仓库/工具 定位 优点 缺点
ClearML 全栈 MLOps 平台 五件套合一、开源自托管、零摩擦集成 功能多导致学习曲线陡峭
MLflow 实验追踪为主 生态大、简单直观 数据管理/编排/服务偏弱
Weights & Biases (wandb) 实验追踪+可视化 界面好、免费个人版 非开源、服务器在国外
DVC 数据版本控制 数据管理强、轻量 不覆盖实验追踪和服务
Kubeflow 企业级 MLOps 适合大规模 K8s 部署 部署复杂,入门门槛高
Neptune.ai 实验管理即服务 托管简单、集成丰富 非开源、价格较贵

一句话推荐结论

如果你受够了每次复现实验都要翻聊天记录、手动记超参数、找队友要代码版本,ClearML 的"加两行代码自动记一切"是你目前在开源界能找到的最低摩擦、最高收益的 ML 实验管理方案,尤其适合研究团队或 AI 初创公司的全流程管理。