从代码构建管道
视频教程
你好,欢迎来到ClearML。在本视频中,我们将看看如何将管道用作轻松自动化和编排多个任务的方式。
本质上,管道是一种以可扩展的方式自动化和编排多个任务执行的方法。在ClearML管道的上下文中,每个任务被称为步骤或组件,它不一定必须是现有的ClearML 任务,它可以是任何代码。
可以使用您自己的控制逻辑来编排管道。因此,您可以设置仅在任务1成功时运行任务2。但您也可以执行更复杂的控制逻辑,例如如果最终模型的准确率不够高,则使用不同的参数再次运行管道。
管道也具有高度可扩展性。就像ClearML生态系统中的任何对象一样,管道是一个具有输入和输出的任务,您可以像其他任务一样克隆它。如果您看过我们关于HPO的视频,这应该会让您想起一些东西。使用超参数优化来优化整个管道,并让所有步骤在自动扩展的代理集群上分布式运行是完全可行的。这难道不令人惊叹吗?
好的,但是我们如何创建一个呢?在ClearML中有两种主要方法。
一种方法是你可以轻松地将现有的ClearML任务链接在一起,创建一个单一的管道。这意味着管道中的每一步都是你之前使用实验管理器跟踪的任务。另一方面,你可以更深入一些,直接从你的代码库创建管道,这就是我们在这个视频中要关注的内容。但不用担心,两种情况下的最终结果是相同的:一个ClearML管道。
假设我们已经有了一些用于运行ETL的函数,以及另一个用于在预处理数据上训练模型的函数。我们还有一个主函数,用于协调这些其他组件应该在何时以及如何运行。
如果我们想将此代码转换为流水线,我们首先需要告诉ClearML这些函数应该成为我们流水线中的步骤。我们可以通过使用python装饰器来实现这一点!对于每个我们想要作为步骤的函数,我们可以用PipelineDecorator.component
来装饰它。
组件调用将完全自动将此函数转换为ClearML任务,并附带所有相关优势。它还将明确表明此任务将是更大管道的一部分。
我们可以指定函数将返回哪些值,这些值将成为新任务中的工件。这将允许管道中的后续任务轻松访问它们。
我们还可以缓存函数,这意味着如果管道重新运行,但此函数没有更改,我们将不会再次执行该函数,这在加载大量数据时非常方便,例如需要很长时间的情况。
你可以通过配置这个组件走得很远,甚至可以指定当代理运行时,这个特定步骤应该在哪个docker镜像中执行。查看下面链接中的文档,了解所有参数的详细概述。
接下来我们需要的是我们的控制逻辑,即将所有其他代码绑定在一起的代码。在ClearML中,这被称为控制器。我们已经在主函数中将控制逻辑编写为代码,因此我们可以在这里添加一个不同的装饰器,称为:pipeline
。与任何其他任务一样,pipeline装饰器所需的唯一参数是名称和项目。非常简单。
最后,我们可以为整个管道添加参数。这意味着我们以后可以在用户界面中轻松更改这些参数,并完全自动地使用新参数重新运行管道,就像我们在之前的视频中对普通任务所做的那样。
这里的一个重要注意事项是,只有当一个步骤使用前一个步骤的输出时,它才会等待前一个步骤完成后才开始执行。如果不是这样,这些步骤将会并行执行。
最后,我们现在可以运行我们的管道了!我们可以选择在本地运行它,这意味着控制器和所有步骤都将在您的本地机器上作为子进程运行。这对于调试非常有用,但如果我们想要管道的真正扩展能力,我们可以正常执行它,管道和任务将被排队,以便它们可以由我们的远程代理执行。管道任务本身将被排入一个特殊的services
队列,因此在为管道执行设置代理时,请先查看文档。
运行管道后,您可以在实验视图中看到控制器任务和第一步弹出。但使用专用的管道UI更容易,我们可以在左侧找到它。
在这里,我们可以找到我们的管道项目,它会自动跟踪我们进行的每一次运行。如果我们点击这里的管道,我们可以看到管道步骤的漂亮可视化表示。
当没有选择步骤时,我们可以在右侧看到我们的全局管道信息。通过点击详细信息按钮,我们可以获取管道控制台的输出,即示例中的主函数,这样我们就可以看到哪些步骤在何时被执行。
如果我们从我们的管道中选择一个步骤,我们可以看到许多相同的细节,但这次是针对那个特定的步骤。在右侧,我们可以看到我们的步骤产生的任何输入或输出,在下面,我们可以看到步骤的控制台输出以及原始代码。
但现在迎来了最强大的功能。再次强调,管道控制器和其他任务一样,所以…我们可以像其他任务一样克隆它。按下+ 新建运行按钮将允许我们从用户界面进行此操作!我们甚至可以在这里更改我们的全局管道参数,就像普通任务一样,这些参数将被注入到原始任务中并覆盖原始参数。通过这种方式,您可以非常快速地运行许多具有不同参数的管道。
在本入门系列的下一段视频中,我们将深入了解ClearML Data,我们的数据版本控制工具。在此期间,您可以在app.clear.ml上免费为您的函数添加一些管道装饰器,如果您需要任何帮助,别忘了加入我们的Slack频道。