Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
4d35397b
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
403
Star
4705
Fork
582
代码
文件
提交
分支
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看板
提交
4d35397b
编写于
6月 16, 2020
作者:
M
Megvii Engine Team
提交者:
Xu Xinran
6月 19, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(dnn/fallback): fix conv1x1/im2col usable and fuse-conv-bias get fp32xfp32-->qint8 error
GitOrigin-RevId: 5a3bfedd8a433cd17e735e3ba822027589263b69
上级
12dc36a6
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
56 addition
and
26 deletion
+56
-26
dnn/src/fallback/conv_bias/conv1x1/algos.cpp
dnn/src/fallback/conv_bias/conv1x1/algos.cpp
+18
-15
dnn/src/fallback/conv_bias/im2col/algos.cpp
dnn/src/fallback/conv_bias/im2col/algos.cpp
+17
-10
dnn/test/fallback/conv_bias.cpp
dnn/test/fallback/conv_bias.cpp
+18
-0
src/gopt/impl/inference.cpp
src/gopt/impl/inference.cpp
+3
-1
未找到文件。
dnn/src/fallback/conv_bias/conv1x1/algos.cpp
浏览文件 @
4d35397b
...
...
@@ -201,24 +201,27 @@ bool ConvBiasImpl::AlgoConv1x1::usable(ConvBiasImpl* opr,
if
(
FH
!=
1
||
FW
!=
1
||
PH
||
PW
||
SH
!=
1
||
SW
!=
1
)
return
false
;
if
(
param
.
src_type
.
enumv
()
!=
param
.
filter_type
.
enumv
()
&&
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Int8
&&
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
QuantizedS8
&&
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Quantized8Asymm
&&
#if !MEGDNN_DISABLE_FLOAT16
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Float16
&&
#endif
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Float32
)
{
return
false
;
}
//! make sure 8x8x16 and 8x8x32 biasmode is nobias and nonlineMode
//! is identity otherwise return false mean that 8x8x32 and 8x8x16
//! not support PostProcess
if
(
param
.
src_type
.
enumv
()
==
param
.
filter_type
.
enumv
()
&&
(
param
.
src_type
.
enumv
()
==
DTypeEnum
::
Int8
&&
(
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int16
||
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int32
))
&&
param
.
bias_mode
!=
megdnn
::
BiasMode
::
NO_BIAS
&&
param
.
nonlineMode
!=
megdnn
::
NonlineMode
::
IDENTITY
)
return
false
;
if
(
param
.
src_type
.
enumv
()
==
param
.
filter_type
.
enumv
()
&&
((
param
.
src_type
.
enumv
()
==
DTypeEnum
::
QuantizedS8
||
param
.
src_type
.
enumv
()
==
DTypeEnum
::
Quantized8Asymm
)
&&
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
QuantizedS32
)
&&
param
.
bias_mode
!=
megdnn
::
BiasMode
::
NO_BIAS
&&
param
.
nonlineMode
!=
megdnn
::
NonlineMode
::
IDENTITY
)
if
(
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int16
||
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int32
||
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
QuantizedS32
)
{
if
(
param
.
bias_mode
!=
megdnn
::
BiasMode
::
NO_BIAS
||
param
.
nonlineMode
!=
megdnn
::
NonlineMode
::
IDENTITY
)
{
return
false
;
}
}
if
(
opr
->
param
().
format
==
param
::
ConvBias
::
Format
::
NCHW44
||
opr
->
param
().
format
==
param
::
ConvBias
::
Format
::
NCHW44_DOT
)
{
...
...
dnn/src/fallback/conv_bias/im2col/algos.cpp
浏览文件 @
4d35397b
...
...
@@ -647,20 +647,27 @@ bool ConvBiasImpl::AlgoIm2col::usable(
return
false
;
}
if
(
param
.
src_type
.
enumv
()
!=
param
.
filter_type
.
enumv
()
&&
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Int8
&&
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
QuantizedS8
&&
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Quantized8Asymm
&&
#if !MEGDNN_DISABLE_FLOAT16
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Float16
&&
#endif
param
.
src_type
.
enumv
()
!=
DTypeEnum
::
Float32
)
{
return
false
;
}
//! make sure 8x8x16 and 8x8x32 biasmode is nobias and nonlineMode is
//! identity otherwise return false mean that 8x8x32 and 8x8x16 not
//! support PostProcess
if
(
param
.
src_type
.
enumv
()
==
param
.
filter_type
.
enumv
()
&&
((
param
.
src_type
.
enumv
()
==
DTypeEnum
::
Int8
&&
(
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int16
||
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int32
))
||
((
param
.
src_type
.
enumv
()
==
DTypeEnum
::
QuantizedS8
||
param
.
src_type
.
enumv
()
==
DTypeEnum
::
Quantized8Asymm
)
&&
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
QuantizedS32
))
&&
param
.
bias_mode
!=
megdnn
::
BiasMode
::
NO_BIAS
&&
if
(
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int16
||
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
Int32
||
param
.
dst_type
.
enumv
()
==
DTypeEnum
::
QuantizedS32
)
{
if
(
param
.
bias_mode
!=
megdnn
::
BiasMode
::
NO_BIAS
||
param
.
nonlineMode
!=
megdnn
::
NonlineMode
::
IDENTITY
)
{
return
false
;
}
}
if
(
opr
->
param
().
format
==
param
::
ConvBias
::
Format
::
NCHW44
||
opr
->
param
().
format
==
param
::
ConvBias
::
Format
::
NCHW44_DOT
)
{
//! current NCHW44 im2col only support DEFAULT mode matmul
...
...
dnn/test/fallback/conv_bias.cpp
浏览文件 @
4d35397b
...
...
@@ -188,6 +188,24 @@ void checker_conv_bias(std::vector<conv_bias::TestArg> args, Handle* handle,
}
}
TEST_F
(
FALLBACK_MULTI_THREADS
,
CONV_BIAS_FORWARD_IM2COL_8X8X16
)
{
using
namespace
conv_bias
;
param
::
ConvBias
cur_param
;
using
NLMode
=
param
::
ConvBias
::
NonlineMode
;
std
::
vector
<
conv_bias
::
TestArg
>
args
=
get_conv_bias_args
(
{
1
,
3
},
{
0
},
{
NLMode
::
IDENTITY
,
NLMode
::
RELU
},
{
1
},
false
,
true
);
NormalRNG
default_rng
;
Checker
<
ConvBias
>
checker
(
handle
());
checker
.
set_dtype
(
0
,
dtype
::
Int8
{});
checker
.
set_dtype
(
1
,
dtype
::
Int8
{});
checker
.
set_dtype
(
2
,
dtype
::
Int16
{});
checker
.
set_dtype
(
4
,
dtype
::
Int16
{});
for
(
auto
&&
arg
:
args
)
{
checker
.
set_param
(
arg
.
param
).
execs
(
{
arg
.
src
,
arg
.
filter
,
arg
.
bias
,
{},
{}});
}
}
TEST_F
(
FALLBACK_MULTI_THREADS
,
CONV_BIAS_FORWARD
)
{
using
namespace
conv_bias
;
param
::
ConvBias
cur_param
;
...
...
src/gopt/impl/inference.cpp
浏览文件 @
4d35397b
...
...
@@ -1671,7 +1671,9 @@ void FuseConvBiasNonlinPass::apply(OptState& state) const {
rewriter
.
get_var
(
typecvt
->
input
(
0
))
->
owner_opr
());
if
(
!
conv_bias
||
m_deps
.
count
(
typecvt
->
input
(
0
))
!=
1
||
typecvt
->
output
(
0
)
->
dtype
().
enumv
()
!=
DTypeTrait
<
dtype
::
QuantizedS8
>::
enumv
)
DTypeTrait
<
dtype
::
QuantizedS8
>::
enumv
||
typecvt
->
input
(
0
)
->
dtype
().
enumv
()
!=
DTypeTrait
<
dtype
::
QuantizedS32
>::
enumv
)
return
nullptr
;
auto
config
=
conv_bias
->
config
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录