Skip to main content

实验管理最佳实践

视频教程


欢迎来到ClearML。在本视频中,我们将深入探讨一些在使用ClearML实验管理时可以应用的最佳实践和高级技巧。


首先要知道的是,Task对象是实验管理器以及编排和自动化组件的核心支柱。这意味着如果你在实验阶段很好地管理任务,那么在后期扩展到生产环境将会容易得多。

让我们更详细地看一下任务对象。我们有称为超参数的输入和用于外部配置文件的配置对象。输出可以是我们在上一个视频中看到的任何内容。像调试图像、图表和控制台输出这样的东西不言自明,所以我们将在这里重点关注的是标量和工件。

那么让我们从输入开始:超参数。超参数是代码的配置选项,不仅仅是你的模型。通常人们会将它们放在一个config.py文件或全局字典中。其他人则只使用命令行参数来实现这一点。

让我们以这段简单的代码为例。首先,我们使用之前介绍的两行魔法代码启动脚本。除此之外,我们在这里混合了命令行参数和一些字典中的附加参数。

命令行参数将被自动捕获,对于字典(或任何Python对象),我们可以使用Task.connect()函数,将我们的字典值报告为ClearML超参数。

如你所见,当我们运行脚本时,所有的超参数都被服务器捕获并解析,在用户界面中为你提供了一个清晰的概览。

配置对象的工作方式略有不同,主要用于更复杂的配置,例如嵌套字典或yaml文件。它们通过使用Task.connect_configuration()函数进行记录,并将配置作为一个整体保存,而不进行解析。

我们现在已经记录了我们的任务及其所有输入,但如果我们愿意,我们可以使用不同的参数重新运行我们的代码,这就是魔法发生的地方。

记住,ClearML 还会存储您的代码环境,使其可重现。因此,当我们在克隆任务时,我们正在复制该任务中的所有内容,并且它将处于草稿模式。现在我们可以直接从界面编辑任何超参数。然后我们可以将任务加入队列,这样它将被您的代理之一远程执行。特别之处在于,更改后的参数将被注入到您的原始代码中!因此,当您的代码现在处理我们刚刚更改的参数时,它将使用新值工作。这使您能够非常快速地使用不同的参数运行实验。我们甚至可以自动执行此操作,但这是关于自动化的视频的主题。

返回概览。你可以添加到任务中的一种输出类型被称为工件。

一个工件可以是很多东西,大多数情况下它们是文件,例如模型权重或包含预处理特征的Pandas DataFrames。我们的文档列出了所有支持的数据类型。

如果您愿意,可以从网页界面将代码生成的产物下载到本地计算机,但也可以通过编程方式获取这些产物。

假设我们有一个预处理任务,它生成一组特征作为产物,并且我们有一个训练任务。

我们可以设置我们的训练任务,从预处理任务中提取特征工件并开始训练。我们可以通过其ID或仅通过其名称选择预处理任务,在这种情况下,将提取项目中的最新任务。在这种情况下,如果我们获得新数据并重新运行预处理任务,我们的训练任务将在下次执行时自动提取最新的特征。你甚至可以更进一步,例如使用标签。不再需要到处移动csv文件。

另一种类型的工件是模型文件或权重文件,但它们在ClearML生态系统中有一个特殊的位置。首先,使用任何主要机器学习库保存的模型将像之前的命令行参数一样自动被捕获。

除此之外,模型不仅仅是其原始任务的产物,它们还作为一个独立的实体存在,这有两大优势。

首先,您不必像处理其他工件那样找到原始任务然后获取附加的模型,您只需通过其ID或标签拉取模型。它们也可以单独共享,而无需共享整个任务。

其次,你在运行实验时有机地建立了一个中央模型库,这在以后我们需要为模型提供服务时将非常有价值。我们可以像之前提取特征一样,以类似的方式提取最新的模型。

最后,我们有标量。这些是反映训练运行性能的数值指标,例如损失或准确率。

正确跟踪您的标量而不仅仅是查看控制台输出有很多好处。它们会随时间很好地绘制出来,因此可以轻松地与其他实验运行进行比较,就像我们在上一个视频中看到的那样。除此之外,您还可以将标量添加为实验概览中的自定义列,从而有效地创建最佳模型的排行榜。

然后我们甚至还没有讨论使用这些标量、工件和超参数自动化任务的所有方法。相信我,在未来,如果你现在正确地做到这一点,你的MLOps工程师会高兴得哭出来,而且很可能那个工程师就是你。

在接下来的视频中,我们最终将涵盖自动化和编排,以及我们的数据版本控制工具ClearML Data。

请随时在app.clear.ml上查看并测试所有这些功能,或者使用我们在GitHub上的自托管服务器,如果您需要任何帮助,请不要忘记加入我们的Slack频道