配置运行

您可以配置Aim运行实例来更改默认存储库位置、检索特定运行实例,或为您的运行存储自定义参数。您可以在实例化时配置您的运行。

在这里,您可以看到所有可用于配置Run实例的可用选项。

  • run_hash: 运行的哈希值。可用于从仓库中恢复/检索特定运行记录。这在您想更新已有运行或添加新指标时非常实用。如果省略,系统将自动生成哈希值。具体示例请参阅仓库中重用运行记录章节。 从Aim 3.13版本开始,run_hash值仅限于自动生成的值。这一限制旨在避免多种意外情况,例如:由于拼写错误而创建新Run而非重新打开现有运行、在Run.hash中使用特殊符号等。如果指定了错误的run_hash,系统将抛出MissingRunError错误。

  • repo: Aim仓库路径或Run对象绑定的Repo对象。如果省略,则使用默认Repo。更多内容请参阅为你的Repo定义自定义位置部分。

  • read_only: 运行创建模式。默认为False,表示Run对象可用于追踪指标。

  • experiment: 设置Run的experiment属性。如果未指定则默认为'default'。后续可用于查询runs/sequences。

  • system_tracking_interval: 设置系统使用指标(CPU、内存等)的跟踪间隔(秒)。设为None可禁用系统指标跟踪。

  • log_system_params: 启用/禁用系统参数记录功能,包括已安装的软件包、git信息、环境变量等。更多详情请查看训练运行可复现性章节。

在你的代码库中复用Run

有时您可能希望在现有的Run实例中添加/更新参数和跟踪值。这可以通过使用run_hash参数来实现。Aim仅为您的Run实例生成唯一ID(uuid),前提是未提供run_hash参数。以下是重用已生成run的示例。

from aim import Run

# You can also use ID shown in Aim Web after
# creating a run without supplying run_hash parameter
uid = '508c5b29-02c7-4875-a157-f099ea193bfa'
run = Run(run_hash=uid)
for i in range(100):
    run.track(i, step=i, name='test')

在上面的示例中,无论这段代码执行多少次,都只会创建或更新一个运行记录条目。

为您的仓库定义自定义位置

When you use aim, the library automatically creates .aim directory which we call “Repo” in your current directory. Aim stores data about your runs inside the Repo. Sometimes creating a Repo in your current directory is not convenient due to various reasons (like lack of permissions), and in such scenarios you can define your own path where a new .aim directory will be created or just reused.

from aim import Run

run = Run(repo='~/repo')
...

上述代码将创建一个新的目录条目 ~/repo/.aim

在实验中组织运行

Aim允许你将运行记录分组到实验下,这对于比较旨在解决特定任务的运行记录非常有用。

from aim import Run

run = Run(experiment="fraud-detection")

为Run添加标签和参数

Aim允许您在Run对象上添加标签和参数。例如,您可能希望用特定版本或关键字标记您的运行。或者您可能需要记录参数,以便了解处理该特定Run时使用了哪些参数。

添加和删除标签的示例

from aim import Run

run = Run()
run.add_tag('v1.0')
run.add_tag('some-awesome-tag')

或者您可以修改现有运行的标签,但首先需要通过其哈希值恢复Run对象

from aim import Run

uid = '508c5b29-02c7-4875-a157-f099ea193bfa'
run = Run(run_hash=uid)
run.remove_tag('some-awesome-tag')
run.add_tag('another-awesome-tag')

对于参数也采用几乎相同的方法

from aim import Run

run = Run()
var = 'some value'

run['var'] = var

此外,您可以使用运行对象的哈希键来恢复它,并覆盖之前存储的参数值。

from aim import Run

uid = '508c5b29-02c7-4875-a157-f099ea193bfa'
run = Run(run_hash=uid)
var = 'another value'

run['var'] = var

训练运行可复现性

在运行多个训练任务时,理解影响模型性能的关键因素至关重要。虽然超参数差异是最直观的检查点,但训练脚本环境本身可能会以意想不到的方式改变收集的元数据。能够复现运行环境对于获得可重复的结果至关重要。有时即使是脚本依赖项的次要版本变更,或是训练代码本身的微小调整,都可能影响训练结果。因此,记录每次运行时的包版本、环境变量、输入参数等信息显得尤为重要。

手动操作需要在训练脚本中添加大量代码。这时Aim记录系统参数的功能就能派上用场!

哪些数据会被自动记录?

Aim允许您为运行启用系统参数日志记录,从而将记录以下参数

  • 环境变量

  • 可执行文件

  • 命令行参数

  • 已安装的包及其版本

  • Git信息,如当前分支、提交哈希、作者等(如适用)

如何启用系统参数自动记录功能?

要启用上述参数的日志记录,您的Run实例必须提供log_system_params=True选项,默认情况下该功能是禁用的!

run = Run(log_system_params=True)

此外,这些记录的参数可用于搜索框中,根据提供的参数筛选运行记录。 在Aim中一切皆可搜索!

以下是一个使用示例:

run.__system_params.git_info.branch == 'feature/testing'

捕获终端日志

当涉及到在集群上使用作业调度器或工作负载管理器自动化训练多个运行时,跟踪这些运行的终端日志变得困难。这还包括来自训练节点的标准输出(stdout)和标准错误(stderr)。

检查这些终端日志非常重要,因为它们可能传达有关训练的关键信息,例如:

  • 关于训练过程的警告、提醒和错误信息,

  • 调试信息,

  • 模型训练统计信息、模型架构或摘要。

Aim让您能够通过将终端日志近乎实时地流式传输到Aim UI,从而更轻松地在一个地方分析这些日志。

默认会捕获终端日志。如需禁用,在初始化Run时将capture_terminal_logs参数设为False

aim_run = Run(capture_terminal_logs=False)

查看如何在Aim UI上查看捕获的日志这里