Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
b292dfb8
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
b292dfb8
编写于
2月 09, 2022
作者:
B
Baibaifan
提交者:
GitHub
2月 09, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
optimize sharding stage3 offload (#39397)
上级
c5affb78
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
37 addition
and
6 deletion
+37
-6
python/paddle/distributed/fleet/meta_parallel/sharding/sharding_stage3.py
...stributed/fleet/meta_parallel/sharding/sharding_stage3.py
+33
-3
python/paddle/distributed/fleet/meta_parallel/sharding/sharding_utils.py
...istributed/fleet/meta_parallel/sharding/sharding_utils.py
+4
-3
未找到文件。
python/paddle/distributed/fleet/meta_parallel/sharding/sharding_stage3.py
浏览文件 @
b292dfb8
...
...
@@ -86,7 +86,7 @@ class ShardingStage3(nn.Layer):
self
.
_offload
=
offload
self
.
_sync_comm
=
sync_comm
# segmentation size
self
.
_segment_size
=
segment_size
if
not
offload
else
0
self
.
_segment_size
=
segment_size
global
DEV
DEV
=
"cpu"
if
paddle
.
get_device
()
==
"cpu"
else
paddle
.
get_device
(
...
...
@@ -191,8 +191,23 @@ class ShardingStage3(nn.Layer):
param
.
fw_storage
.
_gradient_set_empty
(
False
)
param
.
bw_storage
.
_clear
()
# 2.Handle unslice param
for
grad_storage
in
self
.
_grad_storages
.
values
():
grad_storage
.
buffer
.
zero_
()
if
not
self
.
_offload
:
for
grad_storage
in
self
.
_grad_storages
.
values
():
grad_storage
.
buffer
.
zero_
()
else
:
for
param
in
list
(
self
.
_unslice_params
):
param
.
clear_gradient
(
False
)
param
.
_gradient_set_empty
(
False
)
tmp_var
=
param
.
cuda
(
DEV_ID
)
param
.
_clear
()
if
tmp_var
.
dtype
==
Type
.
fp32
.
value
and
param2dtype
[
param
.
name
]
==
Type
.
fp16
.
value
:
tmp_var
=
paddle
.
cast
(
tmp_var
,
Type
.
fp16
.
value
)
tmp_var
.
_share_buffer_to
(
param
)
tmp_var
.
_clear
()
for
grad_storage
in
self
.
_grad_storages
.
values
():
grad_storage
.
manumal_relase
()
grad_storage
.
rebuild
()
# Update param memery slice
def
_update_params_slice
(
self
):
...
...
@@ -455,6 +470,21 @@ class ShardingStage3(nn.Layer):
group
=
self
.
_group
,
use_calc_stream
=
True
)
if
self
.
_offload
:
for
param
in
list
(
self
.
_unslice_params
):
tmp_var
=
_device2cpu
(
param
,
convert_dtype
=
True
)
tmp_var
.
_share_buffer_to
(
param
)
tmp_var
.
_clear
()
for
grad_storage
in
self
.
_grad_storages
.
values
():
for
p
in
grad_storage
.
_params
:
tmp_g
=
_device2cpu
(
p
.
grad
,
convert_dtype
=
True
)
p
.
clear_gradient
(
False
)
p
.
_gradient_set_empty
(
False
)
p
.
_copy_gradient_from
(
tmp_g
)
tmp_g
.
_clear
()
grad_storage
.
buffer
.
_clear
()
return
update_list
def
get_all_parameters
(
self
,
convert2cpu
=
False
):
...
...
python/paddle/distributed/fleet/meta_parallel/sharding/sharding_utils.py
浏览文件 @
b292dfb8
...
...
@@ -131,14 +131,15 @@ class ShardingClipGrad:
clip_var_fp16
=
paddle
.
cast
(
clip_var
,
paddle
.
float16
)
for
p
,
g
in
params_grads
:
if
g
is
None
:
continue
if
getattr
(
p
,
'need_clip'
,
True
)
is
False
:
if
getattr
(
p
,
'need_clip'
,
True
)
is
False
or
g
is
None
:
continue
origin_state
=
g
.
stop_gradient
g
.
stop_gradient
=
True
if
p
.
dtype
==
paddle
.
float16
:
g
.
scale_
(
clip_var_fp16
)
else
:
g
.
scale_
(
clip_var
)
g
.
stop_gradient
=
origin_state
p
.
_reset_grad_inplace_version
(
True
)
return
params_grads
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录