将 torch.distributed.rpc.rpc_aync 放在不同的 .py 文件时,结果会有所不同

Posted

技术标签:

【中文标题】将 torch.distributed.rpc.rpc_aync 放在不同的 .py 文件时,结果会有所不同【英文标题】:The results is different when placing torch.distributed.rpc.rpc_aync at a different .py file 【发布时间】:2021-12-06 03:38:43 【问题描述】:

我想在worker端执行一个函数并将结果返回给master。但是,我发现将 rpc_async 放在不同的 .py 文件时结果不同

方法一

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()

我发现worker端的输出是“function is executed on master”。

方法二

当我把 sub_fun 和 f 这两个函数放在 master.py 而不是 test.py 时,结果是“function is executed on worker”。

为什么这两种方式输出不同的结果。以及如何使用方法 1 得到结果 2。

【问题讨论】:

【参考方案1】:

RPC 假设模块和功能在所有进程中都是一致的。在这种情况下,您拥有相同的函数f,但在两个进程中具有不同的实现。请注意,RPC 不会将整个函数代码发送到远程端执行,而只会在远程端找到函数f 并执行那里存在的任何内容。

我建议使用两个不同的函数来实现您在此处尝试执行的操作,因为根据您导入文件的方式,一个函数实现可能会覆盖另一个。

【讨论】:

以上是关于将 torch.distributed.rpc.rpc_aync 放在不同的 .py 文件时,结果会有所不同的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?

如何将CMD窗口背景改成透明?