Я пытаюсь создать пару процессов, используя многопроцессорный модуль Pytorch в распределенной серверной части openmpi.У меня есть следующий код:
def run(rank_local, rank, world_size, maingp):
print("I WAS SPAWNED ", rank_local, " OF ", rank)
tensor = torch.zeros(1)
tensor += 1
if rank == 0:
tensor += 100
dist.send(tensor, dst=1)
else:
print("I am spawn: ", rank, "and my tensor value before receive: ", tensor[0])
dist.recv(tensor, src=0)
print("I am spawn: ", rank, "and my tensor value after receive: ", tensor[0])
if __name__ == '__main__':
# Initialize Process Group
dist.init_process_group(backend="mpi", group_name="main")
maingp = None #torch.distributed.new_group([0,1])
mp.set_start_method('spawn')
# get current process information
world_size = dist.get_world_size()
rank = dist.get_rank()
# Establish Local Rank and set device on this node
mp.spawn(run, args=(rank, world_size, maingp), nprocs=1)
Я запускаю этот код с помощью openmpi следующим образом:
mpirun -n 2 python code.py
Так что я понимаю, что mpirun создает два процесса с рангами [0,1], каждый из этих процессов порождает новый процесс с их локальным рангом 0. Теперь, если я хочу установить связь между этими двумя подпроцессами основного процесса, я получаю некоторую трассировку и следующую ошибку:
-- Process 0 terminated with the following error:
Traceback (most recent call last):
File "/home/usama/anaconda3/lib/python3.6/site-packages/torch/multiprocessing/spawn.py", line 19, in _wrap
fn(i, *args)
File "/home/usama/code/test/code.py", line 19, in run
dist.send(tensor, dst=1)
File "/home/usama/anaconda3/lib/python3.6/site-packages/torch/distributed/distributed_c10d.py", line 666, in send
_check_default_pg()
File "/home/usama/anaconda3/lib/python3.6/site-packages/torch/distributed/distributed_c10d.py", line 191, in _check_default_pg
"Default process group is not initialized"
AssertionError: Default process group is not initialized
Мой вопрос заключается в том, как сделать так, чтобы эти подпроцессы могли взаимодействовать, т.е. процесс [0, 0] отправлял что-то процессу [1, 0].Есть идеи?