ClearML 集成
关于 ClearML
ClearML 是一个开源 MLOps 平台,旨在简化机器学习工作流程并节省工程时间。
- 🔨 在实验管理器中跟踪每一次 YOLOv5 训练运行。
- 🔧 使用集成的 ClearML 数据版本控制工具对你的自定义训练数据进行版本控制和访问。
- 🔦 使用 ClearML Agent 远程训练和监控 YOLOv5 运行。
- 🔬 使用 ClearML 超参数优化找到最佳 mAP。
- 🔭 使用 ClearML Serving,只需几个命令即可将你训练好的 YOLOv5 模型转换为 API。
根据需要使用这些工具中的任意数量——可以只从实验管理器开始,也可以将所有工具串联成一个完整的流水线。

🦾 设置工作环境
ClearML 需要与服务器通信以跟踪你的实验和数据。你有两个选择:
- 注册免费的 ClearML 托管服务,或者
- 部署你自己的 ClearML 服务器 —— 它是开源的,因此即使对于敏感数据,它也是一个可行的选择。
然后安装 clearml Python 包并将 SDK 连接到你的服务器:
pip install clearml在 设置 → 工作空间 → 创建新凭据(ClearML UI 右上角)生成凭据,然后运行:
clearml-init按照提示操作。就是这样 —— 设置已完成。
🚀 使用 ClearML 训练 YOLOv5
要启用实验跟踪,如果尚未安装,请安装 ClearML pip 包:
pip install clearml这将启用与 YOLOv5 训练脚本的集成。从现在开始,每一次训练运行都将被 ClearML 实验管理器捕获并存储。
要自定义项目和任务名称,请将 --project 和 --name 传递给 train.py。默认值为 YOLOv5 和 Training。ClearML 使用 / 作为子项目分隔符,因此在自定义项目名称中请避免使用 /。
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache或者使用自定义名称:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache每次运行都会捕获:
- 源代码和未提交的更改
- 已安装的包
- 超参数
- 模型检查点(使用
--save-period n每n个 epoch 保存一次) - 控制台输出
- 标量(mAP_0.5, mAP_0.5:0.95, 精度, 召回率, 损失, 学习率)
- 机器详情、运行时间和创建日期
- 生成的图表,如标签相关图和混淆矩阵
- 每个周期带有边界框的图像
- 每个周期的马赛克可视化
- 每个周期的验证图像
所有内容都会显示在 ClearML UI 中,以便你可以在一个地方监控训练。添加自定义列(例如 mAP_0.5)以按性能最好的模型排序,或选择多个实验进行并排比较。
继续阅读以了解超参数优化和远程执行。
🔗 数据集版本管理
将数据与代码分开进行版本控制,可以轻松拉取最新版本并确保完全可重现。此仓库接受数据集版本 ID,如果数据缺失则自动获取,并将 ID 记录为任务参数,以便你始终知道哪个实验使用了哪份数据。

准备你的数据集
YOLOv5 仓库通过 YAML 配置文件支持多种数据集。默认情况下,数据集会下载到相对于仓库根目录的 ../datasets 文件夹中。下载 coco128 后,文件夹结构如下所示:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt只要保留此结构,任何数据集都可以使用。
接下来,将数据集的 YAML 文件复制到数据集根文件夹中 —— ClearML 会读取此文件以正确使用数据集。你可以按照示例布局编写自己的 YAML,确保它定义了 path、train、test、val、nc 和 names。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE
|_ LICENSE
|_ README.txt上传你的数据集
要将数据集注册为版本化的 ClearML 数据集,请进入其根文件夹并运行:
cd ../datasets/coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .clearml-data sync 是以下序列的简写,你也可以显式运行该序列:
# Add --parent <parent_dataset_id> to base this version on a previous one.
# Duplicate files are not re-uploaded.
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close在 ClearML 数据集上训练
注册数据集后,通过 ID 将训练指向它:
python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache👀 超参数优化
通过对实验和数据进行版本控制,你可以在此基础上进行构建。由于每个被跟踪的实验都会捕获完整的环境(代码、已安装的包和配置),因此运行是完全可重现的。ClearML 允许你克隆一个实验、更改其参数并自动重新运行它,这就是超参数优化 (HPO) 的基础。
要在本地运行 HPO,请使用捆绑脚本。首先确保实验管理器中存在训练任务 —— 脚本会克隆它并改变其超参数。
在 utils/loggers/clearml/hpo.py 中填入模板任务 ID,然后运行:
# Install Optuna or change the optimizer to RandomSearch.
pip install optuna
python utils/loggers/clearml/hpo.py将 task.execute_locally() 切换为 task.execute(),将作业推送到 ClearML 队列中,以便远程代理拾取。

🤯 远程执行(进阶)
在本地运行 HPO 很方便,但你通常需要在更强大的硬件上进行实验 —— 本地 GPU 机器或云实例。这就是 ClearML Agent 的作用:
每个被跟踪的实验都包含在另一台机器上重现它所需的一切(已安装的包、未提交的更改和配置)。ClearML 代理监听队列,获取传入的任务,重建环境,运行作业,并将标量和图表流回实验管理器。
使用以下命令将任何机器(云虚拟机、本地 GPU 机器或笔记本电脑)变成 ClearML 代理:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]克隆、编辑和入队
代理运行后,你可以直接从 UI 为其分配工作:
- 🪄 右键点击实验并克隆它。
- 🎯 编辑其超参数。
- ⏳ 右键点击克隆的任务并将其加入目标队列。

远程执行任务
你也可以通过在实例化 ClearML 记录器后添加 task.execute_remotely(),以编程方式标记正在运行的脚本进行远程执行。将高亮显示的一行添加到 train.py:
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ ADD THIS LINE
# data_dict is None unless the user selected a ClearML dataset, in which case ClearML fills it in.
data_dict = loggers.clearml.data_dict
# ...更改后,运行训练脚本会执行到该行,打包代码,并将其发送到队列。
自动伸缩工作节点
ClearML 附带自动伸缩器,当队列中有待处理的实验时,它们会在 AWS、GCP 或 Azure 中启动远程机器,将其转换为 ClearML 代理,并在工作完成后将其关闭 —— 因此你只需为实际运行的计算付费。
观看下方的入门视频:
了解更多
有关将 ClearML 与 Ultralytics 模型集成的更多信息,请查看我们的 ClearML 集成指南,并探索如何使用其他实验跟踪工具增强你的 MLOps 工作流程。