提交 27540ade 编写于 作者: W wizardforcel

2021-01-19 22:07:36

上级 d0efa540
......@@ -22,7 +22,7 @@
1. 主服务器在参数服务器上创建一个嵌入表,并为其保留一个 [RRef](https://pytorch.org/docs/master/rpc.html#rref)
2. 然后,主持人开始在训练器上进行训练循环,并将嵌入表 RRef 传递给训练器。
3. 训练器创建一个`HybridModel`,该`HybridModel`首先使用主机提供的嵌入表 RRef 执行嵌入查找,然后执行包装在 DDP 中的 FC 层。
4. 训练者执行模型的正向传递,并使用 [Distributed Autograd](https://pytorch.org/docs/master/rpc.html#distributed-autograd-framework) 使用损失执行反向传递。
4. 训练者执行模型的正向传递,并使用[分布式 Autograd](https://pytorch.org/docs/master/rpc.html#distributed-autograd-framework) 使用损失执行反向传递。
5. 作为向后遍历的一部分,将首先计算 FC 层的梯度,并通过 DDP 中的`allreduce`将其同步到所有训练器。
6. 接下来,分布式 Autograd 将梯度传播到参数服务器,在该服务器中更新嵌入表的梯度。
7. 最后,[分布式优化器](https://pytorch.org/docs/master/rpc.html#module-torch.distributed.optim)用于更新所有参数。
......@@ -110,7 +110,7 @@ if __name__=="__main__":
```
在讨论训练器的详细信息之前,让我们介绍一下训练器使用的`HybridModel`。 如下所述,使用对参数服务器上嵌入表(`emb_rref`)的 RRef 和用于 DDP 的`device`初始化`HybridModel`。 模型的初始化在 DDP 中包装了 [nn.Linear](https://pytorch.org/docs/master/generated/torch.nn.Linear.html) 层,以在所有训练器之间复制和同步该层。
在讨论训练器的详细信息之前,让我们介绍一下训练器使用的`HybridModel`。 如下所述,使用对参数服务器上嵌入表(`emb_rref`)的 RRef 和用于 DDP 的`device`初始化`HybridModel`。 模型的初始化在 DDP 中包装了[`nn.Linear`](https://pytorch.org/docs/master/generated/torch.nn.Linear.html)层,以在所有训练器之间复制和同步该层。
该模型的前进方法非常简单。 它使用 [RRef 帮助程序](https://pytorch.org/docs/master/rpc.html#torch.distributed.rpc.RRef.rpc_sync)在参数服务器上执行嵌入查找,并将其输出传递到 FC 层。
......@@ -138,11 +138,11 @@ class HybridModel(torch.nn.Module):
```
接下来,让我们看看 Trainer 上的设置。 训练者首先使用对参数服务器上嵌入表的 RRef 及其自身等级创建上述`HybridModel`
接下来,让我们看看训练器上的设置。 训练者首先使用对参数服务器上嵌入表的 RRef 及其自身等级创建上述`HybridModel`
现在,我们需要检索要使用 [DistributedOptimizer](https://pytorch.org/docs/master/rpc.html#module-torch.distributed.optim) 优化的所有参数的 RRef 列表。 为了从参数服务器中检索嵌入表的参数,我们定义了一个简单的辅助函数`_retrieve_embedding_parameters`,该函数基本上遍历了嵌入表的所有参数并返回 RRef 的列表。 训练器通过 RPC 在参数服务器上调用此方法,以接收所需参数的 RRef 列表。 由于 DistributedOptimizer 始终将需要优化的参数的 RRef 列表,因此我们甚至需要为 FC 层的本地参数创建 RRef。 这是通过遍历`model.parameters()`,为每个参数创建 RRef 并将其附加到列表来完成的。 请注意,`model.parameters()`仅返回本地参数,不包含`emb_rref`
现在,我们需要检索要使用 [DistributedOptimizer](https://pytorch.org/docs/master/rpc.html#module-torch.distributed.optim) 优化的所有参数的 RRef 列表。 为了从参数服务器中检索嵌入表的参数,我们定义了一个简单的辅助函数`_retrieve_embedding_parameters`,该函数基本上遍历了嵌入表的所有参数并返回 RRef 的列表。 训练器通过 RPC 在参数服务器上调用此方法,以接收所需参数的 RRef 列表。 由于`DistributedOptimizer`始终将需要优化的参数的 RRef 列表,因此我们甚至需要为 FC 层的本地参数创建 RRef。 这是通过遍历`model.parameters()`,为每个参数创建 RRef 并将其附加到列表来完成的。 请注意,`model.parameters()`仅返回本地参数,不包含`emb_rref`
最后,我们使用所有 RRef 创建我们的 DistributedOptimizer,并定义 CrossEntropyLoss 函数。
最后,我们使用所有 RRef 创建我们的`DistributedOptimizer`,并定义`CrossEntropyLoss`函数。
```py
def _retrieve_embedding_parameters(emb_rref):
......@@ -189,7 +189,7 @@ def _run_trainer(emb_rref, rank):
1. 为分布式 Autograd 设置[分布式 Autograd 上下文](https://pytorch.org/docs/master/rpc.html#torch.distributed.autograd.context)
2. 运行模型的正向传递并检索其输出。
3. 使用损失函数,根据我们的输出和目标计算损失。
4. 使用 Distributed Autograd 使用损失执行分布式反向传递。
4. 使用分布式 Autograd 使用损失执行分布式反向传递。
5. 最后,运行“分布式优化器”步骤以优化所有参数。
```py
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册