Sign inSign up

ocpub/oc9-ray

By ocpub

Updated 4 months ago

Image
0

78

ocpub/oc9-ray repository overview

Ray 2.54.1 + Torch 2.11.0 on OpenCloudOS 9

基本信息

  • Ray 版本:v2.54.1
  • Torch 版本:v2.11.0
  • TorchVision 版本:v0.26.0
  • TorchAudio 版本:v2.11.0
  • 基础镜像:opencloudos/opencloudos9-cuda-devel:12.8
  • Python 版本:3.11
  • CUDA 版本:12.8
  • GPU 支持:NVIDIA GPU / CUDA
  • Ray 安装组件:ray[all,client,serve-grpc]

适用场景

  • Ray 单机任务调度
  • Ray 多机集群任务调度
  • Ray Data 数据处理
  • Ray Train 分布式训练
  • Ray Tune 参数调优
  • Ray Serve 模型服务
  • Ray RLlib 强化学习
  • PyTorch GPU 训练 / 推理

构建

docker build -t oc9-ray:2.54.1 .

也可以通过构建参数指定 Ray 和 Torch 版本:

docker build \
  --build-arg RAY_VERSION=2.54.1 \
  --build-arg TORCH_VERSION=2.11.0 \
  --build-arg TORCHVISION_VERSION=0.26.0 \
  --build-arg TORCHAUDIO_VERSION=2.11.0 \
  -t oc9-ray:2.54.1 .

镜像启动命令

单机模式启动

单机模式会在当前容器内启动一个 Ray Head 节点,适合本地开发、单机测试、单机 GPU 任务。

docker run -d \
  --gpus all \
  --shm-size=8g \
  --name oc9-ray-single \
  -e RAY_NODE_TYPE=single \
  -p 6379:6379 \
  -p 8265:8265 \
  -p 10001:10001 \
  -p 8000:8000 \
  oc9-ray:2.54.1

查看 Ray Dashboard:

http://宿主机IP:8265

进入容器:

docker exec -it oc9-ray-single bash

查看 Ray 集群状态:

ray status

多机集群模式启动

Ray 多机集群由一个 Head 节点和多个 Worker 节点组成。

推荐使用 --network=host,避免 Docker bridge 网络导致 Ray 节点之间无法互相访问。

假设机器 IP 如下:

角色IP
Head 节点192.168.1.10
Worker 节点 1192.168.1.11
Worker 节点 2192.168.1.12

启动 Head 节点

192.168.1.10 上执行:

docker run -d \
  --gpus all \
  --network=host \
  --shm-size=8g \
  --name oc9-ray-head \
  -e RAY_NODE_TYPE=head \
  -e RAY_NODE_IP_ADDRESS=192.168.1.10 \
  -e RAY_NUM_GPUS=1 \
  oc9-ray:2.54.1

查看 Head 节点日志:

docker logs -f oc9-ray-head

查看 Dashboard:

http://192.168.1.10:8265

启动 Worker 节点

192.168.1.11 上执行:

docker run -d \
  --gpus all \
  --network=host \
  --shm-size=8g \
  --name oc9-ray-worker-1 \
  -e RAY_NODE_TYPE=worker \
  -e RAY_HEAD_ADDRESS=192.168.1.10:6379 \
  -e RAY_NODE_IP_ADDRESS=192.168.1.11 \
  -e RAY_NUM_GPUS=1 \
  oc9-ray:2.54.1

192.168.1.12 上执行:

docker run -d \
  --gpus all \
  --network=host \
  --shm-size=8g \
  --name oc9-ray-worker-2 \
  -e RAY_NODE_TYPE=worker \
  -e RAY_HEAD_ADDRESS=192.168.1.10:6379 \
  -e RAY_NODE_IP_ADDRESS=192.168.1.12 \
  -e RAY_NUM_GPUS=1 \
  oc9-ray:2.54.1

查看 Worker 节点日志:

docker logs -f oc9-ray-worker-1
docker logs -f oc9-ray-worker-2

镜像测试命令

单机完整测试
docker run --rm \
  --gpus all \
  --shm-size=8g \
  -e RAY_NODE_TYPE=test \
  oc9-ray:2.54.1 \
  python3 test_ray.py --full --require-gpu
在已有 Head 节点中测试
docker exec -it oc9-ray-head bash
python3 /home/test_ray.py --address auto --full --require-gpu
通过 Ray Client 连接测试
python3 test_ray.py --address ray://192.168.1.10:10001 --full --require-gpu

常用端口

端口说明
6379Ray Head / GCS 端口
8265Ray Dashboard 端口
10001Ray Client 端口
8000Ray Serve HTTP 端口
8076Ray Node Manager 端口
8077Ray Object Manager 端口
8078Ray Runtime Env Agent 端口
8079Ray Dashboard Agent gRPC 端口
8080Ray Dashboard Agent HTTP 端口
8081Ray Metrics Export 端口
10002-10100Ray Worker 进程端口范围

环境变量说明

环境变量默认值示例说明
RAY_NODE_TYPEsinglehead / worker / single / test容器启动模式。head 表示 Head 节点,worker 表示 Worker 节点,single 表示单机模式,test 表示执行测试脚本
RAY_HEAD_ADDRESS192.168.1.10:6379Worker 节点连接 Head 节点的地址。RAY_NODE_TYPE=worker 时必填
RAY_NODE_IP_ADDRESS自动获取192.168.1.11当前节点对其他 Ray 节点可访问的 IP。多机部署时建议显式指定
RAY_HEAD_PORT63796379Ray Head / GCS 监听端口
RAY_DASHBOARD_HOST0.0.0.00.0.0.0Ray Dashboard 监听地址。容器中建议设置为 0.0.0.0
RAY_DASHBOARD_PORT82658265Ray Dashboard 端口
RAY_CLIENT_SERVER_PORT1000110001Ray Client 连接端口
RAY_SERVE_HTTP_PORT80008000Ray Serve HTTP 服务端口
RAY_NODE_MANAGER_PORT80768076Ray Node Manager 固定端口
RAY_OBJECT_MANAGER_PORT80778077Ray Object Manager 固定端口
RAY_RUNTIME_ENV_AGENT_PORT80788078Ray Runtime Env Agent 固定端口
RAY_DASHBOARD_AGENT_GRPC_PORT80798079Ray Dashboard Agent gRPC 端口
RAY_DASHBOARD_AGENT_LISTEN_PORT80808080Ray Dashboard Agent HTTP 端口
RAY_METRICS_EXPORT_PORT80818081Ray Metrics 指标暴露端口
RAY_MIN_WORKER_PORT1000210002Ray Worker 进程端口范围下限
RAY_MAX_WORKER_PORT1010010100Ray Worker 进程端口范围上限
RAY_NUM_CPUS自动检测20手动指定当前节点可用 CPU 数量
RAY_NUM_GPUS自动检测1手动指定当前节点可用 GPU 数量
RAY_OBJECT_STORE_MEMORY自动计算8589934592Ray Object Store 内存大小,单位为 bytes
RAY_RESOURCES'{"worker": 1}'自定义 Ray 资源标签
RAY_TEMP_DIR/tmp/ray/tmp/rayRay 临时文件目录
RAY_DISABLE_USAGE_STATS11禁用 Ray 使用统计上报
NVIDIA_VISIBLE_DEVICESallall / 0 / 0,1指定容器可见 GPU
NVIDIA_DRIVER_CAPABILITIEScompute,utilitycompute,utilityNVIDIA 容器运行能力,GPU 计算通常需要 computenvidia-smi 需要 utility

多机协同任务测试

进入 Head 容器:

docker exec -it oc9-ray-head bash

执行:

python3 - <<'PY'
import socket
import ray

ray.init(address="auto")

@ray.remote
def task(i):
    return {
        "task": i,
        "host": socket.gethostname(),
        "node_id": ray.get_runtime_context().get_node_id(),
    }

refs = [task.remote(i) for i in range(50)]
results = ray.get(refs)

for item in results[:20]:
    print(item)

print("cluster_resources:", ray.cluster_resources())
PY

如果 Worker 节点加入成功,cluster_resources 中会显示多台节点的 CPU / GPU 资源。


GPU 验证

docker run --rm \
  --gpus all \
  --shm-size=8g \
  oc9-ray:2.55.1 \
  bash -c "nvidia-smi && python3 -c 'import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))'"

预期输出中应包含:

True
NVIDIA ...

版本检查

进入容器后执行:

python3 - <<'PY'
import ray
import torch

print("Ray:", ray.__version__)
print("Torch:", torch.__version__)
print("Torch CUDA:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())

if torch.cuda.is_available():
    print("GPU:", torch.cuda.get_device_name(0))
PY

注意事项

  1. Docker 默认 /dev/shm 只有 64MB,Ray Object Store 会受到影响,建议启动容器时增加:
--shm-size=8g
  1. 多机部署建议使用:
--network=host
  1. Head 和 Worker 节点的 Ray 版本、Python 版本、CUDA 版本、PyTorch 版本应保持一致。

  2. Worker 节点必须能访问 Head 节点的 6379 端口。

  3. 多机 Docker bridge 网络模式下,Ray 可能识别到容器内网 IP,导致其他机器无法访问,因此生产部署建议显式设置:

-e RAY_NODE_IP_ADDRESS=当前宿主机IP
  1. 生产环境建议固定 Ray 内部端口和 Worker 端口范围,便于配置防火墙、安全组和网络策略。

  2. 使用 GPU 时,宿主机必须安装 NVIDIA Driver 和 NVIDIA Container Toolkit。

  3. 如果 Ray Dashboard 无法访问,请确认启动参数中包含:

-e RAY_DASHBOARD_HOST=0.0.0.0
  1. 如果 Worker 节点无法加入集群,请优先检查:
    • Head 节点 IP 是否正确
    • RAY_HEAD_ADDRESS 是否正确
    • 防火墙是否放通 6379
    • 是否使用了 --network=host
    • RAY_NODE_IP_ADDRESS 是否设置为宿主机可访问 IP

常见命令

查看 Ray 状态:

ray status

查看 Ray 任务:

ray list tasks

查看 Ray 节点:

ray list nodes

停止 Ray:

ray stop --force

查看容器日志:

docker logs -f oc9-ray-head
docker logs -f oc9-ray-worker-1

删除容器:

docker rm -f oc9-ray-head oc9-ray-worker-1 oc9-ray-worker-2

Tag summary

Content type

Image

Digest

sha256:a747ae293

Size

12 GB

Last updated

4 months ago

docker pull ocpub/oc9-ray:2.54.1