我正在尝试在pytorch
中使用python的多进程Pool
方法来处理图像。以下是代码:
from multiprocessing import Process, Pool
from torch.autograd import Variable
import numpy as np
from scipy.ndimage import zoom
def get_pred(args):
img = args[0]
scale = args[1]
scales = args[2]
img_scale = zoom(img.numpy(),
(1., 1., scale, scale),
order=1,
prefilter=False,
mode='nearest')
# feed input data
input_img = Variable(torch.from_numpy(img_scale),
volatile=True).cuda()
return input_img
scales = [1,2,3,4,5]
scale_list = []
for scale in scales:
scale_list.append([img,scale,scales])
multi_pool = Pool(processes=5)
predictions = multi_pool.map(get_pred,scale_list)
multi_pool.close()
multi_pool.join()
我遇到了这个错误:
`RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method
在这行中: predictions = multi_pool.map(get_pred,scale_list)
有谁能告诉我我做错了什么吗?
torch.multiprocessing.set_start_method('spawn', force=True)
。 - mr_moif __name__ == '__main__':
包围起来,因为全局语句会在生成子进程时运行。 - xjclTypeError: 'NoneType' object is not callable
。有人见过这个吗? - Mikhail