Ray使用备注
框架介绍
- Ray是一种python分布式任务调度框架
- 其支持 无状态的任务并发执行,也支持 有状态的任务按照一定顺序执行
- 其支持 分布式调度器,在一个节点上创建的任务先给本节点的局部调度器,并让本节点自己处理,当资源不够时,再将任务发给全局调度器供其他节点处理
- 其支持 分布式对象存储,同一个节点上的使用同一个对象存储器,实现进程间内存共享
- 其支持 单节点部署及多节点集群部署;
简单用法
import ray
import time
ray.init()
@ray.remote
def run_task():
num = 1
for item in range(1000):
num = num * item**item
return
if __name__ == '__main__':
print('开始计时')
start_time = time.time()
result_ids = []
for i in range(100):
s1 = time.time()
x_id = run_task.remote()
print("发送任务到ray框架耗时:", time.time() - s1, "s")
result_ids.append(x_id)
ray.get(result_ids)
print("总耗时", time.time() - start_time, "s")
单节点部署及执行方法
- A服务器 启动ray master服务(并指定使用cpu核数): ray start --head --num-cpus=36
- A服务器 执行python压测案例: python ray_use.py
- A服务器 关闭ray master服务: ray stop
多节点部署及执行方法
- A服务器 启动ray master服务: ray start --head --num-cpus=36 --disable-usage-stats
- B服务器 启动ray salve服务(–address:指向master服务地址): ray start --num-cpus=2 --address=‘192.168.xxx.xxx:6379’
- A服务器 执行python压测案例: python ray_use.py
- B服务器 关闭ray salve服务: ray stop
- A服务器 关闭ray master服务: ray stop
使用注意事项
- ray框架本身在任务调度,异步执行,跨进程通信 等有所消耗,
- 因此 当出现 集群部署和单节点部署 总体消耗时间相似,或使用ray比不使用总体耗时更长,
- 主要是因为 被调度的任务本身消耗资源较少,执行时间较短导致的; 如 ray执行remote()方法进行异步调用耗时0.1ms,而 单个任务执行耗时也要0.1ms,则使用ray耗时就要0.2s,得不偿失;
- 这时说明 ray框架不符合需求;
- 或者 将多个耗时较短的任务拼接在一个大的任务中,从而突出ray框架分布式高并发的优势;
相关链接地址