Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
d176196b
Commit
d176196b
authored
Dec 08, 2022
by
charlie
Browse files
Merge branch 'develop' of github.com:ROCmSoftwarePlatform/AMDMIGraphX into dyn_pad
parents
2d192cc9
8e7d2efe
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
149 additions
and
9 deletions
+149
-9
src/include/migraphx/op/softmax.hpp
src/include/migraphx/op/softmax.hpp
+5
-5
src/targets/ref/lowering.cpp
src/targets/ref/lowering.cpp
+4
-4
test/onnx/gen_onnx.py
test/onnx/gen_onnx.py
+10
-0
test/onnx/onnx_test.cpp
test/onnx/onnx_test.cpp
+17
-0
test/onnx/softmax_dyn_test.onnx
test/onnx/softmax_dyn_test.onnx
+0
-0
test/op_shape_test.cpp
test/op_shape_test.cpp
+50
-0
test/ref_ops_test.cpp
test/ref_ops_test.cpp
+63
-0
No files found.
src/include/migraphx/op/softmax.hpp
View file @
d176196b
...
@@ -53,15 +53,15 @@ struct softmax
...
@@ -53,15 +53,15 @@ struct softmax
std
::
string
name
()
const
{
return
"softmax"
;
}
std
::
string
name
()
const
{
return
"softmax"
;
}
shape
normalize_compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
shape
normalize_compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
{
{
check_shapes
{
inputs
,
*
this
}.
has
(
1
);
check_shapes
{
inputs
,
*
this
,
true
}.
has
(
1
);
if
(
inputs
.
at
(
0
).
packed
())
auto
s0
=
inputs
[
0
];
if
(
s0
.
dynamic
()
or
s0
.
packed
())
{
{
return
inputs
.
at
(
0
)
;
return
s0
;
}
}
else
else
{
{
auto
lens
=
inputs
.
at
(
0
).
lens
();
return
{
s0
.
type
(),
s0
.
lens
()};
return
{
inputs
.
at
(
0
).
type
(),
lens
};
}
}
}
}
...
...
src/targets/ref/lowering.cpp
View file @
d176196b
...
@@ -449,10 +449,10 @@ struct ref_softmax : auto_register_op<ref_softmax<Op>>
...
@@ -449,10 +449,10 @@ struct ref_softmax : auto_register_op<ref_softmax<Op>>
{
{
return
op
.
normalize_compute_shape
(
inputs
);
return
op
.
normalize_compute_shape
(
inputs
);
}
}
argument
compute
(
context
&
,
const
shape
&
output_shape
,
std
::
vector
<
argument
>
args
)
const
argument
compute
(
context
&
,
const
dyn_output
&
dyn_out
,
std
::
vector
<
argument
>
args
)
const
{
{
argument
result
{
out
put_shape
};
argument
result
{
dyn_out
.
com
put
ed
_shape
};
auto
batch_lens
=
out
put_shape
.
lens
();
auto
batch_lens
=
dyn_out
.
com
put
ed
_shape
.
lens
();
int64_t
tuned_axis
=
tune_axis
(
args
[
0
].
get_shape
().
lens
().
size
(),
op
.
axis
,
op
.
name
());
int64_t
tuned_axis
=
tune_axis
(
args
[
0
].
get_shape
().
lens
().
size
(),
op
.
axis
,
op
.
name
());
std
::
size_t
n_dims
=
batch_lens
[
tuned_axis
];
std
::
size_t
n_dims
=
batch_lens
[
tuned_axis
];
batch_lens
[
tuned_axis
]
=
1
;
batch_lens
[
tuned_axis
]
=
1
;
...
@@ -475,7 +475,7 @@ struct ref_softmax : auto_register_op<ref_softmax<Op>>
...
@@ -475,7 +475,7 @@ struct ref_softmax : auto_register_op<ref_softmax<Op>>
for
(
std
::
size_t
j
=
0
;
j
<
n_dims
;
++
j
)
for
(
std
::
size_t
j
=
0
;
j
<
n_dims
;
++
j
)
{
{
idx
[
tuned_axis
]
=
j
;
idx
[
tuned_axis
]
=
j
;
std
::
size_t
index
=
out
put_shape
.
index
(
idx
);
std
::
size_t
index
=
dyn_out
.
com
put
ed
_shape
.
index
(
idx
);
output
[
index
]
=
std
::
exp
(
input
[
index
]
-
batch_max
[
i
]);
output
[
index
]
=
std
::
exp
(
input
[
index
]
-
batch_max
[
i
]);
}
}
...
...
test/onnx/gen_onnx.py
View file @
d176196b
...
@@ -5846,6 +5846,16 @@ def softmax_nonstd_input_test():
...
@@ -5846,6 +5846,16 @@ def softmax_nonstd_input_test():
return
([
node0
,
node1
],
[
x
],
[
y
])
return
([
node0
,
node1
],
[
x
],
[
y
])
@
onnx_test
def
softmax_dyn_test
():
x
=
helper
.
make_tensor_value_info
(
'0'
,
TensorProto
.
FLOAT
,
[
None
,
3
,
4
,
4
])
y
=
helper
.
make_tensor_value_info
(
'1'
,
TensorProto
.
FLOAT
,
[
None
,
3
,
4
,
4
])
node
=
onnx
.
helper
.
make_node
(
'Softmax'
,
inputs
=
[
'0'
],
outputs
=
[
'1'
])
return
([
node
],
[
x
],
[
y
])
@
onnx_test
@
onnx_test
def
softsign_test
():
def
softsign_test
():
x
=
helper
.
make_tensor_value_info
(
'x'
,
TensorProto
.
FLOAT
,
[
5
])
x
=
helper
.
make_tensor_value_info
(
'x'
,
TensorProto
.
FLOAT
,
[
5
])
...
...
test/onnx/onnx_test.cpp
View file @
d176196b
...
@@ -5677,6 +5677,23 @@ TEST_CASE(softmax_nonstd_input_test)
...
@@ -5677,6 +5677,23 @@ TEST_CASE(softmax_nonstd_input_test)
EXPECT
(
p
==
prog
);
EXPECT
(
p
==
prog
);
}
}
TEST_CASE
(
softmax_dyn_test
)
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
l0
=
mm
->
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
,
0
},
{
3
,
3
,
0
},
{
4
,
4
,
0
},
{
4
,
4
,
0
}}});
auto
ret
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"softmax"
,
{{
"axis"
,
-
1
}}),
l0
);
mm
->
add_return
({
ret
});
migraphx
::
onnx_options
options
;
options
.
default_dyn_dim_value
=
{
1
,
4
,
0
};
auto
prog
=
migraphx
::
parse_onnx
(
"softmax_dyn_test.onnx"
,
options
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
softplus_test
)
TEST_CASE
(
softplus_test
)
{
{
migraphx
::
program
p
;
migraphx
::
program
p
;
...
...
test/onnx/softmax_dyn_test.onnx
0 → 100644
View file @
d176196b
File added
test/op_shape_test.cpp
View file @
d176196b
...
@@ -2163,6 +2163,56 @@ TEST_CASE(slice_shape)
...
@@ -2163,6 +2163,56 @@ TEST_CASE(slice_shape)
TEST_CASE
(
softmax
)
{
test_softmax_variations
<
migraphx
::
op
::
softmax
>
();
}
TEST_CASE
(
softmax
)
{
test_softmax_variations
<
migraphx
::
op
::
softmax
>
();
}
TEST_CASE
(
softmax_dyn0
)
{
migraphx
::
shape
input
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
,
0
},
{
3
,
3
,
0
},
{
4
,
4
,
0
},
{
5
,
5
,
0
}}};
expect_shape
(
input
,
migraphx
::
make_op
(
"softmax"
,
{{
"axis"
,
0
}}),
input
);
}
TEST_CASE
(
softmax_dyn1
)
{
migraphx
::
shape
input
{
migraphx
::
shape
::
float_type
,
{{
1
,
1
,
0
},
{
3
,
3
,
0
},
{
4
,
6
,
0
},
{
5
,
8
,
6
}}};
expect_shape
(
input
,
migraphx
::
make_op
(
"softmax"
,
{{
"axis"
,
0
}}),
input
);
}
TEST_CASE
(
test_argmax
)
{
{
migraphx
::
shape
input
{
migraphx
::
shape
::
half_type
,
{
2
,
3
,
4
,
5
}};
expect_shape
(
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
1
,
3
,
4
,
5
}},
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
0
}}),
input
);
}
{
migraphx
::
shape
input
{
migraphx
::
shape
::
half_type
,
{
2
,
3
,
4
,
5
}};
expect_shape
(
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
2
,
1
,
4
,
5
}},
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
1
}}),
input
);
}
{
migraphx
::
shape
input
{
migraphx
::
shape
::
half_type
,
{
2
,
3
,
4
,
5
}};
expect_shape
(
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
2
,
3
,
1
,
5
}},
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
2
}}),
input
);
}
{
migraphx
::
shape
input
{
migraphx
::
shape
::
half_type
,
{
2
,
3
,
4
,
5
}};
expect_shape
(
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
2
,
3
,
4
,
1
}},
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
3
}}),
input
);
}
{
migraphx
::
shape
input
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}};
throws_shape
(
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
4
}}),
input
);
}
}
TEST_CASE
(
test_argmin
)
TEST_CASE
(
test_argmin
)
{
{
{
{
...
...
test/ref_ops_test.cpp
View file @
d176196b
...
@@ -7214,6 +7214,69 @@ TEST_CASE(softmax_test)
...
@@ -7214,6 +7214,69 @@ TEST_CASE(softmax_test)
EXPECT
(
migraphx
::
verify_range
(
results_vector
,
s
));
EXPECT
(
migraphx
::
verify_range
(
results_vector
,
s
));
}
}
TEST_CASE
(
softmax_dyn_test
)
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
migraphx
::
shape
a_shape
{
migraphx
::
shape
::
float_type
,
{{
1
,
10
,
0
},
{
1
,
3
,
3
},
{
4
,
4
,
0
},
{
2
,
2
,
2
}}};
auto
al
=
mm
->
add_parameter
(
"a"
,
a_shape
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"softmax"
,
{{
"axis"
,
1
}}),
al
);
p
.
compile
(
migraphx
::
ref
::
target
{});
std
::
vector
<
float
>
a
=
{
-
5.61869681e-01
,
9.07827199e-01
,
1.29255986e+00
,
3.18533443e-02
,
-
1.22183852e-03
,
-
2.83830553e-01
,
-
1.03245842e+00
,
-
9.28322077e-01
,
-
8.82696748e-01
,
1.11327164e-01
,
-
9.20038462e-01
,
8.47388089e-01
,
2.51734018e-01
,
1.50563884e+00
,
2.23056650e+00
,
-
6.17576987e-02
,
-
1.00264274e-01
,
-
6.10369384e-01
,
1.17537189e+00
,
-
2.51560897e-01
,
-
8.50333512e-01
,
-
8.03578615e-01
,
-
6.51194930e-01
,
-
2.58137047e-01
,
4.65528190e-01
,
3.23284641e-02
,
-
1.54700470e+00
,
1.38096774e+00
,
5.39869189e-01
,
-
7.56884992e-01
,
1.81503093e+00
,
-
2.11269641e+00
,
1.92466557e+00
,
1.77230799e+00
,
2.21660900e+00
,
1.56777036e+00
,
-
2.08995026e-03
,
3.50566894e-01
,
-
1.15042710e+00
,
-
1.18577778e+00
,
8.90633047e-01
,
-
6.63949102e-02
,
1.44661188e+00
,
1.59215283e+00
,
-
2.56262213e-01
,
9.39079225e-01
,
4.07298543e-02
,
3.86590779e-01
,
6.09607756e-01
,
8.22331488e-01
,
-
2.82126725e-01
,
-
9.49052632e-01
,
-
4.24012303e-01
,
-
5.32990396e-01
,
-
3.18386006e+00
,
3.27092171e-01
,
-
1.33315325e+00
,
3.62459183e-01
,
3.74710828e-01
,
-
1.30302286e+00
,
1.79680198e-01
,
-
4.51832324e-01
,
4.34282750e-01
,
-
7.09520102e-01
,
6.20333970e-01
,
-
1.28712380e+00
,
2.04130828e-01
,
-
7.70607769e-01
,
1.61889160e+00
,
-
1.50951004e+00
,
-
4.10505563e-01
,
-
3.56566496e-02
,
-
1.29747534e+00
,
-
1.49967879e-01
,
7.77626812e-01
,
-
8.28408226e-02
,
2.73412596e-02
,
5.79780899e-03
,
9.87900198e-02
,
-
7.95276761e-01
,
-
1.38536084e+00
,
-
6.63573861e-01
,
3.89783204e-01
,
-
1.30670881e+00
,
-
7.62425125e-01
,
-
4.04883057e-01
,
6.24344349e-01
,
3.68128955e-01
,
-
1.01577950e+00
,
-
3.06715906e-01
,
5.67961395e-01
,
2.98198581e-01
,
-
1.63613629e+00
,
-
3.75131965e-01
,
-
6.75393403e-01
,
2.59172034e+00
,
6.75538957e-01
,
9.07939598e-02
,
1.92257717e-01
,
-
1.21592450e+00
,
-
2.73682117e-01
,
1.25232983e+00
,
-
1.39969170e+00
,
-
1.91483587e-01
,
2.57732719e-01
,
3.10056299e-01
,
1.41833842e+00
,
-
1.81386679e-01
,
3.92868072e-01
,
-
8.14771175e-01
,
2.02392387e+00
,
-
9.42091495e-02
,
-
3.77683818e-01
,
2.05638766e+00
,
2.93796062e-01
,
-
6.02131486e-01
,
2.70461679e-01
,
-
8.92358482e-01
,
1.04388881e+00
,
2.66154885e-01
};
migraphx
::
parameter_map
params
;
migraphx
::
shape
input_fixed_shape
{
migraphx
::
shape
::
float_type
,
{
5
,
3
,
4
,
2
}};
params
[
"a"
]
=
migraphx
::
argument
(
input_fixed_shape
,
a
.
data
());
auto
result
=
p
.
eval
(
params
).
back
();
std
::
vector
<
float
>
results_vector
(
120
);
result
.
visit
([
&
](
auto
output
)
{
results_vector
.
assign
(
output
.
begin
(),
output
.
end
());
});
std
::
vector
<
float
>
s
=
{
0.30191708
,
0.59879845
,
0.50029165
,
0.24915339
,
0.36823985
,
0.13190967
,
0.0349741
,
0.18750034
,
0.21905553
,
0.27000085
,
0.0547399
,
0.56318235
,
0.47422904
,
0.78964758
,
0.91381913
,
0.44601166
,
0.47902739
,
0.13120073
,
0.4449684
,
0.18766427
,
0.15753111
,
0.07844277
,
0.05120674
,
0.36648798
,
0.14637007
,
0.13152322
,
0.01560997
,
0.29065287
,
0.49196178
,
0.10550152
,
0.81890774
,
0.06369215
,
0.62972021
,
0.74931765
,
0.67285055
,
0.35034987
,
0.28612873
,
0.31931475
,
0.04220394
,
0.16093165
,
0.22390974
,
0.11915915
,
0.3115395
,
0.35899726
,
0.22190949
,
0.57518375
,
0.13888834
,
0.7753762
,
0.4642328
,
0.57055861
,
0.21954368
,
0.34515455
,
0.09486015
,
0.40631217
,
0.01842281
,
0.48770609
,
0.06652815
,
0.36023033
,
0.42343026
,
0.24226256
,
0.17348589
,
0.44066274
,
0.6865865
,
0.17296699
,
0.46923906
,
0.06921105
,
0.3570261
,
0.4125829
,
0.73165393
,
0.15302512
,
0.29499072
,
0.33932695
,
0.30852377
,
0.40762195
,
0.40170741
,
0.36259529
,
0.60848355
,
0.42618036
,
0.31721094
,
0.02960522
,
0.28256637
,
0.24389413
,
0.2725659
,
0.10663581
,
0.27622163
,
0.28264219
,
0.53652936
,
0.09476089
,
0.40890986
,
0.34848392
,
0.32572666
,
0.53076893
,
0.11529481
,
0.29117745
,
0.14625968
,
0.8756339
,
0.49818122
,
0.10656087
,
0.1813329
,
0.17664003
,
0.21410346
,
0.80408043
,
0.02315119
,
0.27155462
,
0.32804728
,
0.13268511
,
0.61795473
,
0.49703068
,
0.41696799
,
0.10175809
,
0.71028161
,
0.29929739
,
0.17377149
,
0.76075399
,
0.20071237
,
0.32632929
,
0.36892858
,
0.09416146
,
0.26656723
,
0.42914796
};
EXPECT
(
migraphx
::
verify_range
(
results_vector
,
s
));
}
TEST_CASE
(
sqdiff_test
)
TEST_CASE
(
sqdiff_test
)
{
{
migraphx
::
program
p
;
migraphx
::
program
p
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment