Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
coolalex776
apachecn-dl-zh
提交
27540ade
A
apachecn-dl-zh
项目概览
coolalex776
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
27540ade
编写于
1月 19, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-19 22:07:36
上级
d0efa540
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
6 addition
and
6 deletion
+6
-6
new/pt-tut-17/68.md
new/pt-tut-17/68.md
+6
-6
未找到文件。
new/pt-tut-17/68.md
浏览文件 @
27540ade
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录