常见问题解答¶
常见问题¶
Q1: 导入包警告¶
A1:
关于在运行DI-engine时命令行上显示的导入linlink、ceph、memcache、redis相关的警告,通常用户可以忽略它,DI-engine在导入时会自动搜索相应的替代库或代码实现。
Q2: 安装后无法使用DI-engine命令行工具(CLI)¶
A2:
使用带有
-e标志的pip有时可能会导致CLI不可用。通常,非开发人员不需要使用-e标志进行安装,移除该标志并重新安装即可。部分操作环境会将CLI安装在用户目录中,您需要验证CLI安装目录是否在用户的环境变量中(例如Linux中的
$PATH)。
Q3: 安装过程中出现“无权限”错误¶
A3:
- Due to the lack of corresponding permissions in some operating environments, “Permission denied” may appear during pip installation. The specific reasons and solutions are as follows:
使用带有
--user标志的 pip 并在用户目录中安装将根目录中的
.git文件夹移出,执行pip安装命令,然后再移回。具体原因请参见https://github.com/pypa/pip/issues/4525
Q4: 如何设置SyncSubprocessEnvManager的相关操作参数¶
A4:
在配置文件的env字段中添加manager字段,您可以指定是否使用shared_memory以及多进程启动的上下文。以下代码提供了一个简单的示例。有关详细参数信息,请参考SyncSubprocessEnvManager。
config = dict(
env=dict(
manager=dict(shared_memory=False)
)
)
Q5: 如何调整学习率¶
- A5:
在入口文件中添加 lr_scheduler 模块。
你可以通过调用 torch.optim.lr_scheduler 来调整学习率(参考 https://pytorch.org/docs/stable/optim.html),并在优化器更新后应用 scheduler.step() 来更新学习率。
以下代码提供了一个简单的示例。更多详情,请参见演示:https://github.com/opendilab/DI-engine/commit/9cad6575e5c00036aba6419f95cdce0e7342630f。
from torch.optim.lr_scheduler import LambdaLR
...
# Set up RL Policy
policy = DDPGPolicy(cfg.policy, model=model)
# Set up lr_scheduler, the optimizer attribute will be different in different policy.
# For example, in DDPGPolicy the attribute is 'optimizer_actor', but in DQNPolicy the attribute is 'optimizer'.
lr_scheduler = LambdaLR(
policy.learn_mode.get_attribute('optimizer_actor'), lr_lambda=lambda iters: min(1.0, 0.5 + 0.5 * iters / 1000)
)
...
# Train
for i in range(cfg.policy.learn.update_per_collect):
...
learner.train(train_data, collector.envstep)
lr_scheduler.step()
学习率的曲线如下图所示
Q6: 如何理解打印的[EVALUATOR]信息¶
A6:
我们在interaction_serial_evaluator.py中打印出evaluator的评估信息,
包括env、final reward、current episode,它们分别表示当前完成的episode(其中timestep.done=True)对应的eval_env索引(env_id)、
完成的episode的最终奖励,以及evaluator评估了多少个episode。下图展示了一个典型的演示日志:
在某些情况下,evaluator中的不同评估环境(简称为eval_env)可能会收集到不同长度的片段。例如,假设我们通过evaluator收集了16个片段,但只有5个eval_env,
即在配置中设置n_evaluator_episode=16, evaluator_env_num=5,
如果我们不限制每个eval_env中的评估片段数量,很可能会得到许多长度较短的片段。
因此,在此评估阶段获得的平均奖励将会有偏差,无法完全反映当前策略的性能(仅反映了在较短长度片段上的性能)。
为了解决这个问题,我们建议使用VectorEvalMonitor类。
在这个类中,我们平均指定每个eval_env需要评估的剧集数量在这里,
例如,如果n_evaluator_episode=16和evaluator_env_num=8,那么每个eval_env只有2个剧集将被添加到统计中。
关于VectorEvalMonitor每个方法的具体含义,请参考类VectorEvalMonitor中的注释。
值得注意的是,当evaluator的某个eval_env完成了each_env_episode[i]次数的episode时,由于eval_env的重置是由
env_manager自动控制的,该eval_env将继续运行,直到退出整个评估阶段。
我们使用VectorEvalMonitor来控制评估阶段的终止/退出,只有当
eval_monitor.is_finished()为True时,
即评估器完成了所有评估episode(配置中的n_evaluator_episode),evaluator才会退出评估阶段。
因此,可能会出现即使某个eval_env完成了each_env_episode[i]次数的episode评估,其对应的日志信息仍然重复的情况,这
不会对评估结果产生不利影响,因此用户无需担心这些重复的日志。
Q7: DI-engine 的配置文件有文档吗?如何在配置文件中设置字段以控制训练终止?¶
A7:
有关DI-engine中的配置文件系统的详细介绍,请参阅配置文件系统文档。在DI-engine中,通常有三种类型的终止设置:
当达到预设的
stop value(在配置文件中修改)时,即当evaluation episode reward mean大于或等于stop value时。当达到环境交互步骤的最大数量(
env step)时,可以在训练入口处进行修改。当达到最大训练迭代次数(
train iter)时,可以在训练入口处进行修改。
此外,对于配置文件中特定字段的描述,您可以参考每个类的默认配置部分中的注释。例如:
强化学习相关的配置文件可能会很复杂。如果有任何细节您不理解,请随时提问!
Q9: 在DI-engine中,“episode”指的是什么?¶
A9:
这并不是强化学习中的原始概念,而是源自游戏。它类似于“关卡”的概念,指的是代理开始玩游戏直到游戏结束或成功完成游戏的过程。本质上,它代表了与环境交互的一个完整周期,例如一个游戏会话或一局围棋。
Q10: DI-engine 是否支持自我对弈机制?¶
A10:
是的,这是支持的。最简单的示例可以在dizoo目录中的league demo和slime volleyball中找到。