Я использую код для обработки изображений в python opencv. Поскольку этот процесс занимает много времени, скажем, 30 изображений. Я попытался обработать эти изображения параллельно, используя Multiprocessing. Многопроцессорная часть хорошо работает в CPU, но я хочу использовать эту многопроцессорную функцию в GPU (cuda).
Я использую torch.multiprocessing для параллельного запуска задачи. Поэтому я использую torch.device ('cuda') для нашего класса, чтобы запустить все это на этом перкулярном устройстве. Когда я запускаю код, он показывает устройство, используя «cuda», но не используя обработку GPU.
import cv2
import numpy as np
import torch
import torch.nn as nn
from torch.multiprocessing import Process, Pool, Manager, set_start_method
import sys
import os
class RoadShoulderWidth(nn.Module):
def __init__(self):
super(RoadShoulderWidth, self).__init__()
pass
// Want to run below method in parallel for 30 images.
@staticmethod
def get_dim(image, road_shoulder_width_list):
..... code
def get_road_shoulder_width(self, _root_dir, _img_path_list):
manager = Manager()
road_shoulder_width_list = manager.list()
processes = []
for img_path in img_path_list[:30]:
img = cv2.imread(_root_dir + '/' + img_path)
img = img[72 * 5:72 * 6, 0:1280]
# Do work
p = Process(target=self.get_dim,args=(img,road_shoulder_width_list))
p.start()
processes.append(p)
for p in processes:
p.join()
return road_shoulder_width_list
Используйте приведенный ниже код для запуска вашего класса
if __name__ == '__main__':
root_dir = '/home/nikhil_m/r'
img_path_list = os.listdir(root_dir)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Using device:', device)
dataloader_kwargs = {'pin_memory': True}
set_start_method('fork')
obj = RoadShoulderWidth().to(device)
val = obj.get_road_shoulder_width(str(root_dir), img_path_list)
print(val)
print(torch.cuda.is_available())
Кто-нибудь может подсказать, как это исправить?