任务
ClearML 任务 是 ClearML 实验管理器的核心。
任务是一个单一的代码执行会话,它可以代表一个实验、工作流程中的一个步骤、工作流程控制器,或者您选择的任何自定义实现。
要将现有脚本转换为ClearML任务,请调用Task.init()
方法
并指定任务名称及其项目。这将创建一个任务对象,自动捕获代码执行信息以及执行输出。
任务捕获的所有信息默认上传到ClearML Server, 并且可以在ClearML WebApp (UI)中可视化。ClearML 还可以配置为上传 模型检查点、工件和图表到云存储(参见存储)。此外, 您可以在离线模式下处理任务,其中所有信息都保存在本地文件夹中(参见 离线存储任务数据)。
任务被分组到一个项目层次结构中,类似于文件文件夹。用户可以决定如何分组任务,尽管不同的模型或目标通常被分组到不同的项目中。
任务可以通过代码访问和利用。访问任务通过指定项目名称和任务名称的组合或通过唯一ID。
您可以创建任务的副本(克隆),然后使用 ClearML Agent 执行它们。当代理执行任务时,它会使用指定的配置来:
- 安装所需的Python包
- 应用代码补丁
- 设置超参数和运行时配置值
修改任务克隆的配置将使执行的ClearML代理覆盖原始值:
- 修改后的包要求将使实验脚本使用更新的包运行
- 修改后的记录命令行参数将使ClearML代理注入新值以替代它们
- 使用
Task.connect
进行代码级配置将被修改的超参数覆盖
任务部分
ClearML任务的各个部分由任务捕获和存储的信息组成,这些信息包括代码执行细节和执行输出。这些信息用于跟踪和可视化结果、重现、调整和比较实验,以及执行工作流程。
捕获的代码执行信息包括:
- Git 信息
- Uncommitted code changes
- Python 环境
- 执行配置 和超参数
捕获的执行输出包括:
有关每个任务部分的更深入描述,请参见跟踪实验和可视化结果。
执行配置
ClearML 记录任务作为命令行参数、环境或代码级别变量指定的超参数。这使得实验可以重现,并且它们的超参数和结果可以被保存和比较,这是理解模型行为的关键。
超参数可以从代码的任何地方添加,ClearML 提供了多种记录它们的方法。如果您使用流行的 Python 包(如 argparse 和 click)指定参数,您只需要 初始化 一个任务,ClearML 将自动记录这些参数。ClearML 还提供了显式报告参数的方法。
当通过ClearML代理执行任务时,您的代码的ClearML工具允许使用ClearML UI来覆盖您参数的原始指定值。
查看超参数以获取更多信息。
工件
ClearML 允许轻松存储实验的输出产品作为工件,这些工件以后可以通过 web UI 或以编程方式轻松访问和使用。
ClearML 提供了方法来轻松跟踪实验执行过程中生成的文件,例如:
- Numpy 对象
- Pandas 数据框
- PIL
- 文件和文件夹
- Python 对象
- 还有更多!
最重要的是,ClearML 还会记录实验的输入和输出模型以及中间模型快照(参见 Models)。
记录工件
ClearML 提供了一个明确的日志记录接口,支持手动报告各种工件。任何类型的工件都可以使用 Task.upload_artifact()
记录到任务中。更多详细信息请参见 工件报告示例。
ClearML 可以配置为将工件上传到任何支持的存储类型,包括本地和共享文件夹、AWS S3 存储桶、Google 云存储和 Azure 存储。有关更多信息,请参阅 存储。
调试样本的处理方式不同,请参见Logger.set_default_upload_destination
。
访问工件
已记录的工件可以通过其他任务通过任务访问它们所附加的工件,然后使用以下方法之一检索工件:
get_local_copy()
- 缓存文件以供以后使用,并返回缓存文件的路径。get()
- 用于Python对象。返回Python对象的方法。
更多详情请参见使用Artifacts示例。
任务类型
任务有一个类型属性,表示它们的用途。这有助于进一步组织项目并确保任务易于搜索和查找。可用的任务类型有:
- 训练 (默认) - 训练模型
- 测试 - 测试一个组件,例如模型性能
- inference - 模型推理任务(例如离线/批量模型执行)
- controller - 一个任务,用于布置其他任务交互的逻辑,无论是手动还是自动(例如管道控制器)
- optimizer - 用于优化任务的特定类型控制器(例如 超参数优化)
- service - 长期或重复的服务(例如服务器清理、自动入口、同步服务等)
- monitor - 一种特定类型的监控服务
- application - 一个实现自定义应用逻辑的任务,如 autoscaler 或 clearml-session
- data_processing - 任何数据输入/预处理(参见 ClearML 数据)
- qc - 质量控制(例如,评估模型性能与盲数据集)
- 自定义 - 一个不符合上述任何条件的任务
任务生命周期
ClearML 任务通过以下方法之一创建:
- 手动运行使用ClearML SDK检测并调用
Task.init
的代码。 - 克隆现有任务。
- 通过CLI使用clearml-task创建任务。
记录任务信息
上图描述了在使用ClearML进行代码插桩时,如何记录执行信息:
- 一旦ClearML任务初始化,ClearML会自动记录完整的环境信息
包括:
- Source Code
- Python环境
- Configuration Parameters
- 随着执行的进行,任何产生的输出都会被记录下来,包括:
- Console Log
- 指标和图表
- 模型和其他工件
- 脚本一旦终止,任务的状态将更改为
Completed
、Failed
或Aborted
(请参阅下面的任务状态)。
所有记录的信息都可以在任务详情界面中查看。
克隆任务
上图展示了如何将先前运行的任务用作实验的基线:
- 先前运行的任务被克隆,创建一个新任务,处于
Draft
模式(见下面的任务状态)。
新任务保留源任务的所有配置。原始任务的输出不会被继承。 - 新任务的配置被修改以反映新执行的所需参数。
- 新任务已加入队列等待执行。
- 一个
clearml-agent
服务队列拉取新任务并执行它(其中ClearML再次记录所有执行输出)。
任务状态
任务的状态代表了它在任务生命周期中的阶段。它指示任务是可读写(可编辑)还是只读。对于每个状态,状态转换指示可以在实验上执行哪些操作,以及执行操作后的新状态。
下表描述了任务状态和状态转换。
State | Description / Usage | State Transition |
---|---|---|
Draft | The experiment is editable. Only experiments in Draft mode are editable. The experiment is not running locally or remotely. | If the experiment is enqueued for a worker to fetch and execute, the state becomes Pending. |
Pending | The experiment was enqueued and is waiting in a queue for a worker to fetch and execute it. | If the experiment is dequeued, the state becomes Draft. |
Running | The experiment is running locally or remotely. | If the experiment is manually or programmatically terminated, the state becomes Aborted. |
Completed | The experiment ran and terminated successfully. | If the experiment is reset or cloned, the state of the cloned experiment or newly cloned experiment becomes Draft. Resetting deletes the logs and output of a previous run. Cloning creates an exact, editable copy. |
Failed | The experiment ran and terminated with an error. | The same as Completed. |
Aborted | The experiment ran, and was manually or programmatically terminated. The server's non-responsive task monitor aborts a task automatically after no activity has been detected for a specified time interval (configurable). | The same as Completed. |
Published | The experiment is read-only. Publish an experiment to prevent changes to its inputs and outputs. | A Published experiment cannot be reset. If it is cloned, the state of the newly cloned experiment becomes Draft. |