Skip to main content

第一步

note

本教程假设您已经注册了ClearML

ClearML 提供了用于自动化编排跟踪的工具,这些都是执行有效的 MLOps 和 LLMOps 的关键。

有效的MLOps和LLMOps依赖于将工作扩展到个人计算机之外的能力。从自己的机器上迁移可能会很耗时。 即使假设你已经安装了所有的驱动程序和应用程序,你仍然需要为不同的包/包版本管理多个python环境, 或者更糟的是——为不同的包版本管理不同的Docker。

更不用说,在远程机器上工作时,执行实验、跟踪哪些任务在哪些机器上运行,以及确保机器始终得到充分利用,这些任务变得非常艰巨。

这可能会产生开销,使您偏离核心工作!

ClearML Agent 旨在解决这些问题以及更多问题!它是一个负责在远程机器上执行实验的工具:无论是在本地还是在云端!ClearML Agent 提供了通过 ClearML WebApp 在您选择的机器上重现和跟踪实验的方法,无需额外的代码。

代理将为特定任务的执行设置环境(在Docker或裸机中),安装所需的python包,并执行和监控该过程。

设置代理

  1. 安装代理:

    pip install clearml-agent
  2. 通过创建凭证将代理连接到服务器,然后运行以下命令:

    clearml-agent init
    note

    如果您已经创建了凭据,您可以从这里复制粘贴默认代理部分(这是可选的。如果未提供该部分,将使用默认值)

  3. 启动代理的守护进程并将其分配给一个队列

    clearml-agent daemon --queue default

    队列是一个按顺序排列的任务列表,这些任务被安排执行。代理将从其分配的队列(在本例中为default)中拉取任务,并依次执行它们。多个代理可以监听同一个队列(甚至多个队列),但只有一个代理会拉取任务来执行。

Agent Deployment Modes

ClearML 代理可以部署在:

欲了解更多信息,请参阅运行模式

克隆实验

实验可以被复制(克隆)以进行验证或作为进一步实验的基线。 克隆任务会复制任务的配置,但不会复制其输出。

在ClearML WebApp中克隆实验:

  1. 点击任何项目卡片以打开其实验表
  2. 右键点击表格中的其中一个实验。
  3. 点击上下文菜单中的克隆,这将打开一个克隆实验窗口。
  4. 点击窗口中的CLONE

新克隆的实验将会出现,并且其信息面板将会滑动打开。克隆的实验处于草稿模式,因此可以进行修改。您可以编辑Git/代码引用,控制要安装的python包,指定要使用的Docker容器镜像,或者更改超参数和配置文件。有关在UI中编辑实验的更多信息,请参见修改实验

排队一个实验

一旦你设置好了一个实验,现在就是执行它的时候了。

要通过ClearML WebApp执行实验:

  1. 右键点击您的草稿实验(上下文菜单也可以通过实验信息面板右上角的Menu按钮访问)
  2. 点击ENQUEUE,,这将打开ENQUEUE EXPERIMENT窗口
  3. 在窗口中,从队列菜单中选择 default
  4. 点击 ENQUEUE

此操作将实验推入default队列。实验的状态变为待定,直到分配给队列的代理获取它,此时实验的状态变为运行中。代理执行实验,并且可以跟踪实验并可视化其结果

编程接口

上述的克隆、修改和入队操作也可以通过编程方式执行。

第一步

访问之前执行的实验

系统中的所有任务都可以通过其唯一的任务ID访问,或者基于其属性使用Task.get_task方法。例如:

from clearml import Task

executed_task = Task.get_task(task_id='aabbcc')

一旦获得了特定的Task对象,它可以被克隆、修改等。参见高级用法

克隆一个实验

要复制一个实验,请使用Task.clone方法,并输入一个Task对象或Task的ID作为source_task参数。

cloned_task = Task.clone(source_task=executed_task)

排队一个实验

要排队任务,请使用Task.enqueue方法,并使用task参数输入任务对象,以及使用queue_name指定要将任务推入的队列。

Task.enqueue(task=cloned_task, queue_name='default')

高级用法

在执行之前,使用多种编程方法来操作任务对象。

修改超参数

超参数是机器学习代码中不可或缺的一部分,因为它们允许你控制代码而无需直接修改它。超参数可以从代码的任何地方添加,而ClearML支持多种获取它们的方式!

用户可以以编程方式更改克隆实验的参数。

例如:

from clearml import Task

cloned_task = Task.clone(task_id='aabbcc')
cloned_task.set_parameter(name='internal/magic', value=42)

报告工件

工件是由您的任务创建的文件。用户可以从代码中上传多种类型的数据、对象和文件到任务中。

import numpy as np
from clearml import Task

Task.current_task().upload_artifact(name='a_file', artifact_object='local_file.bin')
Task.current_task().upload_artifact(name='numpy', artifact_object=np.ones(4,4))

工件是任务之间传递和重用数据的绝佳方式。可以通过访问创建它们的任务来检索这些工件。这些工件可以被修改并上传到其他任务中。

from clearml import Task

executed_task = Task.get_task(task_id='aabbcc')
# artifact as a file
local_file = executed_task.artifacts['file'].get_local_copy()
# artifact as object
a_numpy = executed_task.artifacts['numpy'].get()

通过促进任务之间复杂对象的通信,工件作为ClearML的数据管理管道解决方案的基础。

日志模型

将模型记录到模型仓库是直接将开发过程与生产集成的最简单方法。 任何由支持的框架(Keras / TensorFlow / PyTorch / Joblib 等)存储的模型都将自动记录到 ClearML 中。

ClearML 还支持显式记录模型的方法。模型可以自动存储在首选的存储介质上(S3 存储桶、Google 存储等)。

日志指标

使用Logger模块从您的进程中记录尽可能多的指标。这提高了您进程进展的可见性。

from clearml import Logger

Logger.current_logger().report_scalar(
graph='metric',
series='variant',
value=13.37,
iteration=counter
)

您还可以检索报告的标量以进行编程分析:

from clearml import Task

executed_task = Task.get_task(task_id='aabbcc')
# get a summary of the min/max/last value of all reported scalars
min_max_values = executed_task.get_last_scalar_metrics()
# get detailed graphs of all scalars
full_scalars = executed_task.get_reported_scalars()

查询实验

您还可以在系统中搜索和查询任务。使用Task.get_tasks类方法来检索任务对象,并根据任务的具体值(如状态、参数、指标等)进行过滤!

from clearml import Task

tasks = Task.get_tasks(
project_name='examples',
task_name='partial_name_match',
task_filter={'status': 'in_progress'}
)

管理您的数据

数据可能是决定项目成功的最重要因素之一。将模型的数据与模型的配置、代码和结果(如准确性)关联起来,是推断模型行为有意义见解的关键。

ClearML Data 允许您对数据进行版本控制,因此数据永远不会丢失,只需最少的代码更改即可从每台机器上获取数据,并将数据与实验结果关联起来。

记录数据可以通过命令行或编程方式完成。如果涉及任何预处理代码,ClearML 也会记录它!一旦数据被记录,它可以被其他实验使用。