超参数
超参数是脚本的配置选项。由于超参数对模型性能有重大影响,因此有效地跟踪和管理它们至关重要。
ClearML 支持在每个实验中跟踪和管理超参数,并提供了一个专门的 超参数优化模块。通过 ClearML 的日志记录和跟踪功能,可以重现实验,并保存和比较它们的超参数和结果,这是理解模型行为的关键。
ClearML 允许您轻松尝试不同的超参数值,而无需更改原始代码。ClearML 的 执行代理 将通过 Web UI 覆盖您指定的任何新值(请参阅调优实验页面中的 配置)。您也可以通过编程方式设置实验参数。
跟踪超参数
超参数可以从代码的任何地方添加,ClearML 提供了多种获取它们的方式!ClearML 记录并跟踪各种类型的超参数,支持自动记录和显式报告。
自动日志记录
一旦在脚本中初始化了ClearML任务,ClearML会自动捕获并跟踪以下类型的参数:
- 命令行解析 - 调用使用标准Python包的代码时传递的命令行参数,包括:
- TensorFlow 定义 (
absl-py
). 查看 ClearML 自动记录 TF 定义的示例: - Hydra - ClearML 记录了包含所有配置文件的
OmegaConf
,以及在运行时被覆盖的值。
自动日志记录可以被禁用。请参阅控制自动日志记录。
环境变量
依赖环境变量会使实验无法完全复现,因为ClearML Agent无法在运行时复现它们。
可以通过在clearml.conf
文件的sdk.development.log_os_environments
字段中指定变量,将环境变量记录到任务中:
log_os_environments: ["AWS_*", "CUDA_VERSION"]
你也可以使用CLEARML_LOG_ENVIRONMENT
环境变量来指定环境变量:
-
所有环境变量:
export CLEARML_LOG_ENVIRONMENT=*
-
特定的环境变量。例如,记录
PWD
和PYTHONPATH
:export CLEARML_LOG_ENVIRONMENT=PWD,PYTHONPATH
-
没有环境变量:
export CLEARML_LOG_ENVIRONMENT=
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方法的概述。