[英]why cannot cuda model be initialized under the __init__ method in a class that inherits multiprocessing.process?
这是我的代码:
from MyDetector import Helmet_Detector
from multiprocessing import Process
class Processor(Process):
def __init__(self):
super().__init__()
self.helmet_detector = Helmet_Detector()
def run(self):
print(111)
if __name__ == '__main__':
p=Processor()
p.start()
如您所见,class 'Processor' 继承了 multiprocessing.Process,而 Helmet_Detector 是使用 cuda 的 YOLO model。 但是当我运行它时,错误发生如下:
THCudaCheck FAIL file=C:\w\1\s\tmp_conda_3.7_075911\conda\conda-bld\pytorch_1579075223148\work\torch/csrc/generic/StorageSharing.cpp line=245 error=71 : operation not supported
Traceback (most recent call last):
File "E:/python-tasks/WHU-CSTECH/Processor.py", line 17, in <module>
p.start()
File "C:\Anaconda\lib\multiprocessing\process.py", line 112, in start
self._popen = self._Popen(self)
File "C:\Anaconda\lib\multiprocessing\context.py", line 223, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "C:\Anaconda\lib\multiprocessing\context.py", line 322, in _Popen
return Popen(process_obj)
File "C:\Anaconda\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
reduction.dump(process_obj, to_child)
File "C:\Anaconda\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
File "C:\Anaconda\lib\site-packages\torch\multiprocessing\reductions.py", line 242, in reduce_tensor
event_sync_required) = storage._share_cuda_()
RuntimeError: cuda runtime error (71) : operation not supported at C:\w\1\s\tmp_conda_3.7_075911\conda\conda-bld\pytorch_1579075223148\work\torch/csrc/generic/StorageSharing.cpp:245
然后我尝试在运行方法中初始化 Helmet_Detector:
def run(self):
print(111)
self.helmet_detector = Helmet_Detector()
没有发生错误。 谁能告诉我这个问题的原因,我该如何解决这个问题? 谢谢!
发生错误是因为在 python 中,多处理要求进程 class 对象是可挑选的,以便可以将数据传输到正在创建的进程,即 object 的序列化和反序列化。 建议解决这个问题,惰性实例化 Helmet_Detector object(提示:在 python 中尝试属性)。
编辑:
根据@jodag 的评论,您应该使用 pytorch 的多处理库而不是标准的多处理库
例子:
import torch.multiprocessing as mp
class Processor(mp.Process):
.
.
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.