如何理解训练过程中生成的文件夹?¶
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使用策略文件中的数据作为自己的参数。