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

Align getitem with pytorch when index on different devices #7977

Merged
merged 109 commits into from
Apr 30, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
7510974
fix getitem
mosout Apr 7, 2022
d5dd6f1
Merge remote-tracking branch 'upstream/master' into align_index
mosout Apr 7, 2022
af1955b
refine
mosout Apr 8, 2022
31106ce
Merge branch 'master' of github.com:Oneflow-Inc/oneflow into align_index
mosout Apr 8, 2022
f84e897
Merge branch 'master' into align_index
mergify[bot] Apr 11, 2022
e08d26a
Merge branch 'master' into align_index
mergify[bot] Apr 11, 2022
f0dfd6f
Merge branch 'master' into align_index
mergify[bot] Apr 11, 2022
c4b345e
fix tidy
mosout Apr 12, 2022
08bf064
Merge branch 'align_index' of github.com:mosout/oneflow into align_index
mosout Apr 12, 2022
4d1b96e
Merge branch 'master' into align_index
mergify[bot] Apr 12, 2022
ad93b71
Merge branch 'master' into align_index
mergify[bot] Apr 13, 2022
d8acfa3
Merge branch 'master' into align_index
mergify[bot] Apr 13, 2022
70504a4
refine test
mosout Apr 14, 2022
877cdf6
Merge branch 'align_index' of github.com:mosout/oneflow into align_index
mosout Apr 14, 2022
59ff7e6
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
b9ddc5e
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
02043cf
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
1e690fd
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
fa53f4a
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
84f738e
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
a25174d
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
2b68ba9
Merge branch 'master' into align_index
mergify[bot] Apr 14, 2022
02bba92
Merge branch 'master' into align_index
mergify[bot] Apr 15, 2022
73e6d6d
reformat
mosout Apr 15, 2022
fed77ab
Merge branch 'align_index' of github.com:mosout/oneflow into align_index
mosout Apr 15, 2022
16178fc
Merge branch 'master' into align_index
mergify[bot] Apr 15, 2022
ea38932
Merge branch 'master' into align_index
mergify[bot] Apr 15, 2022
0132cff
Merge branch 'master' into align_index
mergify[bot] Apr 15, 2022
627f44e
Merge branch 'master' into align_index
mergify[bot] Apr 15, 2022
6bcf846
Merge branch 'master' into align_index
mergify[bot] Apr 15, 2022
c754a99
Merge branch 'master' into align_index
mergify[bot] Apr 16, 2022
9ddff80
Merge branch 'master' into align_index
mergify[bot] Apr 16, 2022
785a63c
Merge branch 'master' into align_index
mergify[bot] Apr 17, 2022
c23e07a
Merge branch 'master' into align_index
mergify[bot] Apr 17, 2022
91dc371
Merge branch 'master' into align_index
mergify[bot] Apr 17, 2022
53c3433
Merge branch 'master' into align_index
mergify[bot] Apr 17, 2022
bfbb085
Merge branch 'master' into align_index
mergify[bot] Apr 17, 2022
59e09c4
Merge branch 'master' into align_index
mergify[bot] Apr 18, 2022
a8d0484
Merge branch 'master' into align_index
mergify[bot] Apr 18, 2022
910eec7
Merge branch 'master' into align_index
mergify[bot] Apr 18, 2022
40399a6
Merge branch 'master' into align_index
mergify[bot] Apr 18, 2022
aa66202
Merge branch 'master' into align_index
mergify[bot] Apr 19, 2022
4ef104e
Merge branch 'master' into align_index
mergify[bot] Apr 19, 2022
8b2afe7
Merge branch 'master' into align_index
mergify[bot] Apr 19, 2022
14bc548
Merge branch 'master' into align_index
mergify[bot] Apr 19, 2022
7f13b4b
Merge branch 'master' into align_index
mergify[bot] Apr 19, 2022
0e5d52b
Merge branch 'master' into align_index
mergify[bot] Apr 19, 2022
a4cfa98
Merge branch 'master' into align_index
mergify[bot] Apr 20, 2022
0b28f51
fix test
mosout Apr 20, 2022
3796315
Merge branch 'align_index' of github.com:mosout/oneflow into align_index
mosout Apr 20, 2022
58cb492
Merge branch 'master' into align_index
mergify[bot] Apr 20, 2022
90edd4b
Merge branch 'master' into align_index
mergify[bot] Apr 20, 2022
8f96554
Merge branch 'master' into align_index
mergify[bot] Apr 20, 2022
ddb8e1f
Merge branch 'master' into align_index
mergify[bot] Apr 21, 2022
41855e8
Merge branch 'master' into align_index
mergify[bot] Apr 21, 2022
aaa8efb
Merge branch 'master' into align_index
mergify[bot] Apr 21, 2022
3879744
Merge branch 'master' into align_index
mergify[bot] Apr 21, 2022
b5186bf
Merge branch 'master' into align_index
mergify[bot] Apr 21, 2022
94bb669
Merge branch 'master' into align_index
mergify[bot] Apr 22, 2022
17bf0c6
Merge branch 'master' into align_index
mergify[bot] Apr 22, 2022
339bca1
Merge branch 'master' into align_index
mergify[bot] Apr 22, 2022
f1d3512
Merge branch 'master' into align_index
mergify[bot] Apr 22, 2022
1b24823
Merge branch 'master' into align_index
mergify[bot] Apr 23, 2022
9458773
Merge branch 'master' into align_index
mergify[bot] Apr 23, 2022
bac8f48
Merge branch 'master' into align_index
mergify[bot] Apr 23, 2022
fae81ae
Merge branch 'master' into align_index
mergify[bot] Apr 23, 2022
c65a3fd
Merge branch 'master' into align_index
mergify[bot] Apr 23, 2022
8904ac3
Merge branch 'master' into align_index
mergify[bot] Apr 23, 2022
2a2a723
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
6f01657
fix
mosout Apr 24, 2022
e4b2852
Merge branch 'align_index' of github.com:mosout/oneflow into align_index
mosout Apr 24, 2022
03a78be
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
45fa80d
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
c7549f6
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
7e6cfc8
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
3a806dc
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
7477205
Merge branch 'master' into align_index
mergify[bot] Apr 24, 2022
a346199
Merge branch 'master' into align_index
mergify[bot] Apr 25, 2022
b223d57
Merge branch 'master' into align_index
mergify[bot] Apr 25, 2022
bcdb4fd
Merge branch 'master' into align_index
mergify[bot] Apr 25, 2022
8299397
Merge branch 'master' into align_index
mergify[bot] Apr 25, 2022
f4e7238
Merge branch 'master' into align_index
mergify[bot] Apr 26, 2022
ccee546
Merge branch 'master' into align_index
mergify[bot] Apr 26, 2022
83b374e
Merge branch 'master' into align_index
mergify[bot] Apr 26, 2022
a7a28cd
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
ac2c6e3
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
1a55382
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
a6381c4
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
ddcac1b
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
da20acc
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
86f23f9
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
7a926ab
Merge branch 'master' into align_index
mergify[bot] Apr 27, 2022
136b817
Merge branch 'master' into align_index
mergify[bot] Apr 28, 2022
53e127e
Merge branch 'master' into align_index
mergify[bot] Apr 28, 2022
78243f7
Merge branch 'master' into align_index
mergify[bot] Apr 28, 2022
eb1f1ab
Merge branch 'master' into align_index
mergify[bot] Apr 28, 2022
0609858
Merge branch 'master' into align_index
mosout Apr 28, 2022
167c561
Merge branch 'master' into align_index
mergify[bot] Apr 28, 2022
5e56ae2
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
72320d2
Merge branch 'master' into align_index
mosout Apr 29, 2022
c8c9ab2
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
554033b
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
6028fb4
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
07c33e4
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
4f8eead
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
787b5e1
Merge branch 'master' into align_index
mergify[bot] Apr 29, 2022
c8c1c14
Merge branch 'master' into align_index
mergify[bot] Apr 30, 2022
ad81512
Merge branch 'master' into align_index
mergify[bot] Apr 30, 2022
f4e0c20
Merge branch 'master' into align_index
mergify[bot] Apr 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
14 changes: 13 additions & 1 deletion oneflow/core/functional/impl/array_functor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1840,7 +1840,19 @@ class TensorGetItemFunctor {

Shape shape(DimVector(target_dims.begin(), target_dims.end()));
if (shape != *(result->shape())) { result = JUST(Reshape(result, shape)); }
if (!tensor_indices.empty()) { result = JUST(ApplyAdvancedIndexing(result, tensor_indices)); }
if (!tensor_indices.empty()) {
const auto x_device = JUST(x->device());
for (int64_t i = 0; i < tensor_indices.size(); ++i) {
const auto tensor_index = tensor_indices.at(i);
if (tensor_index == nullptr) { continue; }
const auto tensor_index_device = JUST(tensor_index->device());
if ((tensor_index_device->type() != x_device->type())
|| (tensor_index_device->device_id() != x_device->device_id())) {
tensor_indices.at(i) = JUST(Copy(tensor_index, x_device->type(), x_device->device_id()));
}
}
result = JUST(ApplyAdvancedIndexing(result, tensor_indices));
}

// TODO(): Returns a view of tensor `x`.
if (result == x) { result = JUST(Identity(x)); }
Expand Down
16 changes: 16 additions & 0 deletions python/oneflow/test/tensor/test_tensor_indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,22 @@ def test_list_indexing_using_scalar_tensor(test_case):
for arg in GenArgList(arg_dict):
arg[0](test_case, *arg[1:])

def test_indecies_on_different_devices_1_gpu(test_case):
x = flow.ones(3, 10)
y = flow.ones(3, 10, device=flow.device("cuda:0"))

x_idx = [flow.tensor([1, 2]), flow.tensor([2, 0], device=flow.device("cuda:0"))]
y_idx = [flow.tensor([1, 2], device=flow.device("cuda:0")), flow.tensor([2, 0])]

test_case.assertTrue(np.allclose(x[x_idx].numpy(), np.array([1, 1])))
test_case.assertTrue(np.allclose(y[y_idx].numpy(), np.array([1, 1])))

@flow.unittest.skip_unless_1n2d()
def test_indecies_on_different_devices_2_gpu(test_case):
x = flow.ones(3, 10, device=flow.device("cuda:0"))
idx = [flow.tensor([1, 2], device=flow.device("cuda:1")), flow.tensor([2, 0])]
test_case.assertTrue(np.allclose(x[idx].numpy(), np.array([1, 1])))


if __name__ == "__main__":
unittest.main()