资讯动态

在 Microsoft Azure 上部署并训练 Unity ML-Agents 模型:虚拟机、容器实例与 GPU 环境完整指南

发布时间:2026/9/21 1:02:54 来源:尧图企业网站定制
在 Microsoft Azure 上部署并训练 Unity ML-Agents 模型虚拟机、容器实例与 GPU 环境完整指南【免费下载链接】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 开源仓库中 Training-on-Microsoft-Azure.md 编写系统讲解如何在 Microsoft Azure 云端完成 Unity ML-Agents 环境的训练任务覆盖预配置数据科学虚拟机DSVM自定义 GPU 虚拟机手动搭建与Azure 容器实例ACI按需训练三条路径并给出环境连通性测试、mlagents-learn训练命令、TensorBoard 远程监控的完整实操步骤。读完本文你将能够在 Azure 上从零搭建一套可用于深度强化学习训练的云端环境并把本地 Unity 构建的可执行环境上传后完成端到端的云端训练与结果监控。方案总览在 Azure 上训练 ML-Agents 的三条路径在 Azure 上训练 ML-Agents 环境主要有三种方式各有适用场景方案适用场景特点预配置 Azure 虚拟机DSVM想最快开始训练不愿手动装驱动开箱即用几乎无需配置选择 N 系列 GPU 机型即可默认跑 GPU自定义实例自建虚拟机需要对环境有完全控制或想理解底层依赖从 NVIDIA 驱动、CUDA、cuDNN 开始逐步搭建可控性最强但步骤繁琐Azure Container InstancesACI按需训练、用完即关避免闲置计费容器拉起即训、训完即销毁不占用常驻虚拟机资源⚠️重要说明来自原文档原文档作者已在团队内部停止使用本指南因此其中的步骤可能不会在所有环境中正确工作保留下来仅供参考。同时原指南撰写于 ML-Agents Toolkit v0.3 时代pip install mlagents1.1.0、PyTorch 1.7.0而当前仓库已全面转向 PyTorch 训练后端ml-agents/mlagents/trainers目录下已全部为 PyTorch 实现训练入口为 learn.py。因此本文在保留原文档完整步骤的同时会对照当前仓库的实际实现给出适用的命令与参数说明。另外原文档明确提示非 headless无图形界面模式的训练尚未验证其兼容性因此下面的所有步骤均以 headless 无图形模式为准。方案一使用预配置的 Azure 数据科学虚拟机DSVM最快的方式是从 Azure Marketplace 直接部署一个预配置镜像——适用于 Linux (Ubuntu) 的数据科学虚拟机Data Science Virtual Machine, DSVM。该镜像预装了大量数据科学与深度学习所需的软件部署完成后即可直接开始训练配置。部署时需要注意机型选择对训练设备的决定性影响如果将镜像部署到N 系列 GPU 优化虚拟机训练默认会在 GPU 上运行如果选择其他任何类型的虚拟机训练将在 CPU 上运行。N 系列机型如 NC、ND、NV 系列是 Azure 上搭载 NVIDIA GPU 的虚拟机规格原文档使用术语 N-Series GPU optimized VM 即指这类机型。安装 ML-Agents 工具包无论选择哪种虚拟机方案都需要在实例上安装 ML-Agents 的 Python 训练端。原文档给出的安装步骤如下使用scp等工具将本仓库中的ml-agents子文件夹移动复制到远程 Azure 实例并将其设置为工作目录。安装所需依赖包Torchpip3 install torch1.7.0 -f https://download.pytorch.org/whl/torch_stable.htmlMLAgentspython -m pip install mlagents1.1.0需要说明的是上述版本号对应 ML-Agents Toolkit v0.3 时代的历史版本。当前仓库的 ML-Agents 已完全基于 PyTorch训练框架位于 ml-agents/mlagents/trainers环境通信库位于 ml-agents-envs/mlagents_envs。使用当前版本时应直接安装与仓库配套的最新mlagents与mlagents-envs包python -m pip install mlagents mlagents-envs而不是固定到 1.1.0。训练端的版本信息可在训练启动时查看learn.py 中的get_version_string()会同时打印ml-agents、ml-agents-envs、通信 API 版本以及 PyTorch 版本。测试环境连通性构建 Linux headless 可执行文件并验证连接完成安装后建议先验证云端环境与 Unity 环境之间的通信是否正常步骤如下在 Unity Editor 中加载一个包含 ML-Agents 环境的项目如果没有自建环境可以直接使用仓库 Project/Assets/ML-Agents/Examples 下的示例环境。打开 Build Settings 窗口菜单File Build Settings。选择Linux作为目标平台x86_64作为目标架构。勾选Headless Mode无头模式。点击 Build 构建 Unity 环境可执行文件。将构建产物上传到你的 Azure 实例。使用 Python 测试实例环境是否就绪from mlagents_envs.environment import UnityEnvironment env UnityEnvironment(file_nameyour_env, seed1, side_channels[])其中your_env对应你的环境可执行文件的路径例如/home/UserName/Build/yourFile。如果一切正常你会收到一条确认环境加载成功的消息。这段测试代码直接对应 mlagents_envs/environment.py 中UnityEnvironment.__init__的构造签名file_name指定 Unity 环境二进制文件seed设置随机种子side_channels用于传入非 RL 通信的附加侧信道。从 environment.py 的_executable_args()可以看到Python 端启动可执行文件时会自动附加-nographics、-batchmode以及--mlagents-port 端口参数——这正是 headless 模式下环境能够无显示运行并与训练端建立 socket 通信的实现基础。headless 模式的关键注意点在 headless 模式下运行环境时必须在mlagents-learn命令中追加--no-graphics参数否则训练无法进行。你可以通过简单的方式验证中止一次训练查看输出是 Model Saved 还是 Aborted或者检查结果文件夹中是否生成了.onnx模型文件。该参数在 cli_utils.py 中有明确定义--no-graphics表示以无图形模式运行 Unity 可执行文件即不初始化图形驱动仅在智能体不使用视觉观测时适用。与之对应的还有--no-graphics-monitor主 worker 保持图形模式、其余 worker 无图形。在虚拟机上运行训练将环境可执行文件上传到虚拟机并完成安装后即可开始训练使用scp将构建好的 Unity 应用移动到你的虚拟机上。将安装了 ML-Agents 工具包的目录设置为工作目录。运行以下命令mlagents-learn trainer_config --envyour_app --run-idrun_id --train参数说明trainer_config训练器配置文件路径YAML 格式定义行为behaviors、超参数与奖励信号等your_appUnity 可执行文件路径例如~/unity-volume/3DBallHeadlessrun_id本次训练运行的标识符用于命名模型与统计数据的保存目录。如果你选择的是带 GPU 支持的 N 系列虚拟机可以在命令行运行nvidia-smi验证 GPU 是否确实被训练进程使用。当前版本命令参数深入说明原文档中的命令沿用至今但当前仓库的命令行参数已大幅扩展完整定义位于 cli_utils.py 的_create_parser()中常用参数包括参数默认值说明trainer_config_path位置参数None训练器 YAML 配置文件路径--envNone要训练的 Unity 可执行文件路径--run-idppo训练运行标识用于命名模型、统计子目录及模型文件本身用 TensorBoard 观察时务必为每次运行设置唯一 id否则同一 id 的统计数据会被合并--trainFalse是否进入训练模式--forceFalse是否强制覆盖该 run-id 已存在的 summary 与模型数据不指定时若 run-id 已被使用过会报错--resumeFalse是否从检查点恢复训练需配合--run-id--initialize-fromNone从指定 run-id 的已存模型初始化网络可用于在新环境上微调已有模型--seed-1训练代码随机数生成器种子--num-envs1训练时并行启动的 Unity 环境实例数--num-areas1每个 Unity 环境实例内的并行训练区Training Area数量--base-port5005环境通信起始端口每个并发实例依次使用base_port worker_id--results-dirresults结果基础目录--no-graphicsFalseheadless 无图形模式不初始化图形驱动仅适用于无视觉观测的智能体--torch-deviceNone训练所用torch.device如cpu、cuda或cuda:0用于显式指定 GPU--timeout-wait60等待 Unity 环境启动的超时时间秒--max-lifetime-restarts10Unity 可执行文件整个生命周期内允许崩溃重启的最大次数-1表示不限训练配置文件的完整写法可参考仓库 config/ppo/3DBall.yamlbehaviors: 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从 learn.py 的run_training()可以看清训练启动的底层链路命令行参数经parse_command_line解析为RunOptions随后依次执行目录校验validate_existing_directories、注册 TensorBoard 统计写入器register_stats_writer_plugins、通过create_environment_factory创建环境工厂再交由SubprocessEnvManager管理多个环境实例、TrainerFactory按配置创建对应算法训练器最后由TrainerController.start_learning()启动训练循环见 trainer_controller.py。训练结束时会生成configuration.yaml、training_status.json、timers.json等运行记录文件learn.py。用 TensorBoard 远程监控训练进度训练开始后可以使用 TensorBoard 观察训练过程详细说明参见仓库文档 Using-Tensorboard.md。由于是远程虚拟机还需要额外配置网络访问首先为你的虚拟机开放 Web 流量的相应端口。注意不需要新建 Network Security Group网络安全组而是进入虚拟机 Settings 下的Networking选项卡进行配置。以开放端口 6006 为例入站规则Inbound Rule可设置为Source源AnySource Port Ranges源端口范围*Destination目标AnyDestination Port Ranges目标端口范围6006Protocol协议AnyAction操作AllowPriority优先级保持默认除非训练是以后台进程方式启动的否则请从另一个终端会话连接到你的虚拟机。在终端中运行tensorboard --logdir results --host 0.0.0.0然后在浏览器中访问你的虚拟机IP地址:6006即可查看 TensorBoard 报告。说明原文档第 4 步写作端口 6060但第 1 步开放及 TensorBoard 默认端口均为 6006本文按 6006 统一处理。--logdir results指向mlagents-learn默认的结果输出目录TensorBoard 会按run-id值组织各次训练的统计子目录若未指定--run-id默认字符串为ppo见 cli_utils.py。TensorBoard 的默认端口是 6006若该端口已被占用可通过--port选项换用其他空闲端口。TensorBoard 中可以观察的训练统计量包括环境统计Environment/Cumulative Reward累积奖励、Environment/Episode Length回合长度、Environment/Lesson课程进度、策略统计Policy/Entropy熵、Policy/Learning Rate学习率、Policy/Value Estimate价值估计等、损失函数Losses/Policy Loss、Losses/Value Loss等以及自我对弈场景下的Self-Play/ELO评分。在 headless 云端训练中Environment/Cumulative Reward与Policy/Entropy是判断训练是否收敛的最直观指标。方案二使用 Azure Container InstancesACI按需训练Azure Container Instances (ACI) 允许你按需拉起一个容器来执行训练训练完成后容器即被关闭。这种方式的核心价值在于避免训练结束后仍让可计费的虚拟机空转将模型训练完全卸载到云端无需在自己的电脑上安装 Python 和 TensorFlow/PyTorch。使用 ACI 时你需要将训练环境含 ML-Agents 工具包、Unity 可执行文件打包进容器镜像通过 ACI 启动容器执行mlagents-learn训练命令训练产出模型文件、TensorBoard 日志持久化到挂载的存储卷后随容器销毁一并归档。仓库根目录提供了 Dockerfile可作为构建训练容器镜像的参考起点。方案三自定义实例——从零手动搭建 GPU 训练虚拟机如果希望完全掌控环境可以按以下步骤手动搭建一台自定义虚拟机。此部分为原文档的完整步骤注意其中驱动与 CUDA 版本均针对 Ubuntu 16.04 LTS 测试环境属于历史版本仅作原理性参考。首先在 Azure 门户部署一台 Ubuntu Linux 虚拟机原文档测试环境为 Ubuntu 16.04 LTS。若要使用 GPU 支持请选择 N 系列虚拟机。SSH 登录虚拟机。安装 NVIDIA 驱动wget http://us.download.nvidia.com/tesla/375.66/nvidia-diag-driver-local-repo-ubuntu1604_375.66-1_amd64.deb sudo dpkg -i nvidia-diag-driver-local-repo-ubuntu1604_375.66-1_amd64.deb sudo apt-get update sudo apt-get install cuda-drivers sudo reboot一分钟后重新连接虚拟机安装 CUDA 工具包wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb sudo apt-get update sudo apt-get install cuda-8-0接下来需要从 NVIDIA 开发者网站下载 cuDNN这要求注册 NVIDIA 开发者账号。访问 developer.nvidia.com 创建并验证账号。从 NVIDIA 官网下载与你安装的 CUDA 版本匹配的 cuDNN deb 包原文档示例为libcudnn6_6.0.20-1cuda8.0_amd64.deb下载到本地电脑。将 deb 包复制到虚拟机scp libcudnn6_6.0.21-1cuda8.0_amd64.deb VMUserNameVMIPAddress:libcudnn6_6.0.21-1cuda8.0_amd64.debSSH 回到虚拟机并执行sudo dpkg -i libcudnn6_6.0.21-1cuda8.0_amd64.deb export LD_LIBRARY_PATH/usr/local/cuda/lib64/:/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH . ~/.profile sudo reboot一分钟后重新 SSH 进入虚拟机安装 Python 包管理器sudo apt install python-pip sudo apt install python3-pip接下来安装深度学习框架。原文档要求根据是否使用 GPU 选择安装版本GPU 训练pip3 install tensorflow-gpu1.4.0 keras2.0.6CPU 训练pip3 install tensorflow1.4.0 keras2.0.6⚠️ 版本提示上述 TensorFlow 1.4.0 / Keras 2.0.6 是 ML-Agents v0.3 时代TensorFlow 后端的安装方式。当前仓库的训练后端已完全迁移至 PyTorch参见 ml-agents/mlagents/trainers 下的ppo/、sac/、poca/等算法目录因此在当前版本下此步应改为安装 PyTorch 与配套的mlagents包并在 cli_utils.py 中通过--torch-device参数显式选择cuda设备来使用 GPU。最后安装其余依赖pip3 install pillow pip3 install numpy完成以上步骤后你的自定义 Azure 虚拟机就具备了运行 ML-Agents 训练的全部条件可以回到前面的安装 ML-Agents 工具包测试环境连通性与运行训练章节继续操作。常见问题与注意事项headless 训练必须加--no-graphics否则mlagents-learn无法在无图形会话中推进训练。判断方式中止训练后检查输出是否为 Model Saved或查看结果目录是否生成了.onnx模型文件。GPU 是否生效的验证在 N 系列 GPU 虚拟机上运行nvidia-smi确认训练进程占用了 GPU也可在训练命令中通过--torch-device cuda显式指定。安全提示Python 与 Unity 环境之间通过开放的 socket 通信且无认证见 environment.py 的构造注释请确保训练网络环境安全可信。run-id 唯一性TensorBoard 会把同一 run-id 的所有运行统计合并显示云端多次训练务必使用不同run-id或训练前删除results目录下对应子目录。版本兼容性原文档针对 ML-Agents v0.3 编写安装命令中的具体版本号mlagents1.1.0、torch1.7.0、tensorflow-gpu1.4.0等不适用于当前 PyTorch 版本仓库请以当前仓库配套的最新包版本为准。免闲置计费若仅需临时跑一轮训练优先考虑 ACI 容器方案训练结束即销毁避免虚拟机空转产生持续费用。【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价