Skip to content
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

Fix concat backward bug #5443

Merged
merged 65 commits into from
Jul 9, 2021
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
7af6ddb
add argmax test
BBuf May 25, 2021
b354d19
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 25, 2021
32200ae
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 25, 2021
cbccc2f
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 26, 2021
871897a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 27, 2021
c293851
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 27, 2021
e8ca65b
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 27, 2021
09eaaef
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 28, 2021
40f5639
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 28, 2021
9e4ca51
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 28, 2021
39e6d18
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 29, 2021
7e99d9a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 31, 2021
17d2dbe
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 31, 2021
e57fe0d
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 31, 2021
c3d2b8b
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf May 31, 2021
c480351
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 1, 2021
57dfa4f
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 2, 2021
13aae88
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 2, 2021
ce4e87c
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 2, 2021
6b9f771
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 3, 2021
bf9b9db
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 3, 2021
72a1d52
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 4, 2021
2550d8a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 4, 2021
47f3591
fix ci error
BBuf Jun 4, 2021
f9ab3d1
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 6, 2021
69d8053
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 6, 2021
bb4da0a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 6, 2021
6a6cb05
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 7, 2021
4c535c8
fix docstring warning
BBuf Jun 7, 2021
f2c8da7
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 7, 2021
aeb55f1
fix tensor greater and less bug
BBuf Jun 7, 2021
f16eb2b
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 8, 2021
1cbb8de
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 9, 2021
c7b50e4
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 9, 2021
ac39c72
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 10, 2021
50923e7
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 11, 2021
e765c35
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 11, 2021
ed53533
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 11, 2021
6e8b1aa
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 12, 2021
70c2e08
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 15, 2021
fa279db
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 15, 2021
e8ae905
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 16, 2021
9355b58
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 16, 2021
f56ca4a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 16, 2021
789060a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 17, 2021
b5744f9
fix conflict
BBuf Jun 17, 2021
b2bb1b2
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 17, 2021
4e0569a
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jun 18, 2021
e08b408
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jul 5, 2021
e5b1262
add test_flow_xxx_against_pytorch func
BBuf Jul 5, 2021
0861823
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jul 5, 2021
45288da
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jul 5, 2021
5926644
fix conflict
BBuf Jul 8, 2021
c00612e
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jul 9, 2021
3361a9b
Merge branch 'master' of https://github.com/Oneflow-Inc/oneflow
BBuf Jul 9, 2021
9c9446e
fix concat backward bug
BBuf Jul 9, 2021
f414007
auto format by CI
oneflow-ci-bot Jul 9, 2021
f07e95a
format
BBuf Jul 9, 2021
b9138ac
Merge branch 'fix_concat_backward_bug' of https://github.com/Oneflow-…
BBuf Jul 9, 2021
6548907
Merge branch 'master' into fix_concat_backward_bug
oneflow-ci-bot Jul 9, 2021
2477160
Add autograd engine warning (#5444)
BBuf Jul 9, 2021
e33873a
Merge branch 'master' into fix_concat_backward_bug
oneflow-ci-bot Jul 9, 2021
81a5076
Merge branch 'master' into fix_concat_backward_bug
oneflow-ci-bot Jul 9, 2021
9b8dbce
Merge branch 'master' into fix_concat_backward_bug
oneflow-ci-bot Jul 9, 2021
f6a3035
Merge branch 'master' into fix_concat_backward_bug
oneflow-ci-bot Jul 9, 2021
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
6 changes: 5 additions & 1 deletion oneflow/core/autograd/autograd_engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,11 @@ Maybe<bool> FunctionNode::Apply(bool create_graph) {
JUST((*backward_fn_)(output_grads, &input_grads, create_graph));
for (int i = 0; i < input_meta_datas_.size(); ++i) {
if (input_grads.at(i)) {
CHECK_NOTNULL_OR_RETURN(input_meta_datas_.at(i));
CHECK_NOTNULL_OR_RETURN(input_meta_datas_.at(i))
<< op_name_
<< " calculate grad for tensor which requires_grad is False. Please submit an issue in "
"`https://github.com/Oneflow-Inc/oneflow/issues` and we will fix it as soon as "
"possiable";
JUST(input_meta_datas_.at(i)->now_grad_arg()->PushPartialTensor(input_grads.at(i)));
}
}
Expand Down
16 changes: 5 additions & 11 deletions oneflow/core/autograd/gradient_funcs/concat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace oneflow {
namespace one {

struct ConcatInterpState : public OpExprInterpState {
bool requires_grad;
std::vector<bool> requires_grad;
int64_t axis;
int64_t input_num;
};
Expand Down Expand Up @@ -57,14 +57,8 @@ Maybe<void> Concat::Init(const OpExpr& op) {

Maybe<void> Concat::Capture(ConcatInterpState* ctx, const TensorTuple& inputs,
const TensorTuple& outputs, const AttrMap& attrs) const {
ctx->requires_grad = false;
for (const auto& input : inputs) {
if (input->requires_grad()) {
ctx->requires_grad = true;
break;
}
}
if (!ctx->requires_grad) { return Maybe<void>::Ok(); }
ctx->requires_grad.resize(inputs.size());
for (int i = 0; i < inputs.size(); ++i) { ctx->requires_grad[i] = inputs.at(i)->requires_grad(); }

ComposedAttrMap composed_attrs(attrs, base_attrs_);
ctx->axis = JUST(composed_attrs.GetAttr<int64_t>("axis"));
Expand All @@ -75,7 +69,6 @@ Maybe<void> Concat::Capture(ConcatInterpState* ctx, const TensorTuple& inputs,

Maybe<void> Concat::Apply(const ConcatInterpState* ctx, const TensorTuple& out_grads,
TensorTuple* in_grads) const {
if (!ctx->requires_grad) { return Maybe<void>::Ok(); }
CHECK_EQ_OR_RETURN(out_grads.size(), 1);
in_grads->resize(ctx->input_num);
TensorTuple inputs(ctx->input_num + 1);
Expand All @@ -86,7 +79,8 @@ Maybe<void> Concat::Apply(const ConcatInterpState* ctx, const TensorTuple& out_g
const auto& results = JUST(OpInterpUtil::Dispatch<TensorTuple>(*grad_op_, inputs, concat_attrs));
CHECK_EQ_OR_RETURN(results->size(), ctx->input_num);

for (int i = 0; i < ctx->input_num; ++i) { in_grads->at(i) = results->at(i); }
for (int i = 0; i < ctx->input_num; ++i)
if (ctx->requires_grad.at(i)) { in_grads->at(i) = results->at(i); }
return Maybe<void>::Ok();
}

Expand Down
23 changes: 23 additions & 0 deletions oneflow/python/test/modules/test_concat.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,28 @@ def _test_concat_with_three_tensor_backward(test_case, device):
)


def _test_concat_grad_and_no_grad(test_case, device):
input1 = flow.Tensor(
np.random.randn(2, 6, 5, 3),
dtype=flow.float32,
device=flow.device(device),
requires_grad=True,
)
input2 = flow.Tensor(
np.random.randn(2, 6, 5, 3),
dtype=flow.float32,
device=flow.device(device),
requires_grad=False,
)

of_out = flow.cat([input1, input2], dim=1)
of_out = of_out.sum()
of_out.backward()
test_case.assertTrue(
np.allclose(input1.grad.numpy(), np.ones((2, 6, 5, 3)), 1e-4, 1e-4)
)


@unittest.skipIf(
not flow.unittest.env.eager_execution_enabled(),
".numpy() doesn't work in lazy mode",
Expand All @@ -110,6 +132,7 @@ def test_concat(test_case):
_test_concat_with_axis_one,
_test_concat_with_three_tensor,
_test_concat_with_three_tensor_backward,
_test_concat_grad_and_no_grad,
]
arg_dict["device"] = ["cpu", "cuda"]
for arg in GenArgList(arg_dict):
Expand Down