Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
22555e96
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
22555e96
编写于
11月 24, 2022
作者:
Z
zhangyikun02
提交者:
GitHub
11月 24, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add pad3d and pad3d_grad op for xpu, test=kunlun (#48306)
上级
ac8a4b16
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
999 addition
and
1 deletion
+999
-1
cmake/external/xpu.cmake
cmake/external/xpu.cmake
+1
-1
paddle/fluid/platform/device/xpu/xpu2_op_list.h
paddle/fluid/platform/device/xpu/xpu2_op_list.h
+2
-0
paddle/phi/kernels/xpu/pad3d_grad_kernel.cc
paddle/phi/kernels/xpu/pad3d_grad_kernel.cc
+108
-0
paddle/phi/kernels/xpu/pad3d_kernel.cc
paddle/phi/kernels/xpu/pad3d_kernel.cc
+187
-0
python/paddle/fluid/tests/unittests/xpu/test_pad3d_op_xpu.py
python/paddle/fluid/tests/unittests/xpu/test_pad3d_op_xpu.py
+701
-0
未找到文件。
cmake/external/xpu.cmake
浏览文件 @
22555e96
...
...
@@ -10,7 +10,7 @@ set(XPU_RT_LIB_NAME "libxpurt.so")
if
(
NOT DEFINED XPU_BASE_URL
)
set
(
XPU_BASE_URL_WITHOUT_DATE
"https://baidu-kunlun-product.su.bcebos.com/KL-SDK/klsdk-dev"
)
set
(
XPU_BASE_URL
"
${
XPU_BASE_URL_WITHOUT_DATE
}
/2022112
0
"
)
set
(
XPU_BASE_URL
"
${
XPU_BASE_URL_WITHOUT_DATE
}
/2022112
4
"
)
else
()
set
(
XPU_BASE_URL
"
${
XPU_BASE_URL
}
"
)
endif
()
...
...
paddle/fluid/platform/device/xpu/xpu2_op_list.h
浏览文件 @
22555e96
...
...
@@ -433,6 +433,8 @@ XPUOpMap& get_kl2_ops() {
pOpKernelType
(
vartype
::
INT64
,
XPUPlace
())})},
{
"p_norm"
,
XPUKernelSet
({
pOpKernelType
(
vartype
::
FP32
,
XPUPlace
())})},
{
"p_norm_grad"
,
XPUKernelSet
({
pOpKernelType
(
vartype
::
FP32
,
XPUPlace
())})},
{
"pad3d_grad"
,
XPUKernelSet
({
pOpKernelType
(
vartype
::
FP32
,
XPUPlace
())})},
{
"pad3d"
,
XPUKernelSet
({
pOpKernelType
(
vartype
::
FP32
,
XPUPlace
())})},
{
"pool2d_grad"
,
XPUKernelSet
({
pOpKernelType
(
vartype
::
FP32
,
XPUPlace
()),
pOpKernelType
(
vartype
::
FP16
,
XPUPlace
())})},
...
...
paddle/phi/kernels/xpu/pad3d_grad_kernel.cc
0 → 100644
浏览文件 @
22555e96
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "paddle/phi/kernels/pad3d_grad_kernel.h"
#include "paddle/phi/backends/xpu/enforce_xpu.h"
#include "paddle/phi/backends/xpu/xpu_context.h"
#include "paddle/phi/core/kernel_registry.h"
namespace
phi
{
template
<
typename
T
,
typename
Context
>
void
Pad3dGradKernel
(
const
Context
&
dev_ctx
,
const
DenseTensor
&
x
,
const
DenseTensor
&
out_grad
,
const
IntArray
&
paddings
,
const
std
::
string
&
mode
,
float
pad_value
,
const
std
::
string
&
data_format
,
DenseTensor
*
x_grad
)
{
T
value
=
static_cast
<
T
>
(
pad_value
);
std
::
vector
<
int64_t
>
pads
=
paddings
.
GetData
();
auto
*
d_out
=
&
out_grad
;
auto
*
d_in
=
x_grad
;
auto
d_in_dims
=
d_in
->
dims
();
const
T
*
d_out_data
=
d_out
->
data
<
T
>
();
T
*
d_in_data
=
dev_ctx
.
template
Alloc
<
T
>(
d_in
);
bool
is_ncdhw
=
true
;
if
(
data_format
==
"NDHWC"
)
{
is_ncdhw
=
false
;
}
const
int
num
=
d_in_dims
[
0
];
// n
int
channels
=
d_in_dims
[
1
];
// c
int
in_depth
=
d_in_dims
[
2
];
// xd
int
in_height
=
d_in_dims
[
3
];
// xh
int
in_width
=
d_in_dims
[
4
];
// xw
if
(
data_format
==
"NDHWC"
)
{
channels
=
d_in_dims
[
4
];
in_depth
=
d_in_dims
[
1
];
in_height
=
d_in_dims
[
2
];
in_width
=
d_in_dims
[
3
];
}
std
::
vector
<
int
>
pads_xpu
(
6
);
pads_xpu
[
0
]
=
pads
[
4
];
// pf
pads_xpu
[
1
]
=
pads
[
5
];
// pb
pads_xpu
[
2
]
=
pads
[
2
];
// pt
pads_xpu
[
3
]
=
pads
[
3
];
// pd
pads_xpu
[
4
]
=
pads
[
0
];
// pl
pads_xpu
[
5
]
=
pads
[
1
];
// pr
if
(
mode
==
"reflect"
)
{
int
r
=
xpu
::
reflection_pad3d_grad
(
dev_ctx
.
x_context
(),
d_out_data
,
d_in_data
,
num
,
channels
,
in_depth
,
in_height
,
in_width
,
pads_xpu
,
is_ncdhw
);
PADDLE_ENFORCE_XDNN_SUCCESS
(
r
,
"reflection_pad3d_grad"
);
}
else
if
(
mode
==
"replicate"
)
{
int
r
=
xpu
::
replication_pad3d_grad
(
dev_ctx
.
x_context
(),
d_out_data
,
d_in_data
,
num
,
channels
,
in_depth
,
in_height
,
in_width
,
pads_xpu
,
is_ncdhw
);
PADDLE_ENFORCE_XDNN_SUCCESS
(
r
,
"replication_pad3d_grad"
);
}
else
if
(
mode
==
"constant"
)
{
int
r
=
xpu
::
constant_pad3d_grad
(
dev_ctx
.
x_context
(),
d_out_data
,
d_in_data
,
num
,
channels
,
in_depth
,
in_height
,
in_width
,
pads_xpu
,
value
,
is_ncdhw
);
PADDLE_ENFORCE_XDNN_SUCCESS
(
r
,
"constant_pad3d_grad"
);
}
}
}
// namespace phi
PD_REGISTER_KERNEL
(
pad3d_grad
,
XPU
,
ALL_LAYOUT
,
phi
::
Pad3dGradKernel
,
float
)
{}
paddle/phi/kernels/xpu/pad3d_kernel.cc
0 → 100644
浏览文件 @
22555e96
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "paddle/phi/kernels/pad3d_kernel.h"
#include "paddle/phi/backends/xpu/enforce_xpu.h"
#include "paddle/phi/backends/xpu/xpu_context.h"
#include "paddle/phi/core/kernel_registry.h"
namespace
phi
{
template
<
typename
T
,
typename
Context
>
void
Pad3dKernel
(
const
Context
&
dev_ctx
,
const
DenseTensor
&
x
,
const
IntArray
&
paddings
,
const
std
::
string
&
mode
,
float
pad_value
,
const
std
::
string
&
data_format
,
DenseTensor
*
out
)
{
T
value
=
static_cast
<
T
>
(
pad_value
);
std
::
vector
<
int64_t
>
pads
=
paddings
.
GetData
();
auto
in_dims
=
x
.
dims
();
const
T
*
in_data
=
x
.
data
<
T
>
();
bool
is_ncdhw
=
true
;
if
(
data_format
==
"NCDHW"
)
{
out
->
Resize
({
in_dims
[
0
],
in_dims
[
1
],
in_dims
[
2
]
+
pads
[
4
]
+
pads
[
5
],
in_dims
[
3
]
+
pads
[
2
]
+
pads
[
3
],
in_dims
[
4
]
+
pads
[
0
]
+
pads
[
1
]});
}
else
{
is_ncdhw
=
false
;
out
->
Resize
({
in_dims
[
0
],
in_dims
[
1
]
+
pads
[
4
]
+
pads
[
5
],
in_dims
[
2
]
+
pads
[
2
]
+
pads
[
3
],
in_dims
[
3
]
+
pads
[
0
]
+
pads
[
1
],
in_dims
[
4
]});
}
T
*
out_data
=
dev_ctx
.
template
Alloc
<
T
>(
out
);
const
int
num
=
in_dims
[
0
];
// n
int
channels
=
in_dims
[
1
];
// c
int
in_depth
=
in_dims
[
2
];
// xd
int
in_height
=
in_dims
[
3
];
// xh
int
in_width
=
in_dims
[
4
];
// xw
if
(
data_format
==
"NDHWC"
)
{
channels
=
in_dims
[
4
];
in_depth
=
in_dims
[
1
];
in_height
=
in_dims
[
2
];
in_width
=
in_dims
[
3
];
}
if
(
mode
==
"circular"
)
{
PADDLE_THROW
(
phi
::
errors
::
External
(
"XPU is not support circular padding mode in pad3d"
));
}
if
(
mode
==
"reflect"
)
{
PADDLE_ENFORCE_GT
(
in_depth
,
pads
[
4
],
errors
::
InvalidArgument
(
"The depth of Input(X)'s dimension should be "
"greater than pad_front"
" in reflect mode"
", but received depth(%d) and pad_front(%d)."
,
in_depth
,
pads
[
4
]));
PADDLE_ENFORCE_GT
(
in_depth
,
pads
[
5
],
errors
::
InvalidArgument
(
"The depth of Input(X)'s dimension should be "
"greater than pad_back"
" in reflect mode"
", but received depth(%d) and pad_back(%d)."
,
in_depth
,
pads
[
5
]));
PADDLE_ENFORCE_GT
(
in_height
,
pads
[
2
],
errors
::
InvalidArgument
(
"The height of Input(X)'s dimension should be "
"greater than pad_top"
" in reflect mode"
", but received depth(%d) and pad_top(%d)."
,
in_height
,
pads
[
2
]));
PADDLE_ENFORCE_GT
(
in_height
,
pads
[
3
],
errors
::
InvalidArgument
(
"The height of Input(X)'s dimension should be "
"greater than pad_bottom"
" in reflect mode"
", but received depth(%d) and pad_bottom(%d)."
,
in_height
,
pads
[
3
]));
PADDLE_ENFORCE_GT
(
in_width
,
pads
[
0
],
errors
::
InvalidArgument
(
"The width of Input(X)'s dimension should be "
"greater than pad_left"
" in reflect mode"
", but received depth(%d) and pad_left(%d)."
,
in_width
,
pads
[
0
]));
PADDLE_ENFORCE_GT
(
in_width
,
pads
[
1
],
errors
::
InvalidArgument
(
"The width of Input(X)'s dimension should be "
"greater than pad_right"
" in reflect mode"
", but received depth(%d) and pad_right(%d)."
,
in_width
,
pads
[
1
]));
}
else
if
(
mode
==
"replicate"
)
{
PADDLE_ENFORCE_NE
(
in_depth
*
in_height
*
in_width
,
0
,
errors
::
InvalidArgument
(
"The input tensor size can not be 0 for circular "
"or replicate padding mode."
));
}
std
::
vector
<
int
>
pads_xpu
(
6
);
pads_xpu
[
0
]
=
pads
[
4
];
// pf
pads_xpu
[
1
]
=
pads
[
5
];
// pb
pads_xpu
[
2
]
=
pads
[
2
];
// pt
pads_xpu
[
3
]
=
pads
[
3
];
// pd
pads_xpu
[
4
]
=
pads
[
0
];
// pl
pads_xpu
[
5
]
=
pads
[
1
];
// pr
if
(
mode
==
"reflect"
)
{
int
r
=
xpu
::
reflection_pad3d
(
dev_ctx
.
x_context
(),
in_data
,
out_data
,
num
,
channels
,
in_depth
,
in_height
,
in_width
,
pads_xpu
,
is_ncdhw
);
PADDLE_ENFORCE_XDNN_SUCCESS
(
r
,
"reflection_pad3d"
);
}
else
if
(
mode
==
"replicate"
)
{
int
r
=
xpu
::
replication_pad3d
(
dev_ctx
.
x_context
(),
in_data
,
out_data
,
num
,
channels
,
in_depth
,
in_height
,
in_width
,
pads_xpu
,
is_ncdhw
);
PADDLE_ENFORCE_XDNN_SUCCESS
(
r
,
"replication_pad3d"
);
}
else
if
(
mode
==
"constant"
)
{
int
r
=
xpu
::
constant_pad3d
(
dev_ctx
.
x_context
(),
in_data
,
out_data
,
num
,
channels
,
in_depth
,
in_height
,
in_width
,
pads_xpu
,
value
,
is_ncdhw
);
PADDLE_ENFORCE_XDNN_SUCCESS
(
r
,
"constant_pad3d"
);
}
}
}
// namespace phi
PD_REGISTER_KERNEL
(
pad3d
,
XPU
,
ALL_LAYOUT
,
phi
::
Pad3dKernel
,
float
)
{}
python/paddle/fluid/tests/unittests/xpu/test_pad3d_op_xpu.py
0 → 100644
浏览文件 @
22555e96
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录