Ray 部署与测试

Ray部署

单机部署

环境:

  • Ubuntu 22.04.3 (WSL 2.2.4.0)

  • Python 3.10.12

安装Ray

# 注:不加default安装后没有dashboard
pip install -U "ray[default]"
$ ray --version
ray, version 2.20.0

启动Ray

ray start --head --dashboard-host='0.0.0.0' --dashboard-port=8265

显示

To add another node to this Ray cluster, run
    ray start --address='xxx.xxx.xxx.xxx:6379'
To monitor and debug Ray, view the dashboard at
    xxx.xxx.xxx.xxx:8265

进入该网址即可查看 dashboard。

Docker 部署

下载镜像

docker pull rayproject/ray

注:2024/6/6 后所有 dockerhub 镜像站都被封停,导致下载很慢。

启动容器

docker run --shm-size=4G -tip 8265:8265 -p 6379:6379 rayproject/ray

在容器中启动ray

ray start --head --dashboard-host='0.0.0.0' --dashboard-port=8265

将测试文件放入容器

# 填入容器的id或名字 
docker cp .\ray_task.py (container_id):/home/ray/

运行测试代码

分布式部署

需要连接到同一局域网。主结点启动后,从结点输入

ray start --address='xxx.xxx.xxx.xxx:6379'

启动成功后,查看主结点的dashboard下的cluster栏,可以看到

连上后,运行python程序即可将计算任务分发给每个结点。

性能测试和分析

测试代码

import numpy as np
import time
import ray
​
ray.init()
​
n = 1000    # 矩阵大小
T = 100     # 测试数
matrices = [np.random.rand(n, n) for _ in range(T)]
​
def work(A):
    return np.linalg.inv(A)
@ray.remote
def work_ray(A):
    return np.linalg.inv(A)
​
# 无ray测试
start_time = time.time()
results = [work(A) for A in matrices]
print(f"Total time (no ray): {time.time() - start_time:.2f}s")
​
# ray测试
start_time = time.time()
results_ray = ray.get([work_ray.remote(A) for A in matrices])
print(f"Total time (ray): {time.time() - start_time:.2f}s")
​
# 正确性检查
for i in range(T):
    if not np.allclose(results[i], results_ray[i]):
        print("Wrong result!", i)

性能指标

  1. 总执行时间:从计算开始到结束的总执行时间

  2. 吞吐量:单位时间内完成的任务量

  3. CPU占用率:计算时在各结点上的CPU占用率

  4. 延迟:一个任务从请求到完成的时间

  5. 额外开销:除计算外消耗的时间,如 Ray 的调度用时

本实验中,我们选择吞吐量和CPU占用率作为指标进行测试。这两个指标易于测量,且能很好地反应计算系统的性能。

单机测试与优化

CPU为12核

不用Ray时,使用top查看CPU使用率

吞吐量CPU占用率
不用Ray2.67/s99.9%
用Ray19.84/s84.7%

可以看到,用Ray后吞吐量为原来7.4倍,且平均CPU占用率更低。

这个结果令人惊讶,接下来进一步实验来分析原因。

@ray.remote(num_cpus=12)
def work_ray(A):
    return np.linalg.inv(A)
吞吐量CPU占用率
用Ray (num_cpus=12)2.26/s90.9%

分析:上面实验中Ray的优化主要来自于把独立的任务并行处理。虽然numpy本身支持多核,但同一个任务中使用多核处理的额外开销很大。使用Ray后,Ray给每个任务分配给一个核执行,多个核可以在任务层面并行地处理,效率很高。

分布式性能测试

CPU为12核+12核

使用docker部署,测试 n=1000, T=1000

(base) ray@bb113b5d00c2:~$ python ray_task2.py
2024-06-24 22:49:41,522 INFO worker.py:1568 -- Connecting to existing Ray cluster at address: 172.18.0.2:6379...
2024-06-24 22:49:41,534 INFO worker.py:1744 -- Connected to Ray cluster. View the dashboard at 172.18.0.2:8265
Starting...
Total time: 34.07s
吞吐量CPU占用率
Ray 分布式29.35/s84.6%

计算资源增加后,吞吐量进一步提升。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值