跳至内容

ClearML 整合

清除|ML清除|ML

关于ClearML

ClearML是一个开源工具箱,旨在为您节省时间 ⏱️。

🔨 在实验管理器中跟踪每次YOLOv5 训练运行

🔧 利用集成的ClearML 数据版本工具,版本化并轻松访问自定义培训数据

🔦 使用ClearML Agent远程训练和监控您的YOLOv5 训练运行

🔬 利用ClearML 超参数优化获得最佳 mAP

🔭 使用ClearML Serving,只需几条命令就能将新训练的YOLOv5 模型转化为应用程序接口


还有更多。您可以自行决定使用其中多少种工具,您可以只使用实验管理器,也可以将它们串联起来,形成一个令人印象深刻的管道!

ClearML 标量仪表盘



🦾 准备工作

为了跟踪您的实验和/或数据,ClearML 需要与服务器通信。您有两种选择:

您可以免费注册ClearML 托管服务,也可以建立自己的服务器,请参见此处。即使是服务器也是开源的,因此即使您处理的是敏感数据,也不会有问题!

  • 安装 clearml python 包装

    pip install clearml
    
  • 通过创建凭据将ClearML SDK 连接到服务器(转到右上角的设置 -> 工作区 -> 创建新凭据),然后执行下面的命令并按说明操作:

    clearml-init
    

就是这样!你完成了 😎


🚀 培训YOLOv5 与ClearML

要启用ClearML 实验跟踪功能,只需安装ClearML pip 软件包即可。

pip install clearml>=1.2.0

这将实现与YOLOv5 训练脚本的整合。从现在起,每次训练运行都将被ClearML 实验管理器捕获和存储。

如果您想更改 project_nametask_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 个纪元保存一个检查点)。
  • 控制台输出
  • 标度(mAP_0.5、mAP_0.5:0.95、精确度、召回率、损失、学习率......)
  • 一般信息,如机器详细信息、运行时间、创建日期等。
  • 所有生成的图表,如标签相关图和混淆矩阵
  • 每个纪元带边框的图像
  • 每个纪元的镶嵌图
  • 每个历元的验证图像

很多吧?🤯现在,我们可以在ClearML UI 中将所有这些信息可视化,以了解我们的训练进度。在表格视图中添加自定义列(例如 mAP_0.5),这样就可以轻松对表现最好的模型进行排序。或者选择多个实验,直接进行比较!

我们还可以利用所有这些信息做更多事情,比如超参数优化和远程执行,如果你想了解其中的工作原理,请继续阅读!

数据集版本管理

一般来说,将数据与代码分开进行版本管理是个好主意,这样也便于获取最新版本。该版本库支持提供数据集版本 ID,如果数据集还没有版本 ID,它将确保获取数据。此外,该工作流还会将所使用的数据集 ID 保存为任务参数的一部分,因此您可以随时确定哪个实验使用了哪些数据!

ClearML 数据集界面

准备数据集

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

远程执行(高级)

在本地运行 HPO 确实非常方便,但如果我们想在远程机器上运行我们的实验呢?也许您可以在现场使用非常强大的 GPU 机器,或者您有一些预算来使用云 GPU。这就是ClearML 代理发挥作用的地方。点击此处查看代理的功能:

简而言之:实验管理器跟踪的每个实验都包含在不同机器上重现该实验的足够信息(已安装的软件包、未提交的更改等)。因此,ClearML 代理就能做到这一点:它会监听接收任务的队列,一旦发现任务,就会重新创建环境并运行,同时仍会向实验管理器报告标量、绘图等信息。

只需运行该程序,您就可以将任何机器(云虚拟机、本地 GPU 机器、自己的笔记本电脑......)变成ClearML 代理:

clearml-agent daemon --queue <queues_to_listen_to> [--docker]

克隆、编辑和排队

随着代理的运行,我们可以给它一些工作。还记得在 HPO 部分我们可以克隆任务并编辑超参数吗?我们也可以在界面上这样做!

🪄 右键单击克隆实验

🎯 将超参数编辑为您希望的值

⏳ 右键单击任务,将其queue 到任意队列中

从用户界面启动任务

远程执行任务

现在,你可以像上面解释的那样克隆一个任务,或者只需在当前脚本上添加 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 代理。任务处理完毕后,自动分级器将自动关闭远程机器,你也就不用再付费了!

请观看下面的自动平衡器入门视频。

观看视频



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (7), RizwanMunawar (1)

评论