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
8a6681a0
Commit
8a6681a0
authored
Feb 07, 2023
by
Alan Turner
Browse files
Merge remote-tracking branch 'origin/develop' into ck-gsg
parents
5372da33
3e58b1e4
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
114 additions
and
24 deletions
+114
-24
.github/workflows/history.yaml
.github/workflows/history.yaml
+30
-0
.github/workflows/performance.yaml
.github/workflows/performance.yaml
+4
-4
src/include/migraphx/match/layernorm.hpp
src/include/migraphx/match/layernorm.hpp
+29
-6
src/simplify_algebra.cpp
src/simplify_algebra.cpp
+10
-3
src/targets/gpu/include/migraphx/gpu/prefuse_ops.hpp
src/targets/gpu/include/migraphx/gpu/prefuse_ops.hpp
+2
-2
src/targets/gpu/prefuse_ops.cpp
src/targets/gpu/prefuse_ops.cpp
+13
-9
test/simplify_algebra_test.cpp
test/simplify_algebra_test.cpp
+26
-0
No files found.
.github/workflows/history.yaml
0 → 100644
View file @
8a6681a0
name
:
History
on
:
workflow_dispatch
:
inputs
:
start_date
:
description
:
Start date for results analysis
required
:
true
default
:
'
yyyy-mm-dd'
end_date
:
description
:
End date for results analysis
required
:
true
default
:
'
yyyy-mm-dd'
history_repo
:
description
:
Repository for history results between dates
required
:
true
default
:
'
ROCmSoftwarePlatform/migraphx-reports'
jobs
:
release
:
uses
:
migraphx-benchmark/actions/.github/workflows/history.yml@main
with
:
start_date
:
${{ github.event.inputs.start_date || 'yyyy-mm-dd' }}
end_date
:
${{ github.event.inputs.end_date || 'yyyy-mm-dd' }}
history_repo
:
${{ github.event.inputs.history_repo || 'ROCmSoftwarePlatform/migraphx-reports' }}
secrets
:
gh_token
:
${{ secrets.MIGRAPHX_BOT_TOKEN }}
mail_user
:
${{ secrets.MAIL_USERNAME }}
mail_pass
:
${{ secrets.MAIL_PASSWORD }}
.github/workflows/performance.yaml
View file @
8a6681a0
...
@@ -12,7 +12,7 @@ on:
...
@@ -12,7 +12,7 @@ on:
rocm_release
:
rocm_release
:
description
:
ROCm Version
description
:
ROCm Version
required
:
true
required
:
true
default
:
'
5.
3
'
default
:
'
5.
4.2
'
performance_reports_repo
:
performance_reports_repo
:
description
:
Result repository
description
:
Result repository
required
:
true
required
:
true
...
@@ -24,7 +24,7 @@ on:
...
@@ -24,7 +24,7 @@ on:
flags
:
flags
:
description
:
-m for Max value; -s for Std dev; -r for Threshold file
description
:
-m for Max value; -s for Std dev; -r for Threshold file
required
:
true
required
:
true
default
:
'
-
s
'
default
:
'
-
r
'
concurrency
:
"
perftest-${{
github.head_ref
||
github.base_ref
||
'schedule'
}}"
concurrency
:
"
perftest-${{
github.head_ref
||
github.base_ref
||
'schedule'
}}"
...
@@ -32,9 +32,9 @@ jobs:
...
@@ -32,9 +32,9 @@ jobs:
release
:
release
:
uses
:
ROCmSoftwarePlatform/migraphx-benchmark/.github/workflows/perf-test.yml@main
uses
:
ROCmSoftwarePlatform/migraphx-benchmark/.github/workflows/perf-test.yml@main
with
:
with
:
rocm_release
:
${{ github.event.inputs.rocm_release || '5.
3
' }}
rocm_release
:
${{ github.event.inputs.rocm_release || '5.
4.2
' }}
result_number
:
${{ github.event.inputs.result_number || '10' }}
result_number
:
${{ github.event.inputs.result_number || '10' }}
flags
:
${{ github.event.inputs.flags || '-
s
' }}
flags
:
${{ github.event.inputs.flags || '-
r
' }}
performance_reports_repo
:
${{ github.event.inputs.performance_reports_repo || 'ROCmSoftwarePlatform/migraphx-reports' }}
performance_reports_repo
:
${{ github.event.inputs.performance_reports_repo || 'ROCmSoftwarePlatform/migraphx-reports' }}
secrets
:
secrets
:
gh_token
:
${{ secrets.MIGRAPHX_BOT_TOKEN }}
gh_token
:
${{ secrets.MIGRAPHX_BOT_TOKEN }}
...
...
src/include/migraphx/match/layernorm.hpp
View file @
8a6681a0
...
@@ -36,23 +36,46 @@ template <class F>
...
@@ -36,23 +36,46 @@ template <class F>
struct
layernorm_matcher
struct
layernorm_matcher
{
{
F
f
;
F
f
;
auto
last_axis
()
const
{
return
make_basic_pred_matcher
([](
instruction_ref
ins
)
{
auto
v
=
ins
->
get_operator
().
to_value
();
if
(
not
v
.
contains
(
"axes"
))
return
false
;
auto
axes
=
v
[
"axes"
].
to_vector
<
std
::
size_t
>
();
if
(
axes
.
size
()
!=
1
)
return
false
;
return
axes
.
front
()
==
ins
->
inputs
().
front
()
->
get_shape
().
lens
().
size
()
-
1
;
});
}
auto
reduce_mean
()
const
{
return
f
(
"reduce_mean"
)(
last_axis
());
}
auto
x_minus_mean
()
const
auto
x_minus_mean
()
const
{
{
return
f
(
"sub"
)(
arg
(
0
)(
any
().
bind
(
"x"
)),
arg
(
1
)(
skip_broadcasts
(
f
(
"
reduce_mean
"
))));
return
f
(
"sub"
)(
arg
(
0
)(
any
().
bind
(
"x"
)),
arg
(
1
)(
skip_broadcasts
(
reduce_mean
(
))));
}
}
auto
variance
()
const
auto
variance
()
const
{
{
return
f
(
"reduce_mean"
)(
arg
(
0
)(
f
(
"pow"
)(
arg
(
0
)(
x_minus_mean
()),
arg
(
1
)(
has_value
(
2.0
f
)))));
return
reduce_mean
()(
arg
(
0
)(
any_of
(
f
(
"pow"
)(
arg
(
0
)(
x_minus_mean
()),
arg
(
1
)(
has_value
(
2.0
f
))),
f
(
"mul"
)(
arg
(
0
)(
x_minus_mean
()),
arg
(
1
)(
x_minus_mean
())),
f
(
"sqdiff"
)(
either_arg
(
0
,
1
)(
any
().
bind
(
"x"
),
skip_broadcasts
(
reduce_mean
()))))));
}
}
auto
layernorm_onnx
(
)
const
auto
sqrt_add_eps
(
const
std
::
string
&
name
)
const
{
{
auto
add_eps
=
f
(
"add"
)(
either_arg
(
0
,
1
)(
variance
(),
is_constant
().
bind
(
"eps"
)));
auto
add_eps
=
f
(
"add"
)(
either_arg
(
0
,
1
)(
variance
(),
is_constant
().
bind
(
"eps"
)));
return
f
(
"div"
)(
return
skip_broadcasts
(
f
(
name
)(
arg
(
0
)(
any_of
(
add_eps
,
variance
()))));
arg
(
0
)(
x_minus_mean
()),
}
arg
(
1
)(
skip_broadcasts
(
f
(
"sqrt"
)(
arg
(
0
)(
match
::
any_of
(
add_eps
,
variance
()))))));
auto
layernorm_onnx
()
const
{
auto
div_sqrt
=
f
(
"div"
)(
arg
(
0
)(
x_minus_mean
()),
arg
(
1
)(
sqrt_add_eps
(
"sqrt"
)));
auto
mul_rsqrt
=
f
(
"mul"
)(
either_arg
(
0
,
1
)(
x_minus_mean
(),
sqrt_add_eps
(
"rsqrt"
)));
return
any
(
any_of
(
div_sqrt
,
mul_rsqrt
));
}
}
auto
matcher
()
const
{
return
layernorm_onnx
();
}
auto
matcher
()
const
{
return
layernorm_onnx
();
}
...
...
src/simplify_algebra.cpp
View file @
8a6681a0
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
#include <migraphx/op/reshape.hpp>
#include <migraphx/op/reshape.hpp>
#include <migraphx/op/transpose.hpp>
#include <migraphx/op/transpose.hpp>
#include <migraphx/matcher.hpp>
#include <migraphx/matcher.hpp>
#include <migraphx/common.hpp>
#include <migraphx/literal.hpp>
#include <migraphx/literal.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/serialize.hpp>
#include <migraphx/serialize.hpp>
...
@@ -340,12 +341,18 @@ struct find_inner_broadcast
...
@@ -340,12 +341,18 @@ struct find_inner_broadcast
std
::
back_inserter
(
inputs
),
std
::
back_inserter
(
inputs
),
[](
auto
i
)
{
return
i
->
inputs
().
front
();
});
[](
auto
i
)
{
return
i
->
inputs
().
front
();
});
if
(
std
::
any_of
(
inputs
.
begin
(),
inputs
.
end
(),
[
&
](
auto
i
)
{
if
(
std
::
any_of
(
inputs
.
begin
(),
inputs
.
end
(),
[
&
](
auto
i
)
{
return
i
->
get_shape
()
!=
inputs
.
front
()
->
get_shape
();
return
i
->
get_shape
()
!=
inputs
.
front
()
->
get_shape
()
and
i
->
get_shape
().
elements
()
!=
1
;
}))
}))
return
;
return
;
auto
op
=
m
.
insert_instruction
(
ins
,
ins
->
get_operator
(),
inputs
);
auto
b_it
=
std
::
find_if
(
broadcasts
.
begin
(),
broadcasts
.
end
(),
[
&
](
auto
i
)
{
m
.
replace_instruction
(
ins
,
broadcasts
.
front
()
->
get_operator
(),
op
);
return
not
i
->
get_shape
().
scalar
();
});
if
(
b_it
==
broadcasts
.
end
())
b_it
=
broadcasts
.
begin
();
auto
op
=
insert_common_op
(
m
,
ins
,
ins
->
get_operator
(),
inputs
);
m
.
replace_instruction
(
ins
,
(
*
b_it
)
->
get_operator
(),
op
);
}
}
};
};
...
...
src/targets/gpu/include/migraphx/gpu/prefuse_ops.hpp
View file @
8a6681a0
...
@@ -30,14 +30,14 @@
...
@@ -30,14 +30,14 @@
namespace
migraphx
{
namespace
migraphx
{
inline
namespace
MIGRAPHX_INLINE_NS
{
inline
namespace
MIGRAPHX_INLINE_NS
{
struct
module
;
struct
module
_pass_manager
;
namespace
gpu
{
namespace
gpu
{
struct
prefuse_ops
struct
prefuse_ops
{
{
std
::
string
name
()
const
{
return
"gpu::prefuse_ops"
;
}
std
::
string
name
()
const
{
return
"gpu::prefuse_ops"
;
}
void
apply
(
module
&
m
)
const
;
void
apply
(
module
_pass_manager
&
mp
m
)
const
;
};
};
}
// namespace gpu
}
// namespace gpu
...
...
src/targets/gpu/prefuse_ops.cpp
View file @
8a6681a0
...
@@ -26,6 +26,8 @@
...
@@ -26,6 +26,8 @@
#include <migraphx/check_shapes.hpp>
#include <migraphx/check_shapes.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/register_op.hpp>
#include <migraphx/register_op.hpp>
#include <migraphx/pass_manager.hpp>
#include <migraphx/dead_code_elimination.hpp>
namespace
migraphx
{
namespace
migraphx
{
inline
namespace
MIGRAPHX_INLINE_NS
{
inline
namespace
MIGRAPHX_INLINE_NS
{
...
@@ -90,7 +92,9 @@ struct find_layernorm
...
@@ -90,7 +92,9 @@ struct find_layernorm
{
{
auto
ins
=
r
.
result
;
auto
ins
=
r
.
result
;
auto
x_ins
=
r
.
instructions
[
"x"
];
auto
x_ins
=
r
.
instructions
[
"x"
];
auto
eps
=
r
.
instructions
[
"eps"
]
->
eval
().
at
<
float
>
();
float
eps
=
0
;
if
(
contains
(
r
.
instructions
,
"eps"
))
eps
=
r
.
instructions
[
"eps"
]
->
eval
().
at
<
float
>
();
m
.
replace_instruction
(
ins
,
layernorm
{
eps
},
x_ins
);
m
.
replace_instruction
(
ins
,
layernorm
{
eps
},
x_ins
);
}
}
...
@@ -100,26 +104,26 @@ struct find_add_layernorm
...
@@ -100,26 +104,26 @@ struct find_add_layernorm
{
{
auto
matcher
()
const
auto
matcher
()
const
{
{
// CK branch does not work with the used_once() limitation
return
match
::
name
(
"gpu::prelayernorm"
)(
return
match
::
layernorm
()(
match
::
var
(
"x"
)(
match
::
name
(
"add"
).
bind
(
"add"
)));
match
::
args
(
match
::
name
(
"add"
)(
match
::
used_once
()
).
bind
(
"add"
)));
}
}
void
apply
(
module
&
m
,
const
match
::
matcher_result
&
r
)
const
void
apply
(
module
&
m
,
const
match
::
matcher_result
&
r
)
const
{
{
auto
ins
=
r
.
result
;
auto
ins
=
r
.
result
;
auto
add_ins
=
r
.
instructions
[
"add"
];
auto
add_ins
=
r
.
instructions
[
"add"
];
float
eps
=
0
;
auto
op
=
any_cast
<
layernorm
>
(
ins
->
get_operator
());
if
(
contains
(
r
.
instructions
,
"eps"
))
eps
=
r
.
instructions
[
"eps"
]
->
eval
().
at
<
float
>
();
m
.
replace_instruction
(
ins
,
add_layernorm
{
eps
},
add_ins
->
inputs
());
m
.
replace_instruction
(
ins
,
add_layernorm
{
op
.
epsilon
},
add_ins
->
inputs
());
}
}
};
};
}
// namespace
}
// namespace
void
prefuse_ops
::
apply
(
module
&
m
)
const
void
prefuse_ops
::
apply
(
module
_pass_manager
&
mp
m
)
const
{
{
match
::
find_matches
(
m
,
find_add_layernorm
{},
find_layernorm
{});
match
::
find_matches
(
mpm
.
get_module
(),
find_layernorm
{});
mpm
.
run_pass
(
dead_code_elimination
{});
match
::
find_matches
(
mpm
.
get_module
(),
find_add_layernorm
{});
}
}
}
// namespace gpu
}
// namespace gpu
...
...
test/simplify_algebra_test.cpp
View file @
8a6681a0
...
@@ -559,6 +559,32 @@ TEST_CASE(simplify_inner_broadcast2)
...
@@ -559,6 +559,32 @@ TEST_CASE(simplify_inner_broadcast2)
EXPECT
(
m1
==
m2
);
EXPECT
(
m1
==
m2
);
}
}
TEST_CASE
(
simplify_inner_broadcast_scalar
)
{
auto
b
=
migraphx
::
op
::
multibroadcast
{{
32
,
384
}};
migraphx
::
module
m1
;
{
auto
x
=
m1
.
add_parameter
(
"x"
,
{
migraphx
::
shape
::
int32_type
,
{
1
,
384
}});
auto
y
=
m1
.
add_parameter
(
"y"
,
{
migraphx
::
shape
::
int32_type
,
{
1
,
1
}});
auto
xb
=
m1
.
add_instruction
(
b
,
x
);
auto
yb
=
m1
.
add_instruction
(
b
,
y
);
auto
sum
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"add"
),
xb
,
yb
);
m1
.
add_instruction
(
pass_op
{},
sum
);
}
run_pass
(
m1
);
migraphx
::
module
m2
;
{
auto
x
=
m2
.
add_parameter
(
"x"
,
{
migraphx
::
shape
::
int32_type
,
{
1
,
384
}});
auto
y
=
m2
.
add_parameter
(
"y"
,
{
migraphx
::
shape
::
int32_type
,
{
1
,
1
}});
auto
yb
=
m2
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
1
,
384
}},
y
);
auto
sum
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"add"
),
x
,
yb
);
auto
sumb
=
m2
.
add_instruction
(
b
,
sum
);
m2
.
add_instruction
(
pass_op
{},
sumb
);
}
EXPECT
(
m1
==
m2
);
}
TEST_CASE
(
simplify_add_conv1
)
TEST_CASE
(
simplify_add_conv1
)
{
{
migraphx
::
module
m
;
migraphx
::
module
m
;
...
...
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