#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.