我的功能本身可以正常工作,但当我 运行 作为工作人员时却不行
My function works fine by itself but not when I run it as a worker
我正在尝试 运行 在 Python 中并行使用多个 Yolos。
我有一个函数,我正试图将其用作工作器。像这样:
import darknet as dn
def yolo(input_queue, net, meta):
while True:
task = input_queue.get_nowait()
c = task.shape[0]
h = task.shape[1]
w = task.shape[2]
task = (task/255.0)
task = task.flatten()
new_arr = np.copy(task).astype(np.float32)
new_arr = np.ctypeslib.as_ctypes(new_arr)
im = dn.IMAGE(w,h,c,new_arr)
dn.rgbgr_image(im)
print(dn.detect(net, meta, im))
你可以找到暗网文件here。
先不说我把数组转成ctype数组的方法。已讨论 。
如果我 运行 这个函数作为一个普通函数工作就像一个魅力。但是,如果我 运行 作为这样的工人:
p = Process(target=yolo, args=(input_queue, net, meta))
p.start()
它一直到最后一行然后它给我这个错误:
CUDA Error: initialization error
python: ./src/cuda.c:36: check_error: Assertion `0' failed.
我不明白为什么会出现这个错误。
谁能帮忙?导致此问题的这两种使用此功能的方式有何区别?
感谢 this 我发现问题是您无法在具有不同 PID 的进程之间共享 CUDA 中的上下文,这是有道理的。所以我发现如果我在同一个过程中 运行 相关的东西(在我的例子中,net
)那么它就可以正常工作。在此之前,我在开始工作之前正在加载重量。
我正在尝试 运行 在 Python 中并行使用多个 Yolos。
我有一个函数,我正试图将其用作工作器。像这样:
import darknet as dn
def yolo(input_queue, net, meta):
while True:
task = input_queue.get_nowait()
c = task.shape[0]
h = task.shape[1]
w = task.shape[2]
task = (task/255.0)
task = task.flatten()
new_arr = np.copy(task).astype(np.float32)
new_arr = np.ctypeslib.as_ctypes(new_arr)
im = dn.IMAGE(w,h,c,new_arr)
dn.rgbgr_image(im)
print(dn.detect(net, meta, im))
你可以找到暗网文件here。
先不说我把数组转成ctype数组的方法。已讨论
如果我 运行 这个函数作为一个普通函数工作就像一个魅力。但是,如果我 运行 作为这样的工人:
p = Process(target=yolo, args=(input_queue, net, meta))
p.start()
它一直到最后一行然后它给我这个错误:
CUDA Error: initialization error
python: ./src/cuda.c:36: check_error: Assertion `0' failed.
我不明白为什么会出现这个错误。 谁能帮忙?导致此问题的这两种使用此功能的方式有何区别?
感谢 this 我发现问题是您无法在具有不同 PID 的进程之间共享 CUDA 中的上下文,这是有道理的。所以我发现如果我在同一个过程中 运行 相关的东西(在我的例子中,net
)那么它就可以正常工作。在此之前,我在开始工作之前正在加载重量。