pytorch - 如何让工作机器在本地使用 RRefs,同时在 PyTorch RPC 中保留梯度
问题描述
假设我有一个 PyTorch 模块,其组件是RRef
参数服务器中保存的模型的一个组件,例如以下示例:
class MyRPCModule(nn.Module):
def __init__(self, ps, x_dim, h_dim, z_dim):
super(MyRPCModule, self).__init__()
# Ref for remote embedder on param server
self.remote_emb_rref = rpc.remote(
ps, Embedder, args=(x_dim, h_dim)
)
Embedder 模块本身非常小,但我有大量的训练数据,我想将它们分散到多个不同的进程/机器上。我的forward
方法需要是什么样子才能使该Embedder
模块上的计算发生在机器调用上forward
?我试过了
def forward(self, x):
return self.remote_emb_rref.to_here()(x)
但这不会保留渐变,因此所有的backward
andstep
调用都不会更改参数服务器上的参数。
我主要在这两个教程中工作:PyTorch 的“Dist RPC 框架入门”和他们的Combining DDP with RPC Framework但都使用参数服务器进行计算。有什么办法解决这个问题吗?
解决方案
推荐阅读
- python - 我想从一个 textarea 读取值并将相同的值传递给 django 中的另一个 textarea?
- angular - 将 SignalR 与 Angular 和 ASP.NET Core 一起使用会在发布到域后出现握手错误
- python - 如何用python发出请求?
- android - 如何在 Android 中设置背景图像并将该图像适合整个卡片以用于卡片视图?
- git - 如何在 Visual Studio Code 中将 Git hook 与 Sonar 结合使用?
- mysql - DELETE查询的SQL语句给出错误
- python-3.x - 如何遍历嵌套列表以获取其中包含唯一元素的可能结果列表?
- jenkins - Gitea Jenkins 插件:发现要构建的分支
- python - PyCharm IDE 和 run.bat 文件运行所有测试而不是指定数量
- c++ - (SFML)按下键时播放器构造函数未更新为正确的动画