技巧与窍门
此页面包含有关有效使用 Schola 的各种技巧和窍门,以及常见陷阱及其解决方案。
目录
在编辑器中训练速度缓慢
编辑器中训练速度极慢(例如,低于 10 fps)的最常见原因是,默认情况下,当编辑器不是活动窗口时,它会大大降低资源使用率。这可以在设置中更改。Edit → Editor Preferences → General → Performance → Use Less CPU when in Background。取消选中此选项,允许编辑器在不处于活动窗口时使用更多资源。
提高 CPU/GPU 利用率
如果发现训练速度太慢,无法满足您的需求,您可以尝试将环境构建为独立的可执行文件,然后使用 --launch-unreal 标志从单独的 Python 进程运行训练。
如果您的环境不使用需要渲染的摄像头传感器或其他 Unreal Engine 功能,您也可以尝试在无头模式下运行训练。这可以通过为 launch.py 设置 --headless 标志,或者在实例化 StandaloneUnrealConnection 时将 headless 设置为 True 来完成。在无头模式下运行时,Unreal Engine 不会渲染环境,这可以显著提高训练速度。
训练以高 FPS 运行但代理训练不成功
当以非常高的 FPS 进行训练时,基于帧率缩放的动作(例如,Movement Input)可能会导致代理无法正常训练。这是因为代理的动作对游戏世界的影响很小,因为它们都被缩小了,导致训练期间出现大量非常相似的数据点。
要解决此问题,您可以降低训练的 FPS,或者使用 --set-fps FPS 选项来设置 Unreal Engine 进程的模拟时间步长。例如,如果您设置 --set-fps 30,模拟将以 30 FPS 运行,而与训练的实际 FPS 无关,因此每个动作对游戏世界的影响将与游戏以 30 fps 运行时完全相同。
训练完成但 launch.py 挂起
如果您发现 launch.py 中的训练进度条报告训练已完成但 launch.py 挂起,则很可能是训练后评估仍在运行。如果您运行的训练步数非常少,并且启用了评估(未设置 --disable-eval),则可能会发生这种情况。在这种情况下,由于确定性决策,代理可能会陷入循环或位置,导致它永远无法完成环境。
要解决此问题,您可以增加训练步数,或者在运行 launch.py 时通过设置 --disable-eval 来禁用评估,或者将您的 ComputeStatus 设置为在固定步数后返回 EAgentTrainingStatus::Truncated。
理解算法参数和选项
Schola 支持多种训练算法:Stable Baselines 3 的 PPO 和 SAC,以及 Ray 的 PPO、APPO 和 Impala。每种算法都有自己的一组参数和选项。这些内容记录在 Schola 的几个位置。
-
schola.scripts.sb3.settings.PPOSettings -
schola.scripts.sb3.settings.SACSettings
-
schola.scripts.ray.settings.PPOSettings -
schola.scripts.ray.settings.APPOSettings -
schola.scripts.ray.settings.IMPALASettings
-
FSB3SACSettings -
FSB3PPOSettings
-
FRLlibPPOSettings -
FRLlibAPPOSettings -
FRLlibIMPALASettings
默认设置的优先级顺序为:Unreal Settings(仅当从 Unreal 启动训练过程时)、CLI 默认值,然后是 Python 数据类的默认值。例如,CLI 中给出的任何默认值都将覆盖数据类默认值。