第一步
本教程假设您已经注册了ClearML
ClearML 提供了用于自动化、编排和跟踪的工具,这些都是执行有效的 MLOps 和 LLMOps 的关键。
有效的MLOps和LLMOps依赖于将工作扩展到个人计算机之外的能力。从自己的机器上迁移可能会很耗时。 即使假设你已经安装了所有的驱动程序和应用程序,你仍然需要为不同的包/包版本管理多个python环境, 或者更糟的是——为不同的包版本管理不同的Docker。
更不用说,在远程机器上工作时,执行实验、跟踪哪些任务在哪些机器上运行,以及确保机器始终得到充分利用,这些任务变得非常艰巨。
这可能会产生开销,使您偏离核心工作!
ClearML Agent 旨在解决这些问题以及更多问题!它是一个负责在远程机器上执行实验的工具:无论是在本地还是在云端!ClearML Agent 提供了通过 ClearML WebApp 在您选择的机器上重现和跟踪实验的方法,无需额外的代码。
代理将为特定任务的执行设置环境(在Docker或裸机中),安装所需的python包,并执行和监控该过程。
设置代理
-
安装代理:
pip install clearml-agent
-
通过创建凭证将代理连接到服务器,然后运行以下命令:
clearml-agent init
note如果您已经创建了凭据,您可以从这里复制粘贴默认代理部分(这是可选的。如果未提供该部分,将使用默认值)
-
启动代理的守护进程并将其分配给一个队列:
clearml-agent daemon --queue default
队列是一个按顺序排列的任务列表,这些任务被安排执行。代理将从其分配的队列(在本例中为
default
)中拉取任务,并依次执行它们。多个代理可以监听同一个队列(甚至多个队列),但只有一个代理会拉取任务来执行。
克隆实验
实验可以被复制(克隆)以进行验证或作为进一步实验的基线。 克隆任务会复制任务的配置,但不会复制其输出。
在ClearML WebApp中克隆实验:
- 点击任何项目卡片以打开其实验表。
- 右键点击表格中的其中一个实验。
- 点击上下文菜单中的克隆,这将打开一个克隆实验窗口。
- 点击窗口中的CLONE。
新克隆的实验将会出现,并且其信息面板将会滑动打开。克隆的实验处于草稿模式,因此可以进行修改。您可以编辑Git/代码引用,控制要安装的python包,指定要使用的Docker容器镜像,或者更改超参数和配置文件。有关在UI中编辑实验的更多信息,请参见修改实验。
排队一个实验
一旦你设置好了一个实验,现在就是执行它的时候了。
要通过ClearML WebApp执行实验:
- 右键点击您的草稿实验(上下文菜单也可以通过实验信息面板右上角的按钮访问)
- 点击ENQUEUE,,这将打开ENQUEUE EXPERIMENT窗口
- 在窗口中,从队列菜单中选择
default
- 点击 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 也会记录它!一旦数据被记录,它可以被其他实验使用。