Shortcuts

常见问题解答

常见问题


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()

学习率的曲线如下图所示

../_images/Q5_lr_scheduler.png

Q6: 如何理解打印的[EVALUATOR]信息

A6:

我们在interaction_serial_evaluator.py中打印出evaluator的评估信息, 包括envfinal rewardcurrent episode,它们分别表示当前完成的episode(其中timestep.done=True)对应的eval_env索引(env_id)、 完成的episode的最终奖励,以及evaluator评估了多少个episode。下图展示了一个典型的演示日志:

../_images/Q6_evaluator_info.png

在某些情况下,evaluator中的不同评估环境(简称为eval_env)可能会收集到不同长度的片段。例如,假设我们通过evaluator收集了16个片段,但只有5个eval_env, 即在配置中设置n_evaluator_episode=16, evaluator_env_num=5, 如果我们不限制每个eval_env中的评估片段数量,很可能会得到许多长度较短的片段。 因此,在此评估阶段获得的平均奖励将会有偏差,无法完全反映当前策略的性能(仅反映了在较短长度片段上的性能)。

为了解决这个问题,我们建议使用VectorEvalMonitor类。 在这个类中,我们平均指定每个eval_env需要评估的剧集数量在这里, 例如,如果n_evaluator_episode=16evaluator_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中,通常有三种类型的终止设置:

此外,对于配置文件中特定字段的描述,您可以参考每个类的默认配置部分中的注释。例如:

强化学习相关的配置文件可能会很复杂。如果有任何细节您不理解,请随时提问!

Q9: 在DI-engine中,“episode”指的是什么?

A9:

这并不是强化学习中的原始概念,而是源自游戏。它类似于“关卡”的概念,指的是代理开始玩游戏直到游戏结束或成功完成游戏的过程。本质上,它代表了与环境交互的一个完整周期,例如一个游戏会话或一局围棋。

Q10: DI-engine 是否支持自我对弈机制?

A10:

是的,这是支持的。最简单的示例可以在dizoo目录中的league demoslime volleyball中找到。