自动化超参数优化变得简单

2022年3月8日
Hyperparameter Optimization dashboard
ClearML中的超参数优化仪表板

要快速回顾什么是超参数优化以及ClearML开箱即用支持哪些框架和策略,请查看我们之前的博客文章

太长不看; 

  • ClearML无需更改您的代码即可跟踪任何内容,因为它会自动记录参数及其相应的输出。
  • 能够访问输入、指标和代码环境本身,让您可以有效地优化任何内容、任何模型、任何黑盒。
  • 优化本身发生在您的代码之外,作为多个ClearML任务运行,因此可以轻松地在多台机器上并行执行这些任务(如果需要)。
  • 使用简洁的新UI,可以在超参数优化运行时总览整个过程,并轻松找到表现最佳的模型。

 

创建一个哑模型

为了展示这有多简单,我们来看一个哑模型的例子。

我们在这里做了一些事情,所以让我们分解一下。

首先,是2行魔法代码。这几行代码将启动实验跟踪并为我们提供ClearML任务对象。

接下来,我们创建超参数。在这个例子中,我们将它们放在一个字典中,但您可以将它们放在任何地方。类、字典、配置文件、命令行参数,随您喜欢。然后将它们连接到任务,以确保它们被记录下来。

ClearML会自动捕获报告给TensorBoard、Matplotlib、Python Argparse、Click、Hydra等工具的指标。在这些情况下,甚至不需要额外的代码!

现在我们创建一个哑模型,仅用于演示目的。

这可以是任何东西,这就是ClearML处理超参数优化的真正强大之处! 

唯一的先决条件是它具有我们想要操纵的输入参数以及我们想要优化的输出指标。

在这个例子中,为了保持其哑模型的特性,我们“模型”的输出将只是epoch数量的10倍。如果真实模型也能这么简单就好了…

我们还将立即运行它并在下一行获得输出。

最后,我们需要将模型输出报告给ClearML,以便它可以告知优化器这种超参数组合的效果,并可能调整其策略。我们通过将其作为标量报告给任务的日志记录器来完成此操作。我们还可以记录其他感兴趣的内容,例如图表、图像、评论、其他指标等。但现在我们先保持简单。请记住,对于很多框架,ClearML会开箱即用地记录这些标量!查阅文档了解更多信息。

将任务导入ClearML

现在剩下的就是运行一次此任务,将其导入系统。可以将其视为超参数优化的“模板”任务。当然,以ClearML的方式,我们可以选择在本地运行它,或者远程发送给我们的一个代理。

ClearML任务总览

 

然后……这就是开始优化所需的全部。从这里,您可以轻松告诉ClearML重复此任务,但使用不同的参数。我们可以通过克隆任务并手动编辑超参数来完成此操作。

但是在MLOps中手动编辑任务不是最佳方式,对吧?所以我们将其自动化,让ClearML来执行克隆,我们只需要告诉它参数范围即可。

 

直接从界面进行自动化超参数优化

当您甚至不想考虑它时。

将我们的哑模型任务作为模板导入系统后,围绕它设置一个HPO任务就非常容易了。在ClearML界面中,Applications(应用)下,您可以找到HPO向导。

Hyperparamter Optimization Application

Hyperparamter optimization diaglog box

点击加号启动新的HPO任务后,您会看到这个表单,可以快速轻松地设置参数范围和其他重要设置。

需要填写的一些重要信息包括

基础任务ID: 这是我们的“模板”任务的ID

优化策略:网格搜索(Gridsearch)和随机搜索(Randomsearch)可用,但如果可能应避免使用。请改用Optuna或HpBandSter (BOHB)。它们通过依赖于提前停止和智能资源分配等方式,可以非常高效地同时优化许多超参数。我们将在后续的博客文章中介绍这些优化器的详细信息。

标题&系列: 我们希望优化的标量的标题和系列。在我们的例子中,这是我们的“model_output”

离散或均匀参数:: 这些是我们想要操纵的超参数。

注意:检查模板任务以获取其确切名称,并在前面加上节名。

例如:

这里我们会写:General/epochs,表示epochs超参数值为10。

 

点击“启动新任务”(Launch New)后,您将被引导至一个仪表板,该仪表板将总览您的优化过程。您将能够看到不同任务的排行榜、显示主要优化指标随时间变化的图表等等。

启动我们的HPO任务将在我们的项目中创建大量任务,所有这些任务都是我们“模板”的克隆,但注入了不同的超参数。因此,在我们的项目中,我们将有一个模板任务、一个优化任务,以及由该优化任务产生的大量模板任务的克隆。当然,所有这些任务都可以进行比较、排名、排序等,或者您可以使用上面看到的总览仪表板。

 

Python SDK中的自动化超参数优化

当您想要更多控制时

直接从仪表板运行HPO非常酷,但有时您需要更多的控制和灵活性。所以很明显,我们在Python SDK中也能找到相同的功能。

HyperParameterOptimizer类接受与上面对话框相同的参数,因此没有太多新内容,但既然它已经在代码中,我们可以进一步实现自动化。例如,您可以将此HPO过程作为处理完全自动化再训练循环的ClearML管道的一部分。

代码可以在您的本地机器上运行,并在队列中生成新任务供代理拾取和处理。为此,请将以下行添加到脚本中。它们将监控进度并报告运行情况。

如果您愿意,也可以通过使用这段代码轻松地远程运行优化器任务本身

如果您想深入了解,别忘了查阅我们关于此主题的文档页面 🙂

 

坐下来放松

让您的代理完成工作!

Hyperparamter Optimization Dashboard

任务完成后,您可以在右上角的排行榜中看到表现最佳的任务及其相应的参数。您也可以轻松点击任务ID查看详细信息,例如检查一些调试图像或控制台输出,以确保一切都运行良好。

如果您读完了这篇博客文章:恭喜!希望您现在看到了ClearML在HPO方面采取的方法的潜力。如果您想深入了解,有一些 GitHub示例供您研究。如果您雄心勃勃,欢迎实现您自己的优化器并提交pull request!

Facebook
Twitter
LinkedIn
滚动到顶部