使用cuda进行多重处理

时间:2019-10-11 02:43:40

标签: python-3.x multiprocessing pytorch python-multiprocessing

我正在尝试在python程序中运行多处理。我创建了两个过程,在一个过程中通过了一个神经网络,在另一个过程中通过了一些繁重的计算功能。我希望神经网络可以在GPU上运行,而其他功能可以在CPU上运行,因此我使用cuda()方法定义了神经网络。

import cv2
import torch
import torch.nn as nn
import multiprocessing as mp    #I even tried import torch.multiprocessing
from multiprocessing import set_start_method
try:
    set_start_method('spawn')
except RunTimeError:
    pass

class network(nn.Module):
    '''neural net class'''

def func1(img, net):
    '''used to call neural net'''

def func2(img):
    '''image processing part'''

if __name__ == '__main__':
    net = network().cuda() #here network is my neural net class
    img = cv2.imread('img.png')
    p1 mp.Process(target= func1, args=(img, net))    #func1 is used to run neural net
    p2 = mp.Process(target=func2, args=(img,))    #func2 is used for some img-processing
    p1.start()
    p2.start()
    p1.join()
    p2.join()

但是当我运行程序时,出现以下错误: RuntimeError:无法在派生子进程中重新初始化CUDA。要将CUDA用于多处理,您必须使用“ spawn”启动方法

所以我尝试使用 spawn forkserver 启动方法,但是随后出现另一个错误: RuntimeError:cuda运行时错误(71):…/ torch / csrc / generic / StorageSharing.cpp:245

不支持该操作

我已经尝试了python3 multiprocessing和torch.multiprocessing两者,但是对我没有用。

0 个答案:

没有答案