LightZero 的日志记录和监控系统

LightZero 是一个强大的 MCTS 和强化学习框架,在训练过程中生成全面的日志文件和模型检查点。在本文中,我们将深入探讨 LightZero 的日志记录和监控系统,重点介绍运行框架后的文件目录结构以及每个日志文件的内容。

文件目录结构

当我们使用 LightZero 进行实验时,例如在 CartPole 环境中训练一个 MuZero 代理,框架会按如下方式组织输出文件:

cartpole_muzero
├── ckpt
│   ├── ckpt_best.pth.tar
│   ├── iteration_0.pth.tar
│   └── iteration_10000.pth.tar
├── log  
│   ├── buffer
│   │   └── buffer_logger.txt
│   ├── collector
│   │   └── collector_logger.txt
│   ├── evaluator
│   │   └── evaluator_logger.txt
│   ├── learner
│   │   └── learner_logger.txt
│   └── serial
│       └── events.out.tfevents.1626453528.CN0014009700M.local
├── formatted_total_config.py
└── total_config.py

正如我们所见,输出文件的主体由两个文件夹组成:log 和 ckpt,分别存储详细的日志信息和模型检查点。total_config.py 和 formatted_total_config.py 文件记录了本次实验的配置信息。关于它们具体含义的更多细节,请参阅配置系统文档。

日志文件分析

收集器日志

log/collector/collector_logger.txt 文件记录了当前收集阶段中收集器与环境交互的各种指标,包括:

  • episode_count: 在此阶段收集的剧集数量

  • envstep_count: 在此阶段收集的环境交互步骤的数量

  • train_sample_count: 在此阶段收集的训练样本数量

  • avg_envstep_per_episode: 每个回合中环境交互步骤的平均数量

  • avg_sample_per_episode: 每个情节的平均样本数

  • avg_envstep_per_sec: 每秒收集的环境交互步数的平均值

  • avg_train_sample_per_sec: 每秒收集的训练样本的平均数量

  • avg_episode_per_sec: 每秒收集的平均集数

  • collect_time: 在此阶段花费在数据收集上的总时间

  • reward_mean: 在此阶段的收集过程中获得的平均奖励

  • reward_std: 在此阶段收集的奖励的标准偏差

  • each_reward: 每集与环境交互的奖励值

  • reward_max: 在此阶段收集的最大单次奖励

  • reward_min: 在此阶段收集的最小单次奖励

  • total_envstep_count: 收集器收集的环境交互步骤的总累积数

  • total_train_sample_count: 收集器收集的样本总数。

  • total_episode_count: 收集器收集的剧集总数

  • total_duration: 收集器的总运行时间

评估器日志

log/evaluator/evaluator_logger.txt 文件记录了当前评估阶段评估器与环境交互的各种指标,包括:

  • [INFO]: Log prompts for each completed episode by the evaluator, including the final reward and current episode count

  • train_iter: 模型完成的训练迭代次数

  • ckpt_name: 本次评估中使用的模型检查点路径

  • episode_count: 本次评估中的集数

  • envstep_count: 本次评估中环境交互步骤的总数

  • evaluate_time: 本次评估所花费的总时间

  • avg_envstep_per_episode: 每个评估回合中环境交互步数的平均值

  • avg_envstep_per_sec: 在此评估中,每秒环境交互步数的平均值

  • avg_time_per_episode: 本次评估中每集的平均时间

  • reward_mean: 本次评估中获得的平均奖励

  • reward_std: 本次评估中奖励的标准差

  • each_reward: 评估者与环境每次交互的奖励值

  • reward_max: 在此评估中获得的最大奖励

  • reward_min: 本次评估中获得的最小奖励

学习者日志

log/learner/learner_logger.txt 文件记录了模型训练过程中学习者的各种信息,包括:

  • 神经网络结构:描述了MuZero模型的整体架构,包括表示网络、动态网络、预测网络等。

  • 学习者状态:以表格形式显示当前学习率、损失函数值、优化器监控指标等。

Tensorboard 日志文件

为了便于实验管理,LightZero 将 log/serial 文件夹中的所有分散日志文件保存为单个 Tensorboard 日志文件,命名为 events.out.tfevents.<时间戳>.<主机名> 格式。通过 Tensorboard,用户可以实时监控训练过程中各种指标的趋势。

检查点文件

ckpt 文件夹存储了模型参数的检查点文件:

  • ckpt_best.pth.tar: 在评估期间达到最佳性能的模型参数

  • iteration_<iteration_number>.pth.tar: 训练过程中定期保存的模型参数

如果你需要加载保存的模型,你可以使用像 torch.load(’ckpt_best.pth.tar’) 这样的方法来读取它们。

结论

LightZero 为用户提供了一个全面的日志记录和监控系统,帮助研究人员和开发人员深入了解强化学习代理的整个训练过程。通过分析收集器、评估器和学习器的指标,我们可以实时掌握算法的进展和有效性,并相应地优化训练策略。同时,检查点文件的标准化组织确保了实验的可重复性。LightZero 完善的日志记录和监控系统无疑将成为用户在算法研究和实际应用中的强大助手。