简单的ray python示例不能让它并行执行



对ray来说还是个新手,所以请耐心等待。我创建了下面的例子来测试光线和非光线实现的简单图像算法之间的时间差。为什么下面的代码不能并行执行?我可以看到仪表板上的所有内容都只加载到一个worker

import ray
import cv2
import numpy as np
import time
ray.init(ignore_reinit_error=True)

@ray.remote
class image_import(object):
def __init__(self):
pass
def color(self):
return cv2.imread("frame30.png", flags=0)
def black(self):
return cv2.imread("frame30.png", flags=0)
def green(self):
return cv2.imread("frame30.png", flags=0)
def yellow(self):
return cv2.imread("frame30.png", flags=0)
def blue(self):
return cv2.imread("frame30.png", flags=0)

def orange(self):
return cv2.imread("frame30.png", flags=0)

def multiply_matrices_1(self,clr,b_1):
return np.dot(clr,b_1)

def multiply_matrices_2(self,b_2,b_3):
return np.dot(b_2,b_3)

def multiply_matrices_3(self,b_4,b_5):
return np.dot(b_4,b_5)

def multi_1(self,val_1,val_2):
return np.dot(val_1,val_2)

def multi_2(self,val_2):
return np.dot(val_2,val_2)

def multi_3(self,val_4,val_5):
return np.dot(val_4,val_5)
start = time.time()
counter_actor = image_import.remote()
clr= counter_actor.color.remote()
b_1= counter_actor.black.remote()
b_2= counter_actor.green.remote()
b_3= counter_actor.yellow.remote()
b_4= counter_actor.blue.remote()
b_5= counter_actor.orange.remote()

multi_1= counter_actor.multiply_matrices_1.remote(clr,b_1)
multi_2= counter_actor.multiply_matrices_2.remote(b_2,b_3)
multi_3= counter_actor.multiply_matrices_3.remote(b_3,b_4)
multi_4= counter_actor.multi_1.remote(multi_1,multi_2)
multi_5= counter_actor.multi_2.remote(multi_3)
addition= counter_actor.multi_3.remote(multi_4,multi_5)
results= ray.get(addition)
duration = time.time() - start
print(duration)

您正在创建一个参与者(类的远程对象),并且参与者任务是串行执行的:

https://docs.ray.io/en/master/walkthrough.html calling-the-actor

对于并行执行,只需去掉类:

@ray.remote
def color(self):
return cv2.imread("frame30.png", flags=0)
@ray.remote
def black(self):
return cv2.imread("frame30.png", flags=0)
futures = [color.remote(), black.remote()]  # Will execute in parallel
ray.get(futures)

最新更新