基于Ray局域网推理计算
硬件:GPU主机、Mac 电脑
系统环境:ubuntu、Mac OS
软件版本:v2.45.0
Ray 是一个面向分布式计算的开源框架,专为简化大规模计算任务的并行化和分布式执行而设计,广泛应用于机器学习、强化学习、超参数优化和通用分布式计算场景。其核心特点是 高性能、低延迟、易用性,支持 Python 和 Java 接口,并兼容常见的机器学习库(如 PyTorch、TensorFlow)。
在局域网中利用远程 GPU 主机(IP:192.168.1.130)的 A6000 资源,并通过 Mac(IP:192.168.1.80)提交深度学习任务(如 YOLOv11),可以按照以下步骤使用 Ray 框架:
1. 环境准备
远程 GPU 主机(192.168.1.130)
- 安装依赖
- 安装 NVIDIA 显卡驱动、CUDA Toolkit 和 cuDNN。
- 安装 Python 和 PyTorch(或 TensorFlow),确保支持 GPU:
pip install torch # 或 tensorflow python -c "import torch; print(torch.cuda.is_available())" # 验证 GPU 可用
- 安装 Ray
pip install ray
Mac 电脑(192.168.1.80)
- 安装 Ray
pip install ray
2. 启动 Ray 集群
在远程 GPU 主机上启动 Ray 集群(作为主节点):
ray start --head --port=6379 # 启动主节点,端口 6379 是默认的 Ray 端口
注意:确保局域网内防火墙允许以下端口:
6379
(Ray 节点通信)8265
(仪表板,可选)
3. 从 Mac 连接集群
在 Mac 上连接到远程集群:
import ray
ray.init(address="ray://192.168.1.130:6379") # Mac 作为客户端提交任务到集群
4. 编写分布式任务(以 YOLOv11 为例)
假设你使用 PyTorch 实现 YOLOv11,需要将模型加载到 GPU 并执行推理。
修改代码以利用 GPU
import torch
import ray
# 在 GPU 节点上定义任务
@ray.remote(num_gpus=1) # 要求每个任务使用 1 个 GPU
def run_yolo_inference(image_path):
import torch
model = torch.hub.load('ultralytics/yolov11', 'yolov11s') # 加载预训练模型
results = model(image_path) # 推理
return results.save() # 返回结果路径
# 提交任务到远程 GPU 节点
result = ray.get(run_yolo_inference.remote("path/to/image.jpg"))
print(result)
5. 关键配置和注意事项
GPU 资源调度
- 使用
@ray.remote(num_gpus=1)
确保任务分配到 GPU 节点。 - 若远程主机有多块 GPU,可通过
CUDA_VISIBLE_DEVICES
控制使用哪些 GPU:CUDA_VISIBLE_DEVICES=0 ray start --head # 仅暴露第一个 GPU
数据传输
- 如果输入数据(如图像)存储在 Mac 上,需先传输到远程节点,或共享存储(如 NFS/Samba)。
- 可通过
ray.put()
将小数据上传到集群内存,或直接读取远程节点上的文件。
调试和监控
- 访问 Ray 仪表板(默认在主节点的
8265
端口):http://192.168.1.130:8265
6. 完整示例
远程 GPU 主机
# 启动主节点(确保已安装 Ray 和 PyTorch)
ray start --head --num-gpus=1
Mac 电脑
# client.py
import ray
ray.init(address="ray://192.168.1.130:6379")
@ray.remote(num_gpus=1)
def gpu_task():
import torch
return torch.cuda.is_available()
print(ray.get(gpu_task.remote())) # 应输出 True,表示任务在 GPU 节点上运行
7. 常见问题
1. 无法连接到集群
- 确保 IP 和端口正确,检查防火墙设置。
- 使用
nmap 192.168.1.130 -p 6379
测试端口是否开放。
2. 任务未使用 GPU
- 检查任务是否声明
num_gpus=1
。 - 在远程节点运行
nvidia-smi
观察 GPU 使用情况。
3. Mac 与远程主机的 Python 版本不一致
- 确保 Ray 版本一致(建议升级到最新版):
pip install --upgrade ray
8. 扩展方案
- 多节点扩展:可在更多 GPU 机器上运行
ray start --address=192.168.1.130:6379
加入集群。 - 资源隔离:通过
runtime_env
指定容器或虚拟环境,隔离不同任务依赖。