Многопроцессорная обработка с использованием CUDA - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь запустить многопроцессорность в моей программе на 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 и torch.multiprocessing оба, но ничегоработал на меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...