Результаты отличаются при размещении torch.distributed.rpc.rpc_aync в другом файле .py

#pytorch #rpc

#пыторч #rpc

Вопрос:

Я хочу выполнить функцию на стороне рабочего и вернуть результаты мастеру. Однако я нахожу, что результаты отличаются при размещении rpc_async в другом файле .py

Способ 1

master.py:

  import os import torch import torch.distributed.rpc as rpc from torch.distributed.rpc import RRef from test import sub_fun  os.environ['MASTER_ADDR'] = '10.5.26.19' os.environ['MASTER_PORT'] = '5677'  rpc.init_rpc("master", rank=0, world_size=2) rref = torch.Tensor([0]) sub_fun(rref) rpc.shutdown()  

test.py

  def f(rref): print("function is executed on master")  def sub_fun(rref): x = rpc.rpc_async("worker", f, args=(rref,))  

worker.py:

 import os import torch import torch.distributed.rpc as rpc from torch.distributed.rpc import RRef  os.environ['MASTER_ADDR'] = '10.5.26.19' os.environ['MASTER_PORT'] = '5677'  def f(rref): print("function is executed on worker") rpc.init_rpc("worker", rank=1, world_size=2) rpc.shutdown()  

Я обнаружил, что вывод «функция выполняется на главном» на рабочей стороне.

Способ 2

когда я помещаю две функции: sub_fun и f в master.py вместо того, чтобы test.py, результатом является «функция выполняется на работнике».

Почему эти два способа дают разные результаты. и как я могу получить результат 2 с помощью метода 1.