2026/9/20 21:51:27

ML-Agents 环境可执行文件构建与训练指南:从 Unity 场景打包到 Headless 服务器部署

ML-Agents 环境可执行文件构建与训练指南:从 Unity 场景打包到 Headless 服务器部署 人工智能强化学习深度学习机器学习游戏开发AI 应用【免费下载链接】ml-agentsThe Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinforcement learning and imitation learning.项目地址https://gitcode.com/gh_mirrors/ml/ml-agents点击查看免费下载本文基于 Unity ML-Agents Toolkit 官方文档 Learning-Environment-Executable.md系统讲解如何将 Unity 训练场景以 3DBall 平衡球环境为例构建为独立可执行文件并通过 Python API 与mlagents-learn命令行工具与之交互、训练最终把训练产物ONNX 模型嵌回场景中以及如何在无图形界面的 Headless 服务器上加速训练。读完本文你将掌握场景配置 → 打包可执行文件 → Python 连接 → 命令行训练 → 模型回嵌的完整实战链路并理解其底层通信与进程启动机制。为什么要使用可执行文件而不是 Unity 编辑器ML-Agents 既支持在 Unity 编辑器内点击 Play 直接训练也支持将场景构建为独立可执行文件Executable后再进行训练。相比编辑器模式使用可执行文件有以下优势便于分发你可以把可执行文件直接交给他人使用而无需共享整个 Unity 工程仓库便于远端部署可以把可执行文件放到远程机器上运行借助更强的 CPU/GPU 资源加速训练支持无图形模式只要环境不依赖渲染不使用视觉观测就可以使用Server BuildHeadless模式获得更快的训练速度解放编辑器训练在独立进程中运行时你可以继续用 Unity 编辑器做其他事情。第一步构建 3DBall 可执行环境本文以 3DBall3D Balance Ball示例环境为例展示完整的构建流程。仓库中该示例位于 Project/Assets/ML-Agents/Examples/3DBall包含场景、Prefab、Agent 脚本与预训练模型等完整资源。打开 3DBall 场景启动 Unity在 Projects 对话框顶部选择Open在文件对话框中定位到 ML-Agents 工程下的Project文件夹并点击Open在Project窗口中进入Assets/ML-Agents/Examples/3DBall/Scenes/目录双击3DBall文件加载包含平衡球环境的场景。仓库中该目录还包含3DBallHard与Visual3DBall两个变体场景前者是更难的物理版本后者使用视觉观测Camera而非向量观测。本文聚焦于基础向量观测版本的3DBall。配置场景以适配训练启动训练进程启动可执行文件时程序必须能静默、自动地进入正确场景因此需要满足三个条件应用在后台运行、没有需要人工交互的对话框、正确场景自动加载。打开 Player Settings菜单EditProject SettingsPlayer在Resolution and Presentation下确保Run in Background为勾选状态确保Display Resolution Dialog设置为 Disabled注较新版本的编辑器可能没有该选项打开 Build Settings 窗口菜单FileBuild Settings选择目标平台可选勾选 Development Build 以输出 调试日志如果Scenes in Build列表中已有场景确保只有 3DBall 场景被勾选若列表为空则只有当前场景会被打进构建点击Build在文件对话框中定位到 ML-Agents 目录指定文件名并点击SaveWindows 平台使用 Unity 2018.1 时构建会要求选择文件夹而非文件名。请在根目录下创建一个子文件夹并选择它后续步骤中将该子文件夹名称为env_name。注意不能把构建产物放到Assets文件夹内。完成以上步骤后你就得到了一个包含模拟环境的 Unity 可执行文件接下来可以与之交互了。第二步用 Python API 与可执行环境交互如果你希望用 Python APILow-Level API与可执行文件交互只需要把可执行文件的名称传给UnityEnvironment的file_name参数from mlagents_envs.environment import UnityEnvironment env UnityEnvironment(file_nameenv_name)其中env_name是不带扩展名的可执行文件名称或路径。底层原理可执行文件是如何被启动的从源码层面看UnityEnvironment.__init__会在file_name非空时调用env_utils.launch_executable启动子进程见 ml-agents-envs/mlagents_envs/environment.pyif file_name is not None: try: self._process env_utils.launch_executable( file_name, self._executable_args() ) except UnityEnvironmentException: self._close(0) raise其中_executable_args()会拼接 Unity 可执行文件的命令行参数environment.py若开启无图形模式追加-nographics -batchmode追加--mlagents-port port指定通信端口对应源码中的_PORT_COMMAND_LINE_ARG若指定log_folder且未显式传-logfile则追加-logFile path/Player-worker_id.log。而env_utils.launch_executable见 ml-agents-envs/mlagents_envs/env_utils.py内部会先调用validate_environment_path做路径归一化它会剥离.app、.exe、.x86_64、.x86等扩展名再按平台查找真正的可执行文件macOS 在.app/Contents/MacOS/下查找Windows 在.exe中查找Linux 查找.x86_64/.x86这也是为什么file_name可以不带扩展名。启动时还使用了start_new_sessionTrue使 SIGINT 等信号不会直接传到环境子进程给环境留出正常关闭的机会。连接建立后UnityEnvironment还会通过_check_communication_compatibility校验 Unity 侧与 Python 侧的通信协议版本API_VERSION 1.5.0见 environment.py主版本不一致时会抛出版本不兼容异常。常用构造参数UnityEnvironment的完整构造参数environment.py包括参数默认值说明file_nameNoneUnity 可执行文件名称为None时连接编辑器端口 5004worker_id0端口偏移量端口 base_port worker_id用于并行启动多个环境base_port5005有可执行文件/ 5004编辑器通信基准端口seed0随机种子随初始化消息发送给 Unityno_graphicsFalse以无图形模式运行模拟器timeout_wait60等待环境连接的秒数additional_args[]附加的 Unity 命令行参数side_channelsNone用于非 RL 通信的 Side Channel 列表log_folderNoneUnity Player 日志输出目录需绝对路径num_areas1每个 Unity 实例中的并行训练区域数量第三步用 mlagents-learn 命令行训练打开命令行或终端窗口进入 ML-Agents Toolkit 的安装目录。如果按默认方式 安装则进入ml-agents/文件夹运行mlagents-learn trainer-config-file --envenv_name --run-idrun-identifier其中trainer-config-file训练器配置文件YAML的路径env_name从 Unity 导出的可执行文件的名称和路径不带扩展名run-identifier用于区分不同训练运行结果的字符串标识。例如将 3DBall 可执行文件保存到 ML-Agents Toolkit 安装目录后运行mlagents-learn config/ppo/3DBall.yaml --env3DBall --run-idfirstRun启动后终端会先打印 ML-Agents 的 ASCII Logo 横幅。注意如果使用 Anaconda请先激活 ml-agents 环境如conda activate ml-agents。训练器配置文件解析命令中的trainer-config-file指向训练器配置 YAML。仓库中的 config/ppo/3DBall.yaml 是 3DBall 的 PPO 训练配置behaviors: 3DBall: trainer_type: ppo hyperparameters: batch_size: 64 buffer_size: 12000 learning_rate: 0.0003 beta: 0.001 epsilon: 0.2 lambd: 0.99 num_epoch: 3 learning_rate_schedule: linear network_settings: normalize: true hidden_units: 128 num_layers: 2 vis_encode_type: simple reward_signals: extrinsic: gamma: 0.99 strength: 1.0 keep_checkpoints: 5 max_steps: 500000 time_horizon: 1000 summary_freq: 12000关键参数含义trainer_type: ppo使用 PPO近端策略优化算法batch_size/buffer_size每次更新的样本批大小与经验缓冲区容量learning_rate/learning_rate_schedule学习率及其衰减策略linear线性衰减beta/epsilon/lambd/num_epochPPO 的熵正则系数、裁剪范围、GAE 系数与每批更新轮数network_settings网络结构隐藏单元数hidden_units、层数num_layers、观测归一化normalizereward_signals.extrinsic.gamma折扣因子strength为外在奖励信号强度max_steps训练总步数上限当前配置为 500000time_horizon累积经验的时间视界summary_freq输出训练统计的频率keep_checkpoints保留的检查点数量。更完整的配置项说明可参阅 Training-Configuration-File.md。理解训练启动日志如果mlagents-learn正常运行并开始训练你会看到类似如下的输出CrashReporter: initialized Mono path[0] /Users/dericp/workspace/ml-agents/3DBall.app/Contents/Resources/Data/Managed Mono config path /Users/dericp/workspace/ml-agents/3DBall.app/Contents/MonoBleedingEdge/etc INFO:mlagents_envs: Ball3DAcademy started successfully! Unity Academy name: Ball3DAcademy INFO:mlagents_envs:Connected new brain: Unity brain name: Ball3DLearning Number of Visual Observations (per agent): 0 Vector Observation space size (per agent): 8 Number of stacked Vector Observation: 1 INFO:mlagents_envs:Hyperparameters for the PPO Trainer of brain Ball3DLearning: batch_size: 64 beta: 0.001 buffer_size: 12000 epsilon: 0.2 gamma: 0.995 hidden_units: 128 lambd: 0.99 learning_rate: 0.0003 max_steps: 5.0e4 normalize: True num_epoch: 3 num_layers: 2 time_horizon: 1000 sequence_length: 64 summary_freq: 1000 use_recurrent: False memory_size: 256 use_curiosity: False curiosity_strength: 0.01 curiosity_enc_size: 128 output_path: ./results/first-run-0/Ball3DLearning 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. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 3000. Mean Reward: 1.804. Std of Reward: 1.056. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 4000. Mean Reward: 2.151. Std of Reward: 1.432. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 5000. Mean Reward: 3.175. Std of Reward: 2.250. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 6000. Mean Reward: 4.898. Std of Reward: 4.019. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 7000. Mean Reward: 6.716. Std of Reward: 5.125. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 8000. Mean Reward: 12.124. Std of Reward: 11.929. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 9000. Mean Reward: 18.151. Std of Reward: 16.871. Training. INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 10000. Mean Reward: 27.284. Std of Reward: 28.667. Training.这段日志的解读要点环境启动确认Ball3DAcademy started successfully!表示 Unity 侧 Academy 已正常启动日志同时打印 Mono 运行时路径行为Behavior连接确认Connected new brain: Ball3DLearning说明 Python 侧已与 Unity 中的行为建立连接并打印了观测规格。此处Vector Observation space size (per agent): 8与 3DBall Agent 的观测实现一致——在 Ball3DAgent.cs 的CollectObservations中Agent 依次加入平台旋转角2 个、小球相对位置3 个与小球线速度3 个共 8 个向量观测超参数回显训练器会打印当前生效的超参数与实际output_path模型输出目录训练进度Step: N. Mean Reward: X. Std of Reward: Y按summary_freq周期输出平均奖励与标准差可据此判断策略是否在收敛。命令行常用参数基于源码mlagents-learn的命令行参数定义在 ml-agents/mlagents/trainers/cli_utils.py 中除文档示例用到的--env、--run-id外常用参数还包括参数默认值说明--envNone待训练的 Unity 可执行文件路径--run-idppo训练运行标识用于命名模型与统计子目录--resumeFalse从检查点恢复训练需配合--run-id--initialize-from RUN_IDNone从指定历史 run-id 初始化模型可用于微调--forceFalse强制覆盖已存在的同名 run-id 数据--seed-1训练随机数种子--num-envs1并发启动的 Unity 环境实例数--num-areas1每个实例内的并行训练区域数--base-port5005环境通信起始端口第 i 个实例使用base_port worker_id--timeout-wait60等待 Unity 环境启动的秒数--results-dirresults结果输出根目录--no-graphicsFalse以无图形模式运行可执行文件见下文--no-graphics-monitorFalse主 worker 用图形模式、其余 worker 用无图形模式--torch-deviceNonePyTorch 训练设备如cpu、cuda、cuda:0注意--train与--load已废弃——训练模式现在是默认行为恢复训练请使用--resume见 learn.py 中的废弃提示。停止训练与获取模型你可以按CtrlC停止训练训练好的模型会保存在results/run-identifier/behavior_name.onnx对应模型的最新检查点。Windows 平台已知问题在 Windows 上提前终止训练可能导致模型保存失败建议等到 Step 达到配置 YAML 中设置的max_steps后再停止。把训练好的模型嵌入 Agent获得.onnx模型后按以下步骤将其嵌入到场景的 Agent 中把模型文件移动到Project/Assets/ML-Agents/Examples/3DBall/TFModels/目录仓库中该目录已包含官方预训练模型3DBall.onnx等按前述方式在 Unity 编辑器中打开3DBall场景在 Project 窗口选中3DBallPrefab并选中Agent把behavior_name.onnx文件从 Project 窗口拖到Ball3DAgentInspector 窗口的Model占位槽中点击编辑器顶部的Play按钮运行即可看到 Agent 使用训练后的策略自主控制平台保持小球平衡。第四步在无图形 Headless 服务器上训练要在没有图形渲染支持的 Headless 服务器上训练需要关闭 Unity 可执行文件的图形显示有两种方式命令行方式在mlagents-learn训练命令中传入--no-graphics选项。这在功能上等价于给 Unity 可执行文件追加-nographics -batchmode参数构建方式在 Unity 编辑器的 Build Settings 中使用Server Build构建可执行文件。如果你需要带图形训练例如使用 Camera 视觉观测则需要在服务器上配置显示渲染支持例如 xvfb。本仓库的 Colab Notebook 教程 中Setup 部分给出了在服务器上配置 xvfb 的示例。源码佐证--no-graphics与--no-graphics-monitor在 cli_utils.py 中定义官方 help 明确说明仅在 Agent 不使用视觉观测时才能安全启用。这两个开关最终会传给UnityEnvironment(no_graphics...)并反映在_executable_args()生成的命令行中追加-nographics -batchmode。同时no_graphics_monitor模式下主 worker 仍保留图形其余 worker 使用无图形模式见 environment.py这在多环境并行训练且需保留一个可视化窗口时很有用。常见问题与排查建议Provided filename does not match any environmentslaunch_executable找不到可执行文件时会抛出该异常env_utils.py。请确认file_name/--env指向的路径存在且不带.app/.exe等扩展名Linux 下还需确保文件具备执行权限源码注释建议chmod -R 755。通信版本不兼容Python 与 Unity 包版本不匹配时_check_communication_compatibility会拒绝连接并抛出 API 版本不兼容异常environment.py。请使用相互兼容的 Unity 包与 Python 包版本。训练无输出或连接超时检查Run in Background是否勾选、Display Resolution Dialog是否禁用以及目标场景是否在 Scenes in Build 列表中唯一勾选必要时使用--timeout-wait增大等待时间。需要视觉观测的无头训练不可使用--no-graphics需在服务器上配置 xvfb 等虚拟显示方案。延伸阅读Python-LLAPI.md低层级 Python API 完整文档UnityEnvironment的详细用法Installation.mdML-Agents Toolkit 安装指南Training-Configuration-File.md训练器配置文件全量参数说明Tutorial-Colab.mdColab Notebook 教程含 xvfb 配置示例config/ppo/3DBall.yaml3DBall 训练配置文件Ball3DAgent.cs3DBall Agent 源码观测、奖励与动作实现environment.py 与 env_utils.py可执行环境启动与通信的 Python 端实现赞分享人工智能强化学习深度学习机器学习游戏开发AI 应用【免费下载链接】ml-agentsThe Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinforcement learning and imitation learning.项目地址https://gitcode.com/gh_mirrors/ml/ml-agents点击查看免费下载相关推荐解决ML-Agents环境执行文件无法训练的终极指南从构建到调试解决ML Agents环境执行文件无法训练的终极指南从构建到调试 ML Agents是Unity官方推出的基于Python语言的机器学习库能够帮助开发者在U人工智能强化学习深度学习机器学习游戏开发AI 应用Unity ML-Agents完整指南如何使用可执行环境进行强化学习训练Unity ML Agents完整指南如何使用可执行环境进行强化学习训练 Unity ML Agents是一个基于Python的机器学习库专门用于在Unit人工智能强化学习深度学习机器学习游戏开发AI 应用Unity ML-Agents 示例学习环境完全参考从 Basic 到 DungeonEscape 的场景配置与训练指南Unity ML Agents 示例学习环境完全参考从 Basic 到 DungeonEscape 的场景配置与训练指南 本文是 Unity ML Agent人工智能强化学习深度学习机器学习游戏开发AI 应用上一篇Windows11安装VideoLingo避坑指南numpy版本冲突的3个解决方案下一篇抖音主页批量备份到本地一份新手可直接照做的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考