本篇内容基于我在 AutoDL 云服务器 上对 Qmini 做完整训练与测试的实践总结,涵盖训练、可视化、策略测试、模型导出、URDF 调试等环节,并重点说明 headless(无显示)环境下的各种坑与解决方案。
前提说明:为什么不建议在云端直接跑渲染?
最初的目标是训练、渲染、视频录制全部在 AutoDL 上完成,不经过本地运行。然而现实是:
- 即使用 Xvfb 等虚拟显示器启动 Isaac Gym,也会发生视频保存全黑的情况。
- VNC 远程桌面也无法正常显示 Isaac Gym 的渲染窗口。
- 根本原因来自 驱动版本过高与 Isaac Gym 对驱动的强依赖。
因此更推荐:在云服务器训练模型 → 本地 Ubuntu 加载策略进行测试与演示。
训练阶段
python train.py --config BIRL --name <name>
--name: 存放路径experiments/<name>/--config: 选择配置文件,默认:BIRL--resume: 恢复训练- 示例:
python train.py --name stand --resume --path experiments/stand/checkpoints/policy_40000.pt
- 示例:
--render: 开启画面显示(isaac gym 窗口)--fix_cam: 视角固定在机器人上方--horovod: 多 gpu 训练--rl_device: 训练设备设置,默认 cuda0,可以改为 cpu 等--num_envs: 环境数量--seed: 随机种子,利于复现--max_iterations: 最大训练迭代次数
查看结果
云端可能出现 6006 端口占用 的情况,需要手动释放。
- 安装 lsof
apt-get update
apt-get install lsof -y
- 查看端口占用
lsof -i :6006
- 杀掉进程
kill -9 <PID>
- 重新启动 TensorBoard
tensorboard --logdir experiments/<name>/log --port 6006
运行训练好的策略 play.py
python play.py --render --name <name>
加载训练好的策略,开始跑模拟器。
--render: 显示画面--fix_cam: 相机固定跟随机器人--cmp_real: 与真实机器人采集的数据对比绘图--plt_sim: 显示仿真数据的曲线图(如关节角、速度等)--num_envs: 改变并行环境数量--video: 开启视频录制,保存到videos/文件夹,必须配合--render--time: 玩多少秒--iter: 指定用哪一轮的模型,默认加载目录下最后一个 policy--epochs: 重复评估多少次,用来统计平均性能--debug: 保存仿真数据到 Excel
导出 ONNX 模型
python export_pt2onnx.py --name <name>
把 .pt 权重导出为 .onnx,便于部署到嵌入式设备、Jetson、Unity 等。
加载(调试)URDF 模型
python tune_urdf.py
测试你的机器人 URDF 是否正常加载,检查质量参数、碰撞体、关节限位,也可微调模型参数。
自动调参 PID(tune_pid.py)
python tune_pid.py --mode <mode>
错误处理
Headless 环境无法渲染
云服务器默认无显示设备。
临时方案:使用虚拟显示:Xvfb(首先进行 pip 下载)
Xvfb :1 -screen 0 1024x768x24 &
export DISPLAY=:1
注意:但这只能让程序'以为'自己有显示,无法保证正常渲染!
使用 AutoDL 远程连接,play.py 视频录制仍为黑屏

原因分析:云端 GPU 驱动版本过高(如 570 系列),超过了 Isaac Gym 的兼容范围。
Isaac Gym 对渲染器依赖的驱动版本非常敏感,驱动过新 → 渲染器初始化失败 → 视频录制为纯黑。
目前找到比较好的方案是:云端只做训练,本地 Ubuntu 运行 play.py。
总结:目前我认为比较稳妥、推荐的流程是:云端训练(AutoDL)→ 本地 Ubuntu Play 与可视化。云端的 headless 环境与高版本驱动目前无法可靠支持 Isaac Gym 的图形渲染与视频录制,本地则能完美解决所有渲染相关问题。


