存储指标序列数据以实现快速访问

背景

Aim允许无限制地跟踪指标序列的步数。 对于每个指标几千步的情况,可以将整个序列加载到内存中并进行切片以获取所需的点数。 然而,当跟踪的步数非常多(数千万步)时,这种方法就不再适用。 从3.11版本开始,Aim的指标序列数据格式已更改,以提高长序列的数据收集/采样性能。

有哪些变化?

每个被追踪的值在Run的rocksdb数据库中都有其唯一的键。之前 跟踪步骤曾被用作这个键的一部分。这意味着为了获取 K个值的样本,我们不得不进行K次随机访问操作,或者遍历 整个序列并跳过某些值。这两种方式都会对数据读取性能产生负面影响。 随着Aim 3.11的发布,键现在使用稳定的随机哈希算法替代了跟踪步骤。 由于键是排序的,读取前K个键可以很好地近似表示整个 指标序列。

如果指标已记录该怎么办?

为了加速现有aim Repo的指标读取,需要执行数据格式升级。当Run处于写入状态时,升级会自动完成,因为无法混合使用两种格式。对于其他情况,新增了CLI命令来对选定的Run或整个仓库应用数据格式变更:

# update selected list of runs
aim storage upgrade 3.11+ <RUN_HASH_1> <RUN_HASH_2> ...

# update all runs in the repo
aim storage --repo <REPO_PATH> upgrade 3.11+ '*'

为应对任何问题,旧格式的Run数据备份仍然可用。如需回滚格式变更并恢复旧格式,请运行以下命令:

aim storage restore <RUN_HASH>