ClearML 集成
关于 ClearML
ClearML是一个开源MLOps平台,旨在简化您的机器学习工作流程并节省您的时间⏱️。
🔨 在 实验管理器 中跟踪每次 YOLOv5 训练运行
🔧 使用集成的 ClearML 数据版本控制工具 对您的自定义 训练数据 进行版本控制并轻松访问
🔦 使用 ClearML Agent 远程训练和监控 您的 YOLOv5 训练运行
🔬 使用 ClearML 超参数优化 获得最佳 mAP
🔭 使用 ClearML Serving,只需几个命令即可将新训练的 YOLOv5 模型转换为 API
还有更多。您可以自行决定使用多少工具,您可以坚持使用实验管理器,或者将它们全部链接到一个令人印象深刻的管道中!
🦾 环境配置
为了跟踪您的实验和/或数据,ClearML 需要与服务器通信。您可以通过 2 种方式获得服务器:
您可以免费注册 ClearML Hosted Service,也可以设置自己的 ClearML 服务器。即使服务器是开源的,所以即使您处理敏感数据,也应该没问题!
-
使用 pip 安装
clearml
python 包:pip install clearml
-
通过创建凭据(前往右上角的 Settings -> Workspace -> Create new credentials)将 ClearML SDK 连接到服务器,然后执行以下命令并按照说明操作:
clearml-init
就这样!你完成了 😎
🚀 使用 ClearML 训练 YOLOv5
要启用 ClearML 实验跟踪,只需安装 ClearML pip 包。
pip install clearml
这将启用与YOLOv5训练脚本的集成。 从现在开始,每次训练运行都将被ClearML 实验管理器捕获和存储。
如果您想更改 project_name
或 task_name
,使用 --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、精确率、召回率、损失、学习率等)
- 常规信息,例如机器详细信息、运行时、创建日期等。
- 所有生成的图,例如标签相关图和混淆矩阵
- 每个 epoch 的带边界框的图像
- 每个 epoch 的 Mosaic
- 每个 epoch 的验证图像数量
内容很多,对吧?🤯 现在,我们可以将所有这些信息在 ClearML UI 中可视化,以概览我们的训练进度。向表格视图添加自定义列(例如 mAP_0.5),以便您可以轻松地按性能最佳的模型进行排序。或者选择多个实验并直接比较它们!
我们可以利用所有这些信息做更多的事情,例如 超参数优化 和远程执行,如果您想了解其工作原理,请继续阅读!
🔗 数据集版本管理
通常,将数据与代码分开进行版本控制是一个好主意,并且可以轻松获取最新版本。此存储库支持提供数据集版本 ID,如果数据尚不存在,它将确保获取数据。除此之外,此工作流程还会将使用的数据集 ID 保存为任务参数的一部分,因此您将始终确切地知道哪个数据用于哪个实验!
准备您的数据集
YOLOv5 存储库通过使用包含其信息的 YAML 文件来支持许多不同的数据集。默认情况下,数据集会下载到 ../datasets
相对于仓库根目录的文件夹。因此,如果您下载了 coco128
如果您使用 YAML 文件中的链接或 YOLOv5 提供的脚本来获取数据集,您将获得以下文件夹结构:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
但这可以是您希望的任何数据集。只要您保持此文件夹结构,请随意使用您自己的数据集。
接下来,⚠️将相应的 YAML 文件复制到数据集文件夹的根目录⚠️。此 YAML 文件包含 ClearML 正确使用数据集所需的信息。当然,您也可以自己创建,只需遵循示例 YAML 的结构即可。
基本上我们需要以下键: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
上传您的数据集
要将此数据集作为版本化数据集导入 ClearML,请转到数据集根文件夹并运行以下命令:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
该命令 clearml-data sync
实际上是一个简写命令。您也可以依次运行以下命令:
# Optionally add --parent <parent_dataset_id> if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close
使用 ClearML 数据集运行训练
现在您有了一个 ClearML 数据集,您可以非常简单地使用它来训练自定义 YOLOv5 🚀 模型!
python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache
👀 超参数优化
既然我们已经对实验和数据进行了版本控制,那么现在让我们来看看我们可以在此基础上构建什么!
使用代码信息、已安装的软件包和环境详细信息,现在的实验本身是完全可重现的。 事实上,ClearML 允许您克隆实验,甚至更改其参数。 然后,我们可以使用这些新参数自动重新运行它,这基本上就是 HPO 所做的!
要在本地运行超参数优化,我们为您提供了一个预先制作的脚本。只需确保至少运行过一次训练任务,以便它在 ClearML 实验管理器中,我们将从本质上克隆它并更改其超参数。
您需要填写此 ID template task
在脚本中找到 utils/loggers/clearml/hpo.py
然后直接运行它。 您可以更改 task.execute_locally()
到 task.execute()
将其放入 ClearML 队列,并让远程代理处理。
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py
🤯 远程执行(高级)
在本地运行 HPO 非常方便,但如果我们要在一台远程机器上运行实验呢?也许您可以访问现场一台非常强大的 GPU 机器,或者您有一些预算可以使用云 GPU。这就是 ClearML Agent 发挥作用的地方。请在此处查看代理可以执行的操作:
简而言之:实验管理器跟踪的每个实验都包含足够的信息,以便在不同的机器上重现它(已安装的软件包、未提交的更改等)。因此,ClearML 代理就是这样做的:它监听队列中传入的任务,当找到一个任务时,它会重新创建环境并运行它,同时仍然向实验管理器报告标量、绘图等。
您只需运行以下命令,即可将任何机器(云 VM、本地 GPU 机器、您自己的笔记本电脑...)变成 ClearML 代理:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]
克隆、编辑和排队
在我们的代理运行后,我们可以给它分配一些工作。还记得在 HPO 部分中,我们可以克隆任务并编辑超参数吗?我们也可以通过界面来完成!
🪄 通过右键单击克隆实验
🎯 根据您的需求编辑超参数
⏳ 通过右键单击任务,将其加入到任何队列中
远程执行任务
现在您可以像我们上面解释的那样克隆一个任务,或者只需通过添加来标记您当前的脚本 task.execute_remotely()
执行后,它将被放入队列中,等待代理开始处理!
要远程运行 YOLOv5 训练脚本,您只需在 clearml 日志记录器实例化后,将这行代码添加到 training.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 either None is user did not choose for ClearML dataset or is filled in by ClearML
data_dict = loggers.clearml.data_dict
# ...
在此更改后运行训练脚本时,python将运行该脚本直到该行,之后它将打包代码并将其发送到队列!
自动缩放工作器
ClearML 还配备了 自动缩放器!每当队列中检测到实验时,此工具都会自动启动您选择的云(AWS、GCP、Azure)中的新远程计算机,并将它们转换为 ClearML 代理。任务处理完毕后,自动缩放器将自动关闭远程计算机,您也不再需要付费!
请查看下面的自动缩放器入门视频。
了解更多
有关将 ClearML 与 Ultralytics 模型集成的更多信息,请查看我们的ClearML 集成指南,并了解如何使用其他实验跟踪工具来增强您的 MLOps 工作流程。