Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
8bf0344
Supported Complex2Real Conversion for Eager Dygraph
jim19930609 Feb 24, 2022
10645f7
Supported Complex2Real Conversion for Eager Dygraph
jim19930609 Feb 24, 2022
b360c23
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Feb 24, 2022
62c5d5e
Enabled complex type promotion test for matmul_v2
jim19930609 Feb 24, 2022
ea46995
pylayer, test=develop
wanghuancoder Feb 25, 2022
884dddb
Fix CI issues
jim19930609 Feb 25, 2022
9f0bf2b
Merged develop branch
jim19930609 Feb 26, 2022
753798e
Support initializing specific grad tensors to zero for selected opera…
jim19930609 Feb 27, 2022
03c6f20
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Feb 28, 2022
530fa56
finish forward, test=develop
wanghuancoder Mar 1, 2022
24dbb6e
create grad node finish, test=develop
wanghuancoder Mar 1, 2022
d98e938
Merged adj_edges_ with GradSlotMeta
jim19930609 Mar 2, 2022
4855da1
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 2, 2022
1ded93a
Fixed monir issue
jim19930609 Mar 2, 2022
e478404
Merge develop
jim19930609 Mar 3, 2022
d07580e
backward finish, start dbg, test=develop
wanghuancoder Mar 3, 2022
bb5c5bc
Adjusted num runs
jim19930609 Mar 3, 2022
e641d8b
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 3, 2022
8d76a7e
fix some bug, and merge develop, test=develop
wanghuancoder Mar 3, 2022
3cb3c8a
Recovered Eager performance tests configurations
jim19930609 Mar 3, 2022
9942837
Recovered Eager performance tests configurations
jim19930609 Mar 3, 2022
96b3a42
finish, test=develop
wanghuancoder Mar 4, 2022
c7688d0
polish, test=develop
wanghuancoder Mar 4, 2022
59d0850
polish, test=develop
wanghuancoder Mar 4, 2022
b661be5
refine, test=develop
wanghuancoder Mar 4, 2022
0b3f6e5
eager, test=develop
wanghuancoder Mar 4, 2022
36f084b
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Mar 4, 2022
6e06997
Adjusted performance tests configurations
jim19930609 Mar 7, 2022
489e146
Fixed Minor Issues with performance tests
jim19930609 Mar 5, 2022
802a860
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Mar 7, 2022
428d455
merge pr 39878
wanghuancoder Mar 7, 2022
c7b600e
[Phi] Fix macro name typo
Aurelius84 Mar 7, 2022
d3e383b
Merge commit 'refs/pull/40204/head' of https://github.com/PaddlePaddl…
wanghuancoder Mar 7, 2022
2688122
support set_materialize_grads, test=develop
wanghuancoder Mar 7, 2022
c58de03
suppotr mark_non_differentiable, test=develop
wanghuancoder Mar 8, 2022
0dfbb39
support once_differentiable, test=develop
wanghuancoder Mar 8, 2022
fb00410
refine, test=develop
wanghuancoder Mar 8, 2022
1c86cec
Merge branch 'develop' into pylayer
wanghuancoder Mar 10, 2022
8534ec8
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Mar 10, 2022
e5eb8e1
refine, test=develop
wanghuancoder Mar 10, 2022
cc67f30
Merge branch 'support_complex' of https://github.com/jim19930609/Padd…
jim19930609 Mar 15, 2022
489580e
Moved out Edge from GradSlotMeta
jim19930609 Mar 15, 2022
96d0960
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 16, 2022
a0a89db
Fixed issues from merge
jim19930609 Mar 16, 2022
b8538de
Fixed typo
jim19930609 Mar 16, 2022
27991c5
Merge branch 'support_complex' of https://github.com/jim19930609/Padd…
jim19930609 Mar 16, 2022
a25d534
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 17, 2022
ae44285
Addressed review comments
jim19930609 Mar 17, 2022
303f06d
Fixed merge issues
jim19930609 Mar 17, 2022
02efb72
Merge branch 'support_complex' of https://github.com/jim19930609/Padd…
jim19930609 Mar 17, 2022
91dbbe3
Fixed minor issues
jim19930609 Mar 17, 2022
bcb7137
Merge branch 'support_complex' of https://github.com/jim19930609/Padd…
jim19930609 Mar 17, 2022
1410253
Fixed minor issue
jim19930609 Mar 18, 2022
908a9a6
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 18, 2022
a08c83d
merge pr39963, test=develop
wanghuancoder Mar 21, 2022
7559ccf
merge, test=develop
wanghuancoder Mar 21, 2022
8ba3c04
merge, test=develop
wanghuancoder Mar 21, 2022
970581c
refine, test=develop
wanghuancoder Mar 21, 2022
bca12a1
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 21, 2022
3a7715c
refine, test=develop
wanghuancoder Mar 21, 2022
17aff34
refine, test=develop
wanghuancoder Mar 21, 2022
b8c311c
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 21, 2022
ed54418
Fixed major issues and enabled auto_prune test cases
jim19930609 Mar 22, 2022
4e31a54
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
jim19930609 Mar 22, 2022
154fdd6
Fixed issues from merge
jim19930609 Mar 22, 2022
7eb8252
Merged develop
jim19930609 Mar 22, 2022
dcbd991
merge PR39963, test=develop
wanghuancoder Mar 23, 2022
d96f201
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Mar 23, 2022
f7fc963
refine, test=develop
wanghuancoder Mar 23, 2022
abc1eee
refine, test=develop
wanghuancoder Mar 23, 2022
7fed773
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Mar 23, 2022
7eee5f8
refine, test=develop
wanghuancoder Mar 23, 2022
73b946a
refine, test=develop
wanghuancoder Mar 25, 2022
2036eca
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
wanghuancoder Mar 28, 2022
9121bd3
refine, test=develop
wanghuancoder Mar 28, 2022
4444d85
Merge branch 'develop' into pylayer
wanghuancoder Mar 28, 2022
c9fdd08
Merge commit 'refs/pull/39989/head' of https://github.com/PaddlePaddl…
pangyoki Mar 28, 2022
a028c63
support inplace for pylayer
pangyoki Mar 28, 2022
61cd0d8
solve conflict
pangyoki Mar 30, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions paddle/fluid/pybind/eager_py_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ namespace py = ::pybind11;
PyTypeObject* p_pylayer_type;
extern PyTypeObject* p_tensor_type;

std::set<paddle::experimental::Tensor*> GetNonDifferentiableNames(
PyObject* obj) {
std::set<paddle::experimental::Tensor*> GetTensorsFromPyObject(PyObject* obj) {
std::set<paddle::experimental::Tensor*> result;
if (obj == nullptr) {
return result;
Expand Down Expand Up @@ -298,8 +297,7 @@ PyObject* pylayer_method_apply(PyObject* cls, PyObject* args,
VLOG(6) << "PyLayer forward function finish...";

if (require_any_grad && trace_backward) {
auto non_differentiable =
GetNonDifferentiableNames(ctx->non_differentiable);
auto non_differentiable = GetTensorsFromPyObject(ctx->non_differentiable);
for (size_t i = 0; i < outputs_autograd_meta.size(); i++) {
for (size_t j = 0; j < outputs_autograd_meta[i].size(); j++) {
if (non_differentiable.find(outputs_tensor[i][j]) !=
Expand All @@ -311,7 +309,22 @@ PyObject* pylayer_method_apply(PyObject* cls, PyObject* args,
}
}

// TODO(pangyoki) add inplace, inplaced tensor is ctx->dirty_tensors
// add inplace strategy, inplaced tensor is ctx->dirty_tensors
auto dirty_tensors = GetTensorsFromPyObject(ctx->dirty_tensors);
for (auto it = dirty_tensors.begin(); it != dirty_tensors.end(); ++it) {
auto dirty_tensor = *it;
auto dirty_tensor_autograd_meta =
egr::EagerUtils::autograd_meta(dirty_tensor);
PADDLE_ENFORCE_EQ(!dirty_tensor_autograd_meta->StopGradient() &&
egr::egr_utils_api::IsLeafTensor(*dirty_tensor),
false, paddle::platform::errors::InvalidArgument(
"Leaf Var (%s) that doesn't stop gradient "
"can't use inplace strategy.",
dirty_tensor->name()));
dirty_tensor->bump_inplace_version();
VLOG(3) << "Tensor(" << dirty_tensor->name()
<< ") uses Inplace Strategy.";
}

auto grad_node = std::make_shared<egr::GradNodePyLayer>(
reinterpret_cast<PyObject*>(ctx), outputs_autograd_meta.size(),
Expand Down
114 changes: 112 additions & 2 deletions python/paddle/fluid/tests/unittests/test_pylayer_op.py
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ def test_pylayer_bk_return_none(self):
self.func_test_pylayer_bk_return_none()
self.func_test_pylayer_bk_return_none()

def test_pylayer_inplace(self):
def func_test_pylayer_inplace(self):
class cus_tanh(EagerPyLayer if in_dygraph_mode() else PyLayer):
@staticmethod
def forward(ctx, x):
Expand Down Expand Up @@ -452,10 +452,115 @@ def forward(self, data):
z.backward()
self.assertTrue(data.grad is not None)

def test_pylayer_inplace_and_leaf_exception(self):
def test_pylayer_inplace(self):
with _test_eager_guard():
self.func_test_pylayer_inplace()
self.func_test_pylayer_inplace()

def test_pylayer_inplace_backward_error(self):
with _test_eager_guard():

class cus_tanh(EagerPyLayer if in_dygraph_mode() else PyLayer):
@staticmethod
def forward(ctx, x):
ctx.mark_dirty(x)
return x

@staticmethod
def backward(ctx, dy):
return dy

class Layer(paddle.nn.Layer):
def __init__(self):
super(Layer, self).__init__()

def forward(self, data):
var_b = data**2
var_c = var_b**2
z = cus_tanh.apply(var_b)
loss = paddle.nn.functional.relu(var_c)
return loss

data = paddle.ones([2, 3], dtype="float64")
data.stop_gradient = False
layer = Layer()
z = layer(data)
with self.assertRaisesRegexp(
RuntimeError,
"received current_inplace_version:{} != inplace_version_snapshot_:{}".
format(1, 0)):
z.backward()

def test_pylayer_inplace_backward_success_1(self):
with _test_eager_guard():

class cus_tanh(EagerPyLayer if in_dygraph_mode() else PyLayer):
@staticmethod
def forward(ctx, x):
ctx.mark_dirty(x)
return x

@staticmethod
def backward(ctx, dy):
return dy

class Layer(paddle.nn.Layer):
def __init__(self):
super(Layer, self).__init__()

def forward(self, data):
var_b = data**2
var_c = cus_tanh.apply(var_b)
var_d = var_c**2
loss = var_d.sum()
return loss

for i in range(2):
data = paddle.ones([2, 3], dtype="float64") / (i + 1)
data.stop_gradient = False
layer = Layer()
z = layer(data)
z.backward()
self.assertTrue(data.grad is not None)

def test_pylayer_inplace_backward_success_2(self):
with _test_eager_guard():

class cus_tanh(EagerPyLayer if in_dygraph_mode() else PyLayer):
@staticmethod
def forward(ctx, x):
ctx.mark_dirty(x)
return x

@staticmethod
def backward(ctx, dy):
return dy

class Layer(paddle.nn.Layer):
def __init__(self):
super(Layer, self).__init__()

def forward(self, data):
var_b = data**2
var_c = cus_tanh.apply(var_b)
var_d = var_c + var_c
loss = var_d.sum()
return loss

for i in range(2):
data = paddle.ones([2, 3], dtype="float64") / (i + 1)
data.stop_gradient = False
layer = Layer()
z = layer(data)
z.backward()
self.assertTrue(data.grad is not None)

def func_test_pylayer_inplace_and_leaf_exception(self):
class cus_pylayer_op(EagerPyLayer if in_dygraph_mode() else PyLayer):
@staticmethod
def forward(ctx, x):
if in_dygraph_mode():
ctx.mark_dirty(x)
return x

@staticmethod
Expand All @@ -478,6 +583,11 @@ def forward(self, data):
with self.assertRaises(ValueError):
z = layer(data)

def test_pylayer_inplace_and_leaf_exception(self):
with _test_eager_guard():
self.func_test_pylayer_inplace_and_leaf_exception()
self.func_test_pylayer_inplace_and_leaf_exception()

def func_test_backward_in_backward(self):
class cus_tanh(EagerPyLayer if in_dygraph_mode() else PyLayer):
@staticmethod
Expand Down