-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【Hackathon 4 No.17】Add cummax / cummin API to Paddle #53546
Merged
Merged
Changes from all commits
Commits
Show all changes
31 commits
Select commit
Hold shift + click to select a range
c4f6a10
add API and op for cummax/min
Patrick-Star125 ff601cc
test pass stage 1
Patrick-Star125 fe0e522
format code
Patrick-Star125 90c50d3
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
Patrick-Star125 32cc8c5
fix bug
Patrick-Star125 8c75a58
refine test sample
Patrick-Star125 77cd93e
fix bug
Patrick-Star125 9c8fe91
fix bug
Patrick-Star125 c9ca0df
fix bug
Patrick-Star125 e5102e1
fix bug
Patrick-Star125 cecfa73
fix bug
Patrick-Star125 343d5d9
format
Patrick-Star125 d438ec9
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
Patrick-Star125 f398100
fix bug
Patrick-Star125 1919e10
fix bug
Patrick-Star125 1b0f4e7
fix bug
Patrick-Star125 24c27a3
fix bug
Patrick-Star125 d17bf57
fix bug
Patrick-Star125 b3d1863
fix bug
Patrick-Star125 d8aefa2
fix bug
Patrick-Star125 60f08f6
merge main
Patrick-Star125 1ea7738
fix bug
Patrick-Star125 1ee7d80
format
Patrick-Star125 722912f
format
Patrick-Star125 51042b7
foremat
Patrick-Star125 ec992f1
format
Patrick-Star125 18ccdaf
adjust test file position
Patrick-Star125 401a944
adjust test file position
Patrick-Star125 406ba76
restore test place
Patrick-Star125 4011a80
correct out description
Patrick-Star125 f60a11d
format
Patrick-Star125 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -453,6 +453,26 @@ | |
func : cross_grad | ||
data_type : out_grad | ||
|
||
- backward_op : cummax_grad | ||
forward : cummax(Tensor x, int axis=-1, int dtype=3) -> Tensor(out), Tensor(indices) | ||
args : (Tensor x, Tensor indices, Tensor out_grad, int axis, int dtype) | ||
output : Tensor(x_grad) | ||
infer_meta : | ||
func : UnchangedInferMeta | ||
param: [x] | ||
kernel : | ||
func : cummax_grad | ||
|
||
- backward_op : cummin_grad | ||
forward : cummin(Tensor x, int axis=-1, int dtype=3) -> Tensor(out), Tensor(indices) | ||
args : (Tensor x, Tensor indices, Tensor out_grad, int axis, int dtype) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 同上,kernel也一样 |
||
output : Tensor(x_grad) | ||
infer_meta : | ||
func : UnchangedInferMeta | ||
param: [x] | ||
kernel : | ||
func : cummin_grad | ||
|
||
- backward_op : cumprod_grad | ||
forward : cumprod (Tensor x, int dim) -> Tensor(out) | ||
args : (Tensor x, Tensor out, Tensor out_grad, int dim) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
// Copyright (c) 2023 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/cum_maxmin_grad_kernel.h" | ||
|
||
#include "paddle/phi/backends/cpu/cpu_context.h" | ||
#include "paddle/phi/common/place.h" | ||
#include "paddle/phi/core/kernel_registry.h" | ||
#include "paddle/phi/kernels/funcs/gather_scatter_functor.h" | ||
#include "paddle/phi/kernels/funcs/math_function.h" | ||
|
||
namespace phi { | ||
|
||
template <typename T, typename Context> | ||
void CummaxGradKernel(const Context& dev_ctx, | ||
const DenseTensor& x, | ||
const DenseTensor& indices, | ||
const DenseTensor& out_grad, | ||
int axis, | ||
int dtype, | ||
DenseTensor* x_grad) { | ||
dev_ctx.template Alloc<T>(x_grad); | ||
phi::funcs::SetConstant<Context, T> functor; | ||
functor(dev_ctx, x_grad, static_cast<T>(0)); | ||
if (axis < 0) { | ||
axis = axis + x.dims().size(); | ||
} | ||
auto indices_type = phi::TransToPhiDataType(dtype); | ||
if (indices_type == DataType::INT32) { | ||
phi::funcs::cpu_scatter_add_kernel<T, int32_t>( | ||
*x_grad, axis, indices, out_grad, dev_ctx); | ||
} else if (indices_type == DataType::INT64) { | ||
phi::funcs::cpu_scatter_add_kernel<T, int64_t>( | ||
*x_grad, axis, indices, out_grad, dev_ctx); | ||
} | ||
} | ||
|
||
template <typename T, typename Context> | ||
void CumminGradKernel(const Context& dev_ctx, | ||
const DenseTensor& x, | ||
const DenseTensor& indices, | ||
const DenseTensor& out_grad, | ||
int axis, | ||
int dtype, | ||
DenseTensor* x_grad) { | ||
dev_ctx.template Alloc<T>(x_grad); | ||
phi::funcs::SetConstant<Context, T> functor; | ||
functor(dev_ctx, x_grad, static_cast<T>(0)); | ||
if (axis < 0) { | ||
axis = axis + x.dims().size(); | ||
} | ||
auto indices_type = phi::TransToPhiDataType(dtype); | ||
if (indices_type == DataType::INT32) { | ||
phi::funcs::cpu_scatter_add_kernel<T, int32_t>( | ||
*x_grad, axis, indices, out_grad, dev_ctx); | ||
} else if (indices_type == DataType::INT64) { | ||
phi::funcs::cpu_scatter_add_kernel<T, int64_t>( | ||
*x_grad, axis, indices, out_grad, dev_ctx); | ||
} | ||
} | ||
|
||
} // namespace phi | ||
|
||
PD_REGISTER_KERNEL(cummax_grad, | ||
CPU, | ||
ALL_LAYOUT, | ||
phi::CummaxGradKernel, | ||
float, | ||
double, | ||
int32_t, | ||
int64_t) {} | ||
|
||
PD_REGISTER_KERNEL(cummin_grad, | ||
CPU, | ||
ALL_LAYOUT, | ||
phi::CumminGradKernel, | ||
float, | ||
double, | ||
int32_t, | ||
int64_t) {} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这样是没问题的,这里的x可以优化掉吗,似乎只会用到输入的维度
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
删除后在
test_check_grad
处会报参数数量不匹配,但是我无法通过删除test_check_grad
参数解决这个问题请问删除x是必要的吗,这里x传引用似乎不会有内存额外占用问题
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
看起来是kernel没有同步改?功能上是不必要的,这里主要是能优化掉的话,反向计算的时就少一个对x的引用,可能就能释放掉x