Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
ba2f0c2e
MegEngine
项目概览
MegEngine 天元
/
MegEngine
大约 1 年 前同步成功
通知
399
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看板
提交
ba2f0c2e
编写于
11月 16, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(dnn/cuda): fix cudnn_conv algo of conv_bias opr for fp16 add z cases
GitOrigin-RevId: b29b009de0803d0d8c4c6f1995ed10f2920652a8
上级
30976c23
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
78 addition
and
5 deletion
+78
-5
dnn/src/cuda/conv_bias/cudnn_conv.cpp
dnn/src/cuda/conv_bias/cudnn_conv.cpp
+25
-3
dnn/src/cuda/conv_bias/cudnn_conv_bias_activation.cpp
dnn/src/cuda/conv_bias/cudnn_conv_bias_activation.cpp
+3
-2
dnn/test/cuda/conv_bias.cpp
dnn/test/cuda/conv_bias.cpp
+50
-0
未找到文件。
dnn/src/cuda/conv_bias/cudnn_conv.cpp
浏览文件 @
ba2f0c2e
...
...
@@ -19,9 +19,6 @@ using namespace cuda;
using
namespace
conv_bias
;
bool
ConvBiasForwardImpl
::
AlgoCUDNNConv
::
is_available
(
const
SizeArgs
&
args
)
const
{
if
(
args
.
z_layout
->
ndim
>
0
)
return
false
;
if
(
args
.
filter_meta
.
format
!=
Param
::
Format
::
NCHW
&&
args
.
filter_meta
.
format
!=
Param
::
Format
::
NHWC
)
{
if
(
!
args
.
src_layout
->
is_contiguous
()
||
!
args
.
dst_layout
->
is_contiguous
())
{
...
...
@@ -75,6 +72,15 @@ WorkspaceBundle ConvBiasForwardImpl::AlgoCUDNNConv::get_workspace_bundle(
sizes
.
push_back
(
dst_layout
.
span
().
dist_byte
());
}
if
(
args
.
z_layout
->
ndim
>
0
&&
args
.
z_layout
->
dtype
.
enumv
()
!=
args
.
bias_layout
->
dtype
.
enumv
())
{
auto
z_layout
=
*
args
.
z_layout
;
z_layout
.
dtype
=
DType
();
args
.
opr
->
check_or_deduce_dtype_fwd
(
args
.
src_layout
->
dtype
,
args
.
filter_layout
->
dtype
,
z_layout
.
dtype
);
sizes
.
push_back
(
z_layout
.
span
().
dist_byte
());
}
SizeArgs
conv_args
=
args
;
conv_args
.
dst_layout
=
&
dst_layout
;
...
...
@@ -129,6 +135,22 @@ void ConvBiasForwardImpl::AlgoCUDNNConv::exec(const ExecArgs& args) const {
cudnnGetErrorString
(
status
),
conv_args
.
to_string
().
c_str
());
}
if
(
args
.
z_layout
->
ndim
>
0
)
{
auto
z_tensor
=
*
args
.
z_tensor
;
if
(
args
.
z_layout
->
dtype
.
enumv
()
!=
args
.
bias_layout
->
dtype
.
enumv
())
{
z_tensor
.
raw_ptr
=
bundle
.
get
(
2
);
z_tensor
.
layout
.
dtype
=
DType
();
args
.
opr
->
check_or_deduce_dtype_fwd
(
args
.
src_layout
->
dtype
,
args
.
filter_layout
->
dtype
,
z_tensor
.
layout
.
dtype
);
auto
typecvt
=
args
.
handle
->
create_operator
<
TypeCvt
>
();
typecvt
->
exec
(
*
args
.
z_tensor
,
z_tensor
);
}
auto
add
=
args
.
handle
->
create_operator
<
ElemwiseForward
>
();
add
->
param
().
mode
=
Elemwise
::
Param
::
Mode
::
ADD
;
add
->
exec
({
conv_dst_tensor
,
z_tensor
},
conv_dst_tensor
);
}
handle_bias_and_nonlinear
(
args
.
handle
,
args
.
nonlinear_mode
,
&
conv_dst_tensor
,
args
.
dst_tensor
,
args
.
bias_tensor
);
...
...
dnn/src/cuda/conv_bias/cudnn_conv_bias_activation.cpp
浏览文件 @
ba2f0c2e
...
...
@@ -71,11 +71,12 @@ bool ConvBiasForwardImpl::AlgoCUDNNConvBiasActivation::is_available(
return
false
;
}
#if CUDNN_VERSION < 7605
if
(
args
.
src_layout
->
dtype
.
enumv
()
==
DTypeEnum
::
Float16
&&
args
.
dst_layout
->
dtype
.
enumv
()
==
DTypeEnum
::
Float16
&&
param
.
format
==
param
::
ConvBias
::
Format
::
NHWC
)
{
args
.
dst_layout
->
dtype
.
enumv
()
==
DTypeEnum
::
Float16
)
{
return
false
;
}
#endif
#if CUDNN_MAJOR < 8
if
(
m_cudnn_enum
==
CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM
&&
...
...
dnn/test/cuda/conv_bias.cpp
浏览文件 @
ba2f0c2e
...
...
@@ -1293,6 +1293,56 @@ TEST_F(CUDA, CONV_BIAS_FORWARD_TENSORCORE_INT8) {
}
}
TEST_F
(
CUDA
,
CONV_BIAS_ADD_Z_CUDNN_CONVOLUTION
)
{
using
namespace
conv_bias
;
Checker
<
ConvBiasForward
>
checker
(
handle_cuda
());
checker
.
set_before_exec_callback
(
conv_bias
::
ConvBiasAlgoChecker
<
ConvBias
>
(
ConvBiasForward
::
algo_name
<
ConvBias
::
DefaultParam
>
(
"CUDNN:Convolution"
,
{})
.
c_str
()));
NormalRNG
default_rng
;
param
::
ConvBias
param
;
param
.
pad_h
=
param
.
pad_w
=
1
;
using
Format
=
param
::
ConvBias
::
Format
;
using
NLMode
=
param
::
ConvBias
::
NonlineMode
;
param
.
nonlineMode
=
NLMode
::
RELU
;
auto
c
=
[
&
](
DType
dt
)
{
param
.
format
=
Format
::
NCHW
;
/// set epsilon to be 2e-3 to bypass low accuracy of winograd algorithm
float
eps
=
2e-3
;
if
(
dt
==
dtype
::
Float16
())
{
eps
=
1e-2
;
param
.
compute_mode
=
param
::
ConvBias
::
ComputeMode
::
FLOAT32
;
}
checker
.
set_dtype
(
0
,
dt
)
.
set_dtype
(
1
,
dt
)
.
set_dtype
(
2
,
dt
)
.
set_dtype
(
3
,
dt
)
.
set_dtype
(
4
,
dt
)
.
set_rng
(
0
,
&
default_rng
)
.
set_rng
(
1
,
&
default_rng
)
.
set_rng
(
2
,
&
default_rng
)
.
set_rng
(
3
,
&
default_rng
)
.
set_epsilon
(
eps
)
.
set_param
(
param
)
.
execs
({{
16
,
256
,
7
,
7
},
{
256
,
256
,
3
,
3
},
{
1
,
256
,
1
,
1
},
{
16
,
256
,
7
,
7
},
{}});
param
.
format
=
Format
::
NHWC
;
checker
.
set_param
(
param
).
execs
(
{{
16
,
7
,
7
,
256
},
{
256
,
3
,
3
,
256
},
{
1
,
1
,
1
,
256
},
{
16
,
7
,
7
,
256
},
{}});
};
c
(
dtype
::
Float32
());
c
(
dtype
::
Float16
());
}
#if MEGDNN_WITH_BENCHMARK
TEST_F
(
CUDA
,
BENCHMARK_CONV_BIAS_FORWARD_TENSORCORE_INT8
)
{
require_compute_capability
(
7
,
5
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录