【Ray】一个简单的使用Ray并行计算例子

知识点: Remote Function

ray的remote function创建非常之简单,就是在普通的function前面加上decorator @ray.remote

ray remote 函数 和 普通函数的区别

1、调用函数的时候

  • 普通函数直接regular_func()
  • remote函数是remote_func.remote()

2、函数返回内容

  • 普通函数直接返回值
  • remote函数返回的是objectref,看作一个object ID,然后ray再创建一个task去运行它。可以通过ray.get()去获得objectref的结果

在这里插入图片描述

3、并行处理

  • 普通函数按照顺序调用、输出
  • remote函数调用是并行、不保证顺序的

测试ray运行速度

使用普通函数

import time

# 初始化一个普通函数
def slow_func(i):
    time.sleep(1)
    return i

# 调用上面这个普通函数
time.sleep(2.0)
start_time = time.time()  # 调用开始前时间点
results = [slow_func(i) for i in range(4)]
end_time = time.time()  # 调用结束时时间点
duration = end_time - start_time  # 计算周期
print('The results are {}. This took {} seconds'.format(results, duration))

在这里插入图片描述
可以从结果看到,这个普通函数在for loop里是顺序调用的,slow func每次停1秒。总共这个for loop跑完大约 4秒钟

使用remote函数

初始化一个4 CPU的ray(如果不设置,默认1 CPU+nothing)

ray.init(num_cpus=4,ignore_reinit_error=True)
@ray.remote
def slow_func(i):
    time.sleep(1)
    return i

time.sleep(2.0)
start_time = time.time()
result = [slow_func.remote(i) for i in range(4)]
end_time = time.time()
duration = end_time - start_time  # 计算周期
print('The results are {}. This took {} seconds'.format(results, duration))

在这里插入图片描述
从结果看出,虽然都是在slow func的第一步让程序暂停一秒钟,ray并行计算,所以总的消耗时间也在一秒左右。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值