-
Notifications
You must be signed in to change notification settings - Fork 25.3k
Closed
Description
I use a spawn start methods to share CUDA tensors between processes
import torch
torch.multiprocessing.set_start_method("spawn")
import torch.multiprocessing as mp
def sub_processes(A, B, D, i, j, size):
D[(j * size):((j + 1) * size), i] = torch.mul(B[:, i], A[j, i])
def task(A, B):
size1 = A.shape
size2 = B.shape
D = torch.zeros([size1[0] * size2[0], size1[1]]).cuda()
D.share_memory_()
for i in range(1):
processes = []
for j in range(size1[0]):
p = mp.Process(target=sub_processes, args=(A, B, D, i, j, size2[0]))
p.start()
processes.append(p)
for p in processes:
p.join()
return D
A = torch.rand(3, 3).cuda()
B = torch.rand(3, 3).cuda()
C = task(A,B)
print(C)
It returns a wrong result and shows an error
/usr/bin/python3.5 /home/mingyi/桌面/test/test.py
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 106, in spawn_main
exitcode = _main(fd)
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 115, in _main
prepare(preparation_data)
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 226, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 278, in _fixup_main_from_path
run_name="__mp_main__")
File "/usr/lib/python3.5/runpy.py", line 254, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/lib/python3.5/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/mingyi/桌面/test/test.py", line 2, in <module>
torch.multiprocessing.set_start_method("spawn")
File "/usr/lib/python3.5/multiprocessing/context.py", line 231, in set_start_method
raise RuntimeError('context has already been set')
RuntimeError: context has already been set
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 106, in spawn_main
exitcode = _main(fd)
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 115, in _main
prepare(preparation_data)
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 226, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 278, in _fixup_main_from_path
run_name="__mp_main__")
File "/usr/lib/python3.5/runpy.py", line 254, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/lib/python3.5/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/mingyi/桌面/test/test.py", line 2, in <module>
torch.multiprocessing.set_start_method("spawn")
File "/usr/lib/python3.5/multiprocessing/context.py", line 231, in set_start_method
raise RuntimeError('context has already been set')
RuntimeError: context has already been set
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 106, in spawn_main
exitcode = _main(fd)
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 115, in _main
prepare(preparation_data)
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 226, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "/usr/lib/python3.5/multiprocessing/spawn.py", line 278, in _fixup_main_from_path
run_name="__mp_main__")
File "/usr/lib/python3.5/runpy.py", line 254, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/lib/python3.5/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/mingyi/桌面/test/test.py", line 2, in <module>
torch.multiprocessing.set_start_method("spawn")
File "/usr/lib/python3.5/multiprocessing/context.py", line 231, in set_start_method
raise RuntimeError('context has already been set')
RuntimeError: context has already been set
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
[torch.cuda.FloatTensor of size 9x3 (GPU 0)]
Process finished with exit code 0
cobalamin, Anjani100, 1506775595hzy, YanjieZe, alexlyzhov and 1 more
Metadata
Metadata
Assignees
Labels
No labels