Unity ML-Agents项目:使用可执行环境进行强化学习训练
引言
在Unity ML-Agents项目中,开发者通常需要在Unity编辑器中直接运行环境进行训练。然而,将环境构建为可执行文件(Executable)进行训练具有诸多优势。本文将详细介绍如何构建和使用Unity环境可执行文件进行强化学习训练。
为什么使用可执行环境?
使用可执行环境相比直接在编辑器中运行有以下优势:
- 便捷共享:可以单独分享可执行文件而不需要共享整个项目
- 远程训练:可将可执行文件部署到远程服务器进行训练
- 无头模式:使用Server Build(Headless)模式可显著提升训练速度(当环境不需要渲染时)
- 并行工作:训练时可继续使用Unity编辑器进行其他工作
构建3DBall环境可执行文件
准备工作
首先需要打开包含3D平衡球环境的Unity场景:
- 启动Unity编辑器
- 在项目对话框中选择"打开"选项
- 定位到ML-Agents项目中的"Project"文件夹并打开
- 在项目窗口中导航至
Assets/ML-Agents/Examples/3DBall/Scenes/
- 双击
3DBall
文件加载平衡球环境场景
配置构建设置
为确保环境可执行文件能正确运行,需要进行以下配置:
- 打开Player设置(菜单:编辑 > 项目设置 > Player)
- 在"分辨率和呈现"部分:
- 确保勾选"在后台运行"
- 将"显示分辨率对话框"设置为禁用
- 打开构建设置窗口(菜单:文件 > 构建设置)
- 选择目标平台
- (可选)选择"开发构建"以记录调试信息
- 确保"Scenes in Build"列表中只勾选了3DBall场景
- 点击"构建"按钮:
- 在文件对话框中,导航到ML-Agents目录
- 指定文件名并保存
- (Windows系统)Unity 2018.1会要求选择文件夹而非文件名
与可执行环境交互
构建完成后,可以通过Python API与可执行环境交互。以下是基本交互代码示例:
from mlagents_envs.environment import UnityEnvironment
env = UnityEnvironment(file_name=<env_name>)
训练环境
训练步骤
- 打开命令提示符或终端窗口
- 导航到ML-Agents工具包安装目录
- 运行以下命令:
参数说明:mlagents-learn <trainer-config-file> --env=<env_name> --run-id=<run-identifier>
<trainer-config-file>
:训练器配置yaml文件路径<env_name>
:从Unity导出的可执行文件名(不含扩展名)<run-identifier>
:用于区分不同训练结果的字符串
例如,训练3DBall可执行文件:
mlagents-learn config/ppo/3DBall.yaml --env=3DBall --run-id=firstRun
训练输出解析
成功启动训练后,控制台会显示类似以下输出:
INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 1000. Mean Reward: 1.242. Std of Reward: 0.746. Training.
INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 2000. Mean Reward: 1.319. Std of Reward: 0.693. Training.
...
输出中包含了训练的关键指标:
- Step:训练步数
- Mean Reward:平均奖励值
- Std of Reward:奖励标准差
训练终止与模型使用
- 按Ctrl+C可停止训练
- 训练好的模型会保存在
results/<run-identifier>/<behavior_name>.onnx
- 注意:Windows系统上提前终止训练可能导致模型保存失败
在Unity中使用训练好的模型
- 将模型文件移动到
Project/Assets/ML-Agents/Examples/3DBall/TFModels/
- 在Unity编辑器中打开3DBall场景
- 在项目窗口中选择3DBall预制体
- 将
.onnx
模型文件拖拽到Ball3DAgent检查器窗口的Model占位符中 - 点击编辑器顶部的播放按钮测试模型
无头服务器训练
在无图形渲染支持的服务器上进行训练时,需要关闭Unity可执行文件的图形显示。有两种实现方式:
- 向mlagents-learn训练命令传递
--no-graphics
选项 - 使用Unity编辑器中的"Server Build"选项构建可执行文件
如果需要使用视觉观察(如摄像头输入)进行训练,则需要在服务器上设置显示渲染支持(如xvfb)。
总结
使用可执行环境进行ML-Agents训练提供了更大的灵活性和效率。通过本文介绍的方法,开发者可以轻松构建环境可执行文件,进行本地或远程训练,并将训练好的模型集成回Unity项目中。这种方法特别适合需要长时间训练或需要在多台机器上部署训练的场景。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考