Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
406115db
MegEngine
项目概览
MegEngine 天元
/
MegEngine
接近 2 年 前同步成功
通知
414
Star
4708
Fork
583
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
406115db
编写于
1月 21, 2022
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(imperative): syncbn fp16 support
GitOrigin-RevId: 6059d5b76b480b65d4088573e9da1f5f608c4ae2
上级
d5ef7923
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
21 addition
and
8 deletion
+21
-8
imperative/python/megengine/functional/nn.py
imperative/python/megengine/functional/nn.py
+7
-1
imperative/python/test/unit/module/test_batchnorm.py
imperative/python/test/unit/module/test_batchnorm.py
+14
-7
未找到文件。
imperative/python/megengine/functional/nn.py
浏览文件 @
406115db
...
...
@@ -1385,6 +1385,11 @@ def sync_batch_norm(
momentum
=
momentum
,
eps
=
eps
,
)
if
amp
.
_enabled
:
inp
,
weight
,
bias
,
running_mean
,
running_var
=
cast_tensors
(
inp
,
weight
,
bias
,
running_mean
,
running_var
,
promote
=
True
)
_channels
=
make_shape_tuple
(
inp
.
shape
)[
1
]
_ndim
=
inp
.
ndim
_device
=
inp
.
device
...
...
@@ -1464,7 +1469,8 @@ def sync_batch_norm(
channel_x2s
,
channel_mean
,
)
if
amp
.
_enabled
:
outvar
=
outvar
.
astype
(
"float16"
)
return
outvar
...
...
imperative/python/test/unit/module/test_batchnorm.py
浏览文件 @
406115db
...
...
@@ -13,6 +13,7 @@ import numpy as np
import
pytest
import
megengine
as
mge
import
megengine.amp
as
amp
import
megengine.distributed
as
dist
from
megengine
import
Tensor
,
jit
from
megengine.autodiff.grad_manager
import
GradManager
...
...
@@ -24,7 +25,8 @@ _assert_allclose = functools.partial(np.testing.assert_allclose, atol=5e-6, rtol
@
pytest
.
mark
.
require_ngpu
(
2
)
@
pytest
.
mark
.
isolated_distributed
def
test_syncbn
():
@
pytest
.
mark
.
parametrize
(
"enable_amp"
,
[
False
,
True
])
def
test_syncbn
(
enable_amp
):
nr_chan
=
8
data_shape
=
(
3
,
nr_chan
,
4
,
16
)
momentum
=
0.9
...
...
@@ -38,12 +40,17 @@ def test_syncbn():
@
dist
.
launcher
(
n_gpus
=
2
)
def
worker
(
data
,
yv_expect
,
running_mean
,
running_var
):
rank
=
dist
.
get_rank
()
bn
=
SyncBatchNorm
(
nr_chan
,
momentum
=
momentum
,
eps
=
eps
)
for
i
in
range
(
steps
):
yv
=
bn
(
Tensor
(
data
[
rank
][
i
]))
_assert_allclose
(
yv
.
numpy
(),
yv_expect
[
rank
])
with
amp
.
autocast
(
enabled
=
enable_amp
):
rank
=
dist
.
get_rank
()
bn
=
SyncBatchNorm
(
nr_chan
,
momentum
=
momentum
,
eps
=
eps
)
for
i
in
range
(
steps
):
yv
=
bn
(
Tensor
(
data
[
rank
][
i
]))
if
enable_amp
:
np
.
testing
.
assert_allclose
(
yv
.
numpy
(),
yv_expect
[
rank
],
atol
=
5e-4
,
rtol
=
5e-4
)
else
:
_assert_allclose
(
yv
.
numpy
(),
yv_expect
[
rank
])
_assert_allclose
(
bn
.
running_mean
.
numpy
(),
running_mean
)
_assert_allclose
(
bn
.
running_var
.
numpy
(),
running_var
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录