ClearML 管道
管道是一种简化和连接多个流程的方式,将一个流程的输出作为另一个流程的输入。
ClearML 管道由一个控制器任务实现,该任务包含管道步骤交互的逻辑。执行逻辑根据父步骤完成其执行来控制启动哪个步骤。根据控制器任务中规定的规范,可以覆盖步骤的参数,使用户能够利用其他步骤的执行产品,如工件和参数。
运行时,控制器将依次启动管道步骤。管道逻辑和步骤可以在本地执行,也可以使用clearml-agent在任何机器上执行。
Web UI中的Pipeline Run页面展示了管道的结构,包括执行的步骤及其状态,以及运行的配置参数和输出。更多详情请参见pipeline UI。
ClearML 管道是通过使用以下其中一种方式从代码创建的:
- PipelineController 类 - 一个用于定义和配置管道控制器及其步骤的Python接口。控制器和步骤可以是您Python代码中的函数,也可以是现有的ClearML 任务。
- PipelineDecorator 类 - 一组Python装饰器,将你的函数转换为管道控制器和步骤
当流水线运行时,会为控制器和步骤创建相应的ClearML任务。
由于管道控制器本身是一个ClearML任务,它可以被用作管道步骤。 这使得可以创建更复杂的工作流,例如运行其他管道的管道,或同时运行多个任务的管道。 请参阅表格训练管道示例,这是一个具有并发步骤的管道。
运行您的管道
ClearML 支持多种管道执行模式:
- 远程模式(默认)- 在此模式下,管道控制器逻辑通过指定的队列执行,所有管道步骤通过各自的队列远程启动。由于每个任务都是独立执行的,它可以控制其git仓库(如果需要)、所需的python包以及要使用的特定容器。
- Local Mode - In this mode, the pipeline is executed locally, and the steps are executed as subprocesses. Each subprocess uses the exact same Python environment as the main pipeline logic.
- 调试模式 (用于 PipelineDecorator) - 在此模式下,整个管道在本地执行,管道控制器和步骤像常规的 Python 函数一样同步调用,提供完全调试每个函数调用的能力。
当你运行你的流水线时,ClearML 收集并存储所有重现运行所需的信息。你可以通过 ClearML Web UI 重新运行流水线。参见 Pipeline Runs。
管道特性
工件和指标
每个流水线步骤都可以使用通常的流程(TB、Matplotlib 或使用
ClearML Logger)在步骤任务上记录额外的工件和指标。要在运行时获取步骤任务的实例,请使用
Task.current_task()
类方法。
此外,管道步骤可以直接使用这些PipelineController和PipelineDecorator类方法报告指标或上传工件/模型到管道:get_logger
, upload_model
, upload_artifact
.
管道控制器还支持在管道任务本身上自动记录步骤指标/工件/模型。
每个管道步骤都可以指定指标/工件/模型,以自动记录到管道任务中。其理念是
管道步骤在内部报告指标,而管道自动将它们收集到管道任务的统一视图中。要启用自动记录,请在创建管道步骤时使用monitor_metrics
、monitor_artifacts
、monitor_models
参数。
管道步骤缓存
Pipeline控制器支持步骤缓存,意味着可以重用之前执行的pipeline步骤的输出。
缓存的流水线步骤在满足以下条件时会被重用:
默认情况下,管道步骤不会被缓存。在创建管道步骤时启用缓存(例如,参见@PipelineDecorator.component
)。
当一个步骤被缓存时,步骤代码会被哈希处理,与步骤的参数(在运行时传递)一起生成一个表示哈希字符串。管道首先检查系统中是否存在缓存的步骤(归档的任务不会被用作缓存实例)。如果管道找到一个已完全执行的步骤实例,它将直接插入其输出,允许管道逻辑重用步骤输出。
回调函数
回调可以用来控制管道的执行流程。可以定义一个回调,在管道中每个任务执行之前和/或之后调用。此外,您还可以创建定制的、特定步骤的回调。
管道运行
当你运行你的流水线时,ClearML 收集并存储所有重现运行所需的信息(DAG、配置、安装的包、未提交的更改等)。
您可以通过ClearML Web UI重新运行管道。要为管道启动新的运行,请点击管道运行页面左上角的+ NEW RUN。这将打开一个NEW RUN模态框,您可以在其中设置运行的参数和执行队列。
新的流水线运行将通过执行队列由ClearML代理执行。代理将根据原始运行中捕获的配置和DAG重建流水线,并使用新运行模态中输入的值覆盖原始参数的值。
一个例外是对于从函数创建的管道(使用PipelineController.add_function_step()
向管道控制器添加步骤):
当您通过ClearML WebApp重新运行管道时,管道会在运行时从执行的代码中再次构建。
要更改此行为,在实例化PipelineController
时传递always_create_from_code=False
。在这种情况下,
当重新运行时,管道DAG将从存储在管道任务中的管道配置生成。这
允许您通过UI修改管道配置,而无需更改原始代码库。
管道版本
您可以为每个管道分配一个版本号,以帮助跟踪管道结构和参数的演变。 如果管道代码发生变化,管道的版本号会自动增加。如果没有变化, 管道将保留其版本号。
跟踪管道进度
ClearML 自动跟踪管道的进度百分比:已完成管道步骤数占总步骤数的比例。例如,如果一个管道由4个步骤组成,在第一个步骤完成后,ClearML 会自动将其进度值设置为25。一旦管道开始运行但尚未成功完成,WebApp 将在管道运行表中显示管道的进度指示,紧邻运行状态。
示例
查看构建ClearML管道的示例:
- PipelineDecorator
- PipelineController