/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
05 – 端口与实时画面(训练 / 评估)
适用机器:host2(Ubuntu 22.04 + Docker Swarm,公网 154.222.19.221,内网 10.0.37.3)
结论:网页上能看实时画面的入口只有一个 —— RoboMaker 容器内的 web_video_server:
训练 8080、评估 8180。8100 是训练多 worker 汇总页,8888 是日志分析 Jupyter,
5900 是 VNC(当前 DR_GUI_ENABLE=False,没有 Gazebo 画面),它们都不是仿真摄像头画面。
1. 快速索引
| 训练 实时画面 | 8080 | http://154.222.19.221:8080/ | ✅ | 训练栈未运行,未监听 |
| 评估 实时画面 | 8180 | http://154.222.19.221:8180/ | ✅ | 评估已结束,端口已关闭;MP4 已落盘 |
| 训练多 worker 汇总 | 8100 | http://154.222.19.221:8100/ | ✅ | 未启动(需 dr-start-viewer) |
| Gazebo GUI(VNC) | 5900 | vnc://154.222.19.221:5900 | ❌ | DR_GUI_ENABLE=False,无画面 |
| 日志分析 Jupyter | 8888 | http://154.222.19.221:8888/ | ✅ | 未启动(需 dr-start-loganalysis) |
| MinIO S3 API | 9000 | http://154.222.19.221:9000/ | API | 运行中 |
| MinIO 控制台 | 9001 | http://154.222.19.221:9001/ | ✅ | 运行中 |
154.222.19.221 是 host2 的公网地址(内网为 10.0.37.3,hostname -I 第一项)。在 host2 本机上可把 IP 换成 localhost。
这些端口没有鉴权,直接暴露公网有风险;条件允许时优先用第 6.2 节的 SSH 隧道。
2. 端口从哪来
端口不是写死在 compose 里的,而是 bin/activate.sh 按 DR_RUN_ID 算出来的:
# bin/activate.sh(swarm 模式)
export DR_ROBOMAKER_TRAIN_PORT=$(expr 8080 + $DR_RUN_ID)
export DR_ROBOMAKER_EVAL_PORT=$(expr 8180 + $DR_RUN_ID)
export DR_ROBOMAKER_GUI_PORT=$(expr 5900 + $DR_RUN_ID)
# 非 swarm(compose)模式
export DR_ROBOMAKER_TRAIN_PORT="8080-8089"
export DR_ROBOMAKER_EVAL_PORT="8080-8089"
export DR_ROBOMAKER_GUI_PORT="5901-5920"
| DR_ROBOMAKER_TRAIN_PORT | 8080 | 训练 RoboMaker 的 8080 → 宿主机 |
| DR_ROBOMAKER_EVAL_PORT | 8180 | 评估 RoboMaker 的 8080 → 宿主机 |
| DR_ROBOMAKER_GUI_PORT | 5900 | VNC(仅 DR_GUI_ENABLE=True 时有画面) |
| DR_WEBVIEWER_PORT | 8100 | NGINX 汇总页(system.env) |
注意:
- DR_RUN_ID 改变时所有端口一起偏移;本文均按当前 DR_RUN_ID=0 计算。
- 训练和评估可以同时开(8080 与 8180 不冲突),但 8 GiB 内存的 host2 不建议。
- 训练栈名是 deepracer-0,评估栈名是 deepracer-eval-0,两者都用 sagemaker-local 网络。
3. 训练时怎么看
3.1 直接看单栈(最常用)
http://154.222.19.221:8080/
打开后是 ROS Image Topic List 页面,点任意话题就是 MJPEG 实时流:
http://154.222.19.221:8080/stream_viewer?topic=/racecar/deepracer/kvs_stream
也可以直接取单帧:
http://154.222.19.221:8080/snapshot?topic=/racecar/deepracer/kvs_stream
训练栈启动后 RoboMaker 需要 30–60 秒才把 web_video_server 拉起来;
刚启动时页面能开但列表空/一直转圈是正常的。
3.2 多 worker 汇总页(dr-start-viewer)
cd ~/deepracer-for-cloud
source bin/activate.sh # dr-* 必须 source 后才有
dr-start-viewer # 或启动训练时加 -v:dr-start-training -v
然后访问:
http://154.222.19.221:8100/
- 一页最多显示 6 个 worker 的 /racecar/deepracer/kvs_stream。
- 重启训练后必须刷新 viewer,否则还连旧容器:dr-update-viewer
- 停止:dr-stop-viewer
- 该脚本只查找 deepracer-${DR_RUN_ID}_robomaker(训练栈),
不包含评估栈 deepracer-eval-${DR_RUN_ID}_robomaker,所以评估时请直接用 8180。
4. 评估时怎么看
http://154.222.19.221:8180/
页面与训练完全一样(同一个 web_video_server),只是端口换成了 8180。
启动方式:
source bin/activate.sh
dr-start-evaluation -q
验证是否监听:
ss -ltn | grep 8180
# LISTEN 0 4096 *:8180 *:*
docker service ls | grep eval
# deepracer-eval-0_robomaker … *:8180->8080/tcp
dr-start-viewer / 8100 对评估无效,原因见 3.2。
评估结束后容器会被移除,8180 随之关闭;要保留画面请用 DR_EVAL_SAVE_MP4=True 落盘(见第 8 节)。
5. 页面上有哪些话题
| /racecar/camera/zed/rgb/image_rect_color | 车内第一视角 | 模型推理实际输入 |
| /racecar/main_camera/zed/rgb/image_rect_color | 跟车视角,无叠加 | 纯画面 |
| /racecar/deepracer/kvs_stream | 跟车视角,带叠加 | 训练/评估默认观看流 |
| /racecar/deepracer/main_camera_stream | 跟车视角,带叠加 | 评估 MP4 的录制源(DR_EVAL_SAVE_MP4=True 时) |
| /sub_camera/zed/rgb/image_rect_color | 俯视赛道 | 视世界文件是否发布,列表里不一定有 |
当前 http://154.222.19.221:8180/ 实际返回的列表包含前四项(/sub_camera 未出现)。
每路流都是 multipart/x-mixed-replace 的 MJPEG,Chrome / Edge / Firefox 可直接看,无需插件。
6. 从自己电脑访问
6.1 能直连(公网或内网)
直接开 http://154.222.19.221:8080/ 或 http://154.222.19.221:8180/。
端口由 Docker 绑定在 *(所有网卡),只要 host2 防火墙/云安全组放行即可。
在 host2 本机上也可以访问 http://localhost:8080/ / http://localhost:8180/。
检查 host2 本机监听:
ss -ltn | grep -E ':8080|:8180|:8100|:5900|:8888|:9000|:9001'
检查防火墙(如有 ufw):
sudo ufw status
6.2 不能直连(推荐 SSH 隧道)
在 Windows PowerShell 里:
# 评估画面
ssh –N –L 8180:localhost:8180 rambo@host2
# 训练画面(另开一个)
ssh –N –L 8080:localhost:8080 rambo@host2
# 多 worker 汇总页
ssh –N –L 8100:localhost:8100 rambo@host2
然后浏览器打开 http://localhost:8180/(或 8080 / 8100)。
隧道方式不需要改防火墙,也不要把 8080/8180 暴露到公网。
VNC 同理:ssh -N -L 5900:localhost:5900 rambo@host2,再用 VNC 客户端连 localhost:5900;
但当前 GUI 关闭,连上也是空桌面。
7. Gazebo GUI(5900)与 Jupyter(8888)
7.1 Gazebo GUI
system.env 当前:
DR_GUI_ENABLE=False
所以 5900 即使被映射也没有 Gazebo 画面。要看完整仿真界面(而不只是摄像头):
# 1) 改 system.env
sed -i 's/^DR_GUI_ENABLE=.*/DR_GUI_ENABLE=True/' ~/deepracer-for-cloud/system.env
# 2) 重启训练/评估栈(必须先移除旧栈)
docker stack rm deepracer-0
sleep 15
source bin/activate.sh
dr-start-training
然后用 VNC 客户端(RealVNC / TigerVNC / Remmina)连 154.222.19.221:5900。
这不是网页;浏览器打不开 vnc://,需要 VNC 客户端或 noVNC 之类的网关。
CPU 模式下开 GUI 会明显拖慢仿真,训练/评估期间一般保持 False。
7.2 日志分析 Jupyter
source bin/activate.sh
dr-start-loganalysis
访问 http://154.222.19.221:8888/(端口 8888)。它用于分析训练日志/指标,不提供实时仿真画面。
8. 评估视频(不依赖端口)
评估时设置:
DR_EVAL_SAVE_MP4=True
结束后会把三个视角写到 MinIO:
s3://bucket/<MODEL_PREFIX>/mp4/camera-<…>/0-video.mp4
- 评估结束后约 3 分钟在 flush,期间不要 docker stack rm,否则视频会损坏/丢失。
- 下载示例:aws –profile minio –endpoint-url http://localhost:9000 \\
s3 cp s3://bucket/reinvent_base-10003/mp4/ ./mp4/ –recursive - 这是“事后看”的方式;想“实时看”仍然用第 3/4 节的 8080/8180。
9. 当前实际状态(2026-10-22 15:41 UTC,评估结束后)
$ ss -ltn | grep -E ':8080|:8180'
(无输出:8080 / 8180 都不监听)
$ docker service ls
deepracer-eval-0_rl_coach 0/1
deepracer-eval-0_robomaker 0/1 (评估结束,端口已释放)
s3_minio 1/1 *:9000-9001->9000-9001/tcp
- 训练栈 deepracer-0 已停(速度阶梯停在 10009 启动阶段),所以 8080 / 5900 不监听。
- 评估已跑完:日志出现 shutting down processing monitor complete,MP4 于 15:39 UTC 落盘
s3://bucket/reinvent_base-10003/mp4/:- camera-45degree/0-video.mp4 28.6 MB
- camera-pip/0-video.mp4 33.0 MB
- camera-topview/0-video.mp4 258 B(异常,基本为空;与 /sub_camera 未发布一致)
- 要看回放/再次评估时,重新 dr-start-evaluation,8180 会重新监听。
- DR_GUI_ENABLE=False,没有 Gazebo GUI。
- 公网连通性实测(2026-10-22 15:43 UTC):9000 返回 403、9001 返回 200;
8180 因评估结束返回 000(连接失败)。训练/评估栈启动后需再确认 8080/8180 未被安全组拦截。
10. 排查表
| 8080 连接被拒 | 训练栈没起 / 已 docker stack rm | docker service ls 看 deepracer-0_robomaker 是否 1/1 |
| 8180 连接被拒 | 评估栈没起 / 已结束 | docker service ls 看 deepracer-eval-0_robomaker |
| 页面能开但话题列表空 | RoboMaker 还在启动 | 等 30–60 秒;用 docker logs 看 robomaker 容器最后 50 行 |
| 点话题一直转圈 | 该话题还没有第一帧 | 确认仿真在跑;换 /racecar/deepracer/kvs_stream 试 |
| 页面 404 / 连接重置 | 端口被别的进程占用,或隧道指错 | 用 ss -ltnp 检查端口占用;重开隧道 |
| 8100 打不开 | viewer 没启动 | source bin/activate.sh; dr-start-viewer |
| 8100 画面是旧的 | 训练重启后没更新 viewer | dr-update-viewer |
| 5900 能连但黑屏 | DR_GUI_ENABLE=False | 见 7.1,或改用 8080 摄像头流 |
| 公网打不开、host2 本机正常 | 安全组/防火墙 | 用第 6.2 节 SSH 隧道,不要直接暴露端口 |
11. 相关文件
| deepracer-for-cloud/bin/activate.sh | 端口计算公式(第 39–48 行) |
| deepracer-for-cloud/docker/docker-compose-training.yml | 训练栈端口映射 8080/5900 |
| deepracer-for-cloud/docker/docker-compose-eval.yml | 评估栈端口映射 8180 |
| deepracer-for-cloud/docker/docker-compose-webviewer.yml | 8100 NGINX 汇总页 |
| deepracer-for-cloud/scripts/viewer/start.sh | viewer 生成逻辑(只查训练栈) |
| deepracer-for-cloud/system.env | DR_GUI_ENABLE、DR_WEBVIEWER_PORT |
| deepracer-for-cloud/docs/video.md | 上游说明:话题、端口、MP4 |
| docs/03-运行框架.md §7.3 | 容器拓扑与端口表 |



