Skip to main content

代理远程执行与自动化

视频教程


欢迎来到ClearML。在本视频中,我们将介绍ClearML代理,它可以让您远程运行任务,并为自动化工作流程打开大门。

还记得我们上一个视频中的概述吗?我们讨论了允许我们运行实验和数据管理的pip包,以及存储我们跟踪的所有内容的服务器。今天,我们添加了第三个组件:ClearML Agent。

代理将把任何机器,无论是本地的还是云端的,变成一个执行你任务的工作者。那么,让我们看看这是如何完成的!

为了本视频的目的,我们将在简单的Ubuntu机器上运行代理,但你可以在任何你想要的地方运行它。

代理可以通过使用pip包clearml-agent来安装。然后我们运行命令clearml-agent init将我们的代理连接到ClearML服务器。

粘贴凭据的方式与实验管理器中的方式相同,但与常规的clearml-init命令相比,您将被要求填写更多的选项。

最重要的区别是,您还需要提供您的git信息,这对于代理在被要求运行代码时能够拉取您的代码是必要的。您可以在我们的文档中找到有关这些设置的更多信息。

在我们运行代理之前,让我们快速看一下当我们启动它时会发生什么。

我们的服务器托管一个或多个队列,我们可以在其中放置我们的任务。然后我们有我们的代理。默认情况下,它将以pip模式或虚拟环境模式运行。一旦代理从队列中拉取一个新任务来执行,它将为其创建一个新的python虚拟环境。然后它将克隆代码本身并在新的虚拟环境中安装所有必需的python包。然后它运行代码并注入我们在UI中更改的任何新超参数。

PIP模式非常方便和高效。它会为每个拉取的任务创建一个新的Python虚拟环境,并使用智能缓存,以便可以在多个任务中重复使用包甚至整个环境。

你也可以在conda模式或poetry模式下运行代理,这基本上与pip模式做同样的事情,只是使用conda或poetry环境代替。

然而,还有docker模式。在这种情况下,代理将在其自己的docker容器中运行每个传入的任务,而不仅仅是在虚拟环境中。如果你的任务有系统包依赖,或者不是每个任务都使用相同的python版本,这将使事情变得容易得多。在我们的示例中,我们将使用docker模式。

现在我们的配置已经准备好了,我们可以通过在docker模式下运行命令clearml-agent daemon –docker来启动我们的代理。

运行命令后,我们可以在工作表中看到它弹出。现在代理将开始在default队列中监听任务,并准备就绪!

让我们给我们的工作人员一些事情做。假设你有一个已经在本地机器上运行的任务,并且你使用了我们之前看到的两行魔法代码来跟踪它。就像在上一个视频中一样,我们可以右键点击它并克隆它,所以它现在处于草稿模式。我们可以轻松地即时更改一些超参数,并将任务排队

代理将立即检测到我们已将一个任务加入队列并开始处理它。就像我们之前看到的那样,它将启动一个docker容器,安装所需的包和依赖项,并运行代码。

任务本身会像其他任务一样报告给实验管理器,您可以像平常一样浏览其输出,尽管我们在草稿模式下编辑了更改的参数。

在左侧,我们可以看到标有Workers and Queues的按钮。在Workers标签下,我们可以看到我们的工作器确实忙于我们的任务,并且我们还可以看到其资源利用率。如果我们点击当前实验,我们会再次进入实验视图。现在,假设我们在标量输出中看到我们的模型没有按照我们想要的方式进行训练,我们可以在这里中止任务,代理将开始处理队列中的下一个任务。

回到我们的工作人员概览。在队列标签中,我们获得了一些关于当前在队列中的实验的额外信息,我们甚至可以通过将它们拖动到正确的位置来更改它们的顺序,就像这样。最后,我们有关于总体等待时间和随时间推移的总体排队任务数量的图表。

说到这个,假设你的等待时间非常长,因为所有数据科学家都一致认为现在是训练模型的完美时机,而你的本地服务器已经满载。我们为AWS和GCP(正在开发中)内置了自动扩展器,当队列等待时间过长时,它会自动启动新的clearml-agent虚拟机。如果你选择ClearML的高级版本,你甚至还会得到一个非常漂亮的仪表板。

在下面的视频中,我们将更深入地探讨我们刚刚看到的这个新发现的自动化事物,并介绍诸如自动超参数优化和管道等内容。

但现在,请随意在您自己的机器上完全免费启动一些代理,访问 app.clear.ml 或使用我们在 GitHub 上的自托管服务器,如果您需要任何帮助,别忘了加入我们的 Slack 频道