Skip to main content

超参数

超参数是脚本的配置选项。由于超参数对模型性能有重大影响,因此有效地跟踪和管理它们至关重要。

ClearML 支持在每个实验中跟踪和管理超参数,并提供了一个专门的 超参数优化模块。通过 ClearML 的日志记录和跟踪功能,可以重现实验,并保存和比较它们的超参数和结果,这是理解模型行为的关键。

ClearML 允许您轻松尝试不同的超参数值,而无需更改原始代码。ClearML 的 执行代理 将通过 Web UI 覆盖您指定的任何新值(请参阅调优实验页面中的 配置)。您也可以通过编程方式设置实验参数。

跟踪超参数

超参数可以从代码的任何地方添加,ClearML 提供了多种获取它们的方式!ClearML 记录并跟踪各种类型的超参数,支持自动记录和显式报告。

自动日志记录

一旦在脚本中初始化了ClearML任务,ClearML会自动捕获并跟踪以下类型的参数:

Disabling Automatic Logging

自动日志记录可以被禁用。请参阅控制自动日志记录

环境变量

Experiment Reproducibility

依赖环境变量会使实验无法完全复现,因为ClearML Agent无法在运行时复现它们。

可以通过在clearml.conf文件的sdk.development.log_os_environments字段中指定变量,将环境变量记录到任务中:

log_os_environments: ["AWS_*", "CUDA_VERSION"]

你也可以使用CLEARML_LOG_ENVIRONMENT环境变量来指定环境变量:

  • 所有环境变量:

    export CLEARML_LOG_ENVIRONMENT=*
  • 特定的环境变量。例如,记录 PWDPYTHONPATH

    export CLEARML_LOG_ENVIRONMENT=PWD,PYTHONPATH 
  • 没有环境变量:

    export CLEARML_LOG_ENVIRONMENT=
Overriding clearml.conf

CLEARML_LOG_ENVIRONMENT 变量总是会覆盖 clearml.conf 文件。

当执行集成了ClearML的脚本时,ClearML会记录在clearml.conf中列出的环境变量或由CLEARML_LOG_ENVIRONMENT变量指定的环境变量。

显式日志记录

为了增强其自动日志记录功能,ClearML 支持显式记录参数。ClearML 提供了直接连接 Python 对象和配置对象的方法,以及手动设置和更新任务参数的功能。

连接Python对象

用户可以直接将Python对象(如字典和自定义类)连接到任务,使用 Task.connect 方法。一旦对象连接到任务,所有对象元素 (例如类成员、字典键值对)都会自动被ClearML记录。此外,ClearML会跟踪这些 值在代码中的变化。

当将对象连接到ClearML时,用户可以直接访问和修改对象的元素(例如,参数字典中的特定键值对)。

连接配置对象

配置对象是使用Task.connect_configuration()连接到任务的字典或配置文件。通过这种方法,配置对象被保存为二进制大对象(blobs),即ClearML不知道它们的内部结构。

设置和更新参数

ClearML 提供了手动设置和更新任务参数的方法。使用 Task.set_parameters() 手动定义参数。要更新实验中的参数,请使用 Task.set_parameters_as_dict()set_parameters_as_dict 方法更新参数,而 set_parameters 方法则覆盖参数。

ClearML 不会自动跟踪显式设置的参数的变化。

用户属性

用户属性不会影响任务执行,并且可以在任何阶段进行修改。它们便于设置有助于在实验表中显示的值(即自定义列),使得搜索/过滤实验更加容易。使用Task.set_user_properties方法向实验添加用户属性。

访问参数

ClearML 提供了直接访问任务记录参数的方法。

要获取任务的所有参数和属性(超参数、配置对象和用户属性),请使用 Task.get_parameters(),它将返回一个包含参数的字典, 包括它们的子部分(请参阅下面的WebApp部分)。

WebApp 界面

配置可以在Web UI实验页面的配置选项卡中查看。

配置面板根据类型分为三个部分:

  • 用户属性 - 可在执行后修改的部分
  • 超参数 - 用于配置的单个参数
  • 配置对象 - 通常是配置文件(JSON / YAML)或Python对象

这些部分根据参数的记录方式(通用/参数/TF_定义/环境)进一步细分为子部分。

任务超参数部分

SDK 接口

请参阅Task SDK页面的配置部分,了解使用超参数的基本Python方法的概述。