Ray 集群容器化部署
本文演示如何用 Docker 启动一个 Ray 集群(1 主 + 多工作节点),并说明关键参数与常见问题。适用于在同一二层网络或使用 host 网络的场景。
前置条件
- Docker 已安装并可用(rootless/标准均可)
- 可访问的镜像
model-server:0812(包含 Ray 及你的服务) - 所有节点时间同步、网络互通(尤其是 6379、8265、你的服务端口)
- 资源规划:CPU/内存/共享内存(/dev/shm)
启动主节点(Head)
通过 ray start 启动主节点容器,并开启 Dashboard 与资源限制:
1 | |
- 端口说明:
- 5000:示例中的业务 API 服务(可按需调整)
- 6379:Ray Head 的 GCS 端口(Worker 通过此端口加入)
- 8265:Ray Dashboard(Web UI)
- 网络模式:示例使用
--network=host,确保所有节点能直连 Head 的6379/8265。在云环境(如公有云)中,host 网络需谨慎; - 共享内存:
--shm-size必须大于--object-store-memory,否则对象存储易 OOM 或报错。 - privileged:通常不必需,建议移除,除非你的服务确实需要。
启动工作节点(Worker)
每个 Worker 通过 --address='<HEAD_IP>:6379' 加入集群:
1 | |
- 多个 Worker 可重复上述命令,修改容器名与资源参数。
- 若非 host 网络,需确保容器能访问到 Head 的
6379端口(映射端口或内网解析)。
Python 端连接与资源注解
在 Python 中连接已启动的 Ray 集群:
1 | |
- 重要区别:
- 集群模式下,资源(CPU/内存/对象存储)应主要在
ray start层面配置。 ray.init(_memory=...)更适用于单机调试(不通过ray start手动起节点),在集群中不生效或不建议依赖。
- 集群模式下,资源(CPU/内存/对象存储)应主要在
验证与可视化
- 访问 Dashboard:
http://172.31.13.23:8265(替换为 Head IP) - 在 Python 中验证:
1 | |
常见问题与修正建议
- 注意:
--network=host与-p同时使用在大多数 Docker 版本中无效(host 模式会忽略-p)。 - 资源单位为字节,容易写错。示例中
--memory=80000000000= 80 GB ≈ 74.5 GiB,--object-store-memory=12000000000≈ 11.2 GiB,请按物理资源调整。 --privileged=true非必要,建议移除以降低安全风险。
Ray 集群容器化部署
http://example.com/2025/09/08/Ray-集群容器化部署/