Shortcuts

如何理解训练过程中生成的文件夹?

DI-engine 在训练过程中会生成很多文件夹:

  • 串行(serial) 模式下, DI-engine 生成 log 和 checkpoint 文件夹.

  • 并行(parallel) 模式下, DI-engine 生成 log, checkpoint, data 和 policy 文件夹.

我们将分别介绍这两种模式。

串行模式

在串行模式下,生成的文件树如下:

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

    在 buffer 这个文件夹里, 有一个名为 buffer_logger.txt 的文件,其中包含buffer中有关数据使用情况的一些信息。

    经过一定次数的采样后,会打印出采样信息,显示采样数据的属性,并且也展示出数据的质量。 表格如下图所示:

    Name

    use_avg

    use_max

    priority_avg

    priority_max

    priority_min

    staleness_avg

    staleness_max

    Value

    float

    int

    float

    float

    float

    float

    float

    一定秒数后,吞吐量信息(进入buffer的数据数量、采样次数、删除数量、目前拥有的有效数量)将打印如下:

    Name

    pushed_in

    sampled_out

    removed

    current_have

    Value

    float

    float

    float

    float

  • log/collector

    在收集器文件夹中,有一个名为“collector_logger.txt”的文件,其中包含一些与环境交互相关的信息。

    • 设默认置 n_sample 模式。 collector 的基本信息: n_sample 和 env_num. n_sample 表示采集的数据样本数. 对于 env_num,它表示collector将与多少个环境交互。

    • collector与环境交互时产生的特殊信息,例如

      • episode_count: 收集数据的episode数量

      • envstep_count: 收集数据的envstep数量

      • train_sample_count: 训练样本数据个数

      • avg_envstep_per_episode: 每个 eposide中平均的 envstep

      • avg_sample_per_episode: 每个episode中的平均样本数

      • avg_envstep_per_sec: 每秒平均的env_step

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

      • avg_episode_per_sec: 每秒平均episode数

      • collect_time: 收集时间

      • reward_mean: 平均奖励

      • reward_std: 奖励的标准差

      • each_reward: collector与环境交互时的每个episode的奖励。

      • reward_max: 最大reward

      • reward_min: 最小reward

      • total_envstep_count: 总 envstep 数

      • total_train_sample_count: 总训练样本数

      • total_episode_count: 总 episode 数

      • total_duration: 总持续时间

  • log/evaluator

    在 evaluator 文件夹中,有一个名为 evaluator_logger.txt 的文件,其中包含有关 evaluator 与环境交互时的一些信息。

    • [INFO]: env 完成episode,最终奖励:xxx,当前episode:xxx

    • train_iter: 训练迭代数

    • ckpt_name: 模型路径,如iteration_0.pth.tar

    • episode_count: episode计数

    • envstep_count: envstep计数

    • evaluate_time: evaluator花费的时间

    • avg_envstep_per_episode: 每个episode的平均envstep

    • avg_envstep_per_sec: 每秒的平均envstep

    • avg_time_per_episode: 每秒的平均episode

    • reward_mean: 平均奖励

    • reward_std: 奖励的标准差

    • each_reward: evaluator与环境交互时的每个episode的奖励。

    • reward_max: 最大reward

    • reward_min: 最小reward

  • log/learner

    在learner文件夹中,有一个名为“learner_logger.txt”的文件,其中包含有关learner的一些信息。

    以下信息是在 DQN 训练期间生成的

    • 策略神经网络架构:
      INFO:learner_logger:[RANK0]: DI-engine DRL Policy
      DQN(
        (encoder): FCEncoder(
          (act): ReLU()
          (init): Linear(in_features=4, out_features=128, bias=True)
          (main): Sequential(
            (0): Linear(in_features=128, out_features=128, bias=True)
            (1): ReLU()
            (2): Linear(in_features=128, out_features=64, bias=True)
            (3): ReLU()
          )
        )
        (head): DuelingHead(
          (A): Sequential(
            (0): Sequential(
              (0): Linear(in_features=64, out_features=64, bias=True)
              (1): ReLU()
            )
            (1): Sequential(
              (0): Linear(in_features=64, out_features=2, bias=True)
            )
          )
          (V): Sequential(
            (0): Sequential(
              (0): Linear(in_features=64, out_features=64, bias=True)
              (1): ReLU()
            )
            (1): Sequential(
              (0): Linear(in_features=64, out_features=1, bias=True)
            )
          )
        )
      )
      
    • leaner信息:

      网格表:

      Name

      cur_lr_avg

      total_loss_avg

      Value

      0.001000

      0.098996

  • serial

    将buffer、collector、evaluator、learner的相关信息保存到名为 events.out.tfevents 的文件中,供 tensorboard 使用。

    DI-engine 将串行文件夹中的所有 tensorboard 文件保存为 一个 tensorboard 文件 ,而不是各自的文件夹。 因为在跑如果跑n个实验的时候,当n很大时,4*n个各自的tensorboard文件不容易判别。 所以在串行模式下,所有的 tensorboard文件都在串行文件夹中 (但是,在并行模式下,tensorboard文件位于各自的文件夹中)。

  • ckpt

    在这个文件夹中,有模型参数 checkpoints:
    • ckpt_best.pth.tar. 达到最高评价分数的最佳模型.

    • “iteration” + iter number. 每 iter_number 保存的模型。

    您可以使用 torch.load('ckpt_best.pth.tar') 来加载模型。

并行模式

cartpole_dqn
├── ckpt
│   └── iteration_0.pth.tar
├── data
├── log
│   ├── buffer
│   │   ├── buffer_logger.txt
│   │   └── buffer_tb_logger
│   │       └── events.out.tfevents.1626453752.CN0014009700M.local
│   ├── collector
│   │   ├── 4890b4c5-f084-4c94-b440-75f9fa602388_614285_logger.txt
│   │   ├── c029d882-fe4f-4a1d-9451-13015bbca192_750418_logger.txt
│   │   └── fc68e215-f062-4a1b-a0fd-dcf5f375b290_886803_logger.txt
│   ├── commander
│   │   ├── commander_collector_logger.txt
│   │   ├── commander_evaluator_logger.txt
│   │   ├── commander_logger.txt
│   │   └── commander_tb_logger
│   │       └── events.out.tfevents.1626453748.CN0014009700M.local
│   ├── coordinator_logger.txt
│   ├── evaluator
│   │   ├── 1496df45-8858-4f38-82da-b4a39461a268_451909_logger.txt
│   │   └── 2e8879e3-8af5-4ebb-8d50-8af829f03845_711157_logger.txt
│   └── learner
│       ├── learner_logger.txt
│       └── learner_tb_logger
│           └── events.out.tfevents.1626453750.CN0014009700M.local
└── policy
    ├── policy_0d2a6a81-fd73-4e29-8815-3607f1428aaa_907961
    └── policy_0d2a6a81-fd73-4e29-8815-3607f1428aaa_907961.lock:

并行模式下,log文件夹有5个子文件夹,包括buffer、collector、evaluator、learner、commander和一个文件coordinator_logger.txt

  • log/buffer

    在 buffer 文件夹中, 有一个名为 buffer_logger.txt 的文件和一个名为 buffer_tb_logger 的子文件夹。

    buffer_logger.txt 中的数据与串行模式下的数据相同。

    在 buffer_tb_logger 文件夹中,有一个 events.out.tfevents tensorboard 文件。

  • log/collector

    在collector文件夹中,有很多 collector_logger.txt 文件,包括collector与环境交互时的collector信息。并行模式有很多collector,所以有很多 collector_logger.txt 文件记录信息。

    collector_logger.txt 中的数据与串行模式相同。

  • log/evaluator

    在 evaluator 文件夹中,有很多 evaluator_logger.txt 文件,包括 evaluator 与环境交互时有关 evaluator 的信息。 并行模式有很多evaluator,所以有很多 evaluator_logger.txt 文件记录信息。

    evaluator_logger.txt 中的数据与串行模式相同。

  • log/learner

    在learner文件夹中,有一个名为 learner_logger.txt 的文件和一个名为 learner_tb_logger 的子文件夹。

    learner_logger.txt 中的数据与串行模式相同。

    在 learner_tb_logger 文件夹中保存了一些 tensorboard 文件 events.out.tfevents,可以被 tensorboard 使用。

    在并行模式下,将所有tb文件放在同一个文件夹中太难了, 所以每个 tb 文件都放在一个文件夹中,其中包含相应的文本记录器文件。 它与串行模式不同。在串行模式下,我们将所有 tb 文件放在串行文件夹中。

  • log/commander

    在commander文件夹中,有三个文件: commander_collector_logger.txt, commander_evaluator_logger.txt, commander_logger.txt 和一个名为 learner_tb_logger 的子文件夹.

    commander_collector_logger.txt 里, 有一些coordinator需要的collector的信息。 如train_iter、step_count、avg_step_per_episode、avg_time_per_step、avg_time_per_episode、reward_mean、reward_std

    commander_evaluator_logger.txt 里, 有一些coordinator需要的evaluator的信息。 如train_iter、step_count、avg_step_per_episode、avg_time_per_step、avg_time_per_episode、reward_mean、reward_std

    commander_logger.txt 里, 有一些关于coordinator何时将会结束的信息

    collector和evaluator文件夹中有很多文件,看起来很不方便。 所以我们在commander里面做了一个整合。 这就是并行模式下存在collector 和evaluator 文件夹但commander 文件夹具有collector 文本文件和evaluator 文本文件的原因。

  • ckpt:

    并行模式下 checkpoint 文件夹与串行模式的相同。

    在这个文件夹中,有模型参数 checkpoints:
    • ckpt_best.pth.tar. 达到最高评价分数的最佳模型.

    • “iteration” + iter number. 每 iter_number 保存的模型。

    您可以使用 torch.load('ckpt_best.pth.tar') 来加载模型。

  • data

    在这个文件夹中,有很多数据文件。 在串行模式下,所有数据都存储在内存中; 在并行模式下,数据分为元数据和文件数据: 元数据仍然存储在内存中,但文件数据存储在文件系统中。

  • policy

    在此文件夹中,有一个策略文件。 该文件包含策略参数。用于将learner的最新参数发送给collector进行更新。 在并行模式下,coordinator使用策略文件的路径注册collector,collector使用策略文件中的数据作为自己的参数。