概念

Aim的所有功能都是围绕几个关键概念构建的。本章将简要概述这些核心概念。更多详情请查阅参考部分或术语表

Aim Run

Run(运行)是一个抽象概念,代表单个实验的追踪数据。其内存模型是SDK类aim.Run。 这是训练脚本中用于追踪指标和对象的核心类,同时也用于存储训练超参数和其他数据。Run对象可被查询,用户界面提供了丰富功能来探索运行记录和浏览单个运行的详细信息。

Aim Repo

当您进行多次训练实验时,多个运行数据会存储在名为Aim仓库(简称repo)的单一目录中。您可以将aim仓库视为应用程序的集中式数据库。SDK为仓库提供了内存模型aim.Repo类,它负责管理仓库资源,并可用于查询和/或遍历存储的数据。

运行参数

每次运行都关联一组参数。这可能包括训练脚本的超参数、数据集信息等。Run对象提供了类似字典的接口来设置和访问运行参数。运行参数在查询上下文中也可用。您可以使用如下语法一次性设置整个配置:

run['hparams'] = conf

目前Run支持通过Python字典和OmegaConf配置来设置参数。 我们持续添加对流行配置格式的支持,完整列表可查阅 Supported Data types章节。

运行序列

序列是一组同质有序对象。在aim中,序列必须绑定到Run对象。当值被跟踪到aim时,它会被追加到现有或新创建的Sequence对象中。整个序列可以使用aim QL进行查询,每个序列还可以进一步切片。Sequence对象对其包含的元素类型是不可知的。序列在用户界面中的表示方式以及可能具有的额外操作集取决于元素类型。例如,Metric是一个标量序列。它可以在用户界面中表示为数值图表,并且SDK提供了将其转换为numpy.ndarray的方法。

序列上下文

序列上下文提供了一种机制,可以基于序列名称之外的简单字符串比较来查询/分组多个序列。具有相同名称但不同上下文的序列可以在一个Run范围内完美共存。换句话说,序列由其Run、名称和上下文定义。一个典型的使用场景是跟踪训练不同阶段(训练、验证、测试)的相同指标'loss'。最终的Run将包含3个指标: 1) 'loss' {'subset': 'train'} 2) 'loss' {'subset': 'val'} 3) 'loss' {'subset': 'test'} 以下是一个小代码示例,展示如何为指标序列指定上下文:

from aim import Run

aim_run = Run()
for i in range(100):
    if i % 2 == 0:
        aim_run.track(i, name=r'numbers', context={'odds': True})
    else:
        aim_run.track(i, name=r'numbers', context={'odds': False})