Skip to main content

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_metricsmonitor_artifactsmonitor_models参数。

管道步骤缓存

Pipeline控制器支持步骤缓存,意味着可以重用之前执行的pipeline步骤的输出。

缓存的流水线步骤在满足以下条件时会被重用:

  • 步骤代码相同,包括环境设置(任务执行部分中的组件,如所需的包和docker镜像)
  • 步骤输入参数保持不变,包括步骤参数和参数(任何记录到任务的配置部分的内容)

默认情况下,管道步骤不会被缓存。在创建管道步骤时启用缓存(例如,参见@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管道的示例: