Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
9 changes: 7 additions & 2 deletions onnxruntime/core/optimizer/graph_transformer_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,11 @@ InlinedVector<std::unique_ptr<GraphTransformer>> GenerateTransformers(
onnxruntime::kAclExecutionProvider,
onnxruntime::kCudaExecutionProvider,
onnxruntime::kDmlExecutionProvider};
const InlinedHashSet<std::string_view> cpu_acl_cuda_dml_webgpu_eps = {onnxruntime::kCpuExecutionProvider,
onnxruntime::kAclExecutionProvider,
onnxruntime::kCudaExecutionProvider,
onnxruntime::kDmlExecutionProvider,
onnxruntime::kWebGpuExecutionProvider};
const InlinedHashSet<std::string_view> cpu_acl_cuda_dml_js_webgpu_eps = {onnxruntime::kCpuExecutionProvider,
onnxruntime::kAclExecutionProvider,
onnxruntime::kCudaExecutionProvider,
Expand Down Expand Up @@ -401,15 +406,15 @@ InlinedVector<std::unique_ptr<GraphTransformer>> GenerateTransformers(

transformers.emplace_back(std::make_unique<ConvActivationFusion>(cpu_acl_js_webgpu_eps));

transformers.emplace_back(std::make_unique<GeluFusion>(cpu_acl_cuda_dml_eps, level));
transformers.emplace_back(std::make_unique<GeluFusion>(cpu_acl_cuda_dml_webgpu_eps, level));
transformers.emplace_back(std::make_unique<LayerNormFusion>(cpu_acl_cuda_dml_eps, level));
transformers.emplace_back(std::make_unique<SimplifiedLayerNormFusion>(cpu_cuda_eps));
transformers.emplace_back(std::make_unique<AttentionFusion>(cpu_acl_cuda_dml_eps));
transformers.emplace_back(std::make_unique<EmbedLayerNormFusion>(cpu_acl_cuda_dml_eps));
transformers.emplace_back(std::make_unique<GatherSliceToSplitFusion>(cpu_cuda_eps));
transformers.emplace_back(std::make_unique<GatherToSliceFusion>(cpu_cuda_eps));
transformers.emplace_back(std::make_unique<MatmulTransposeFusion>(cpu_cuda_dml_eps));
transformers.emplace_back(std::make_unique<BiasGeluFusion>(cpu_acl_cuda_dml_eps));
transformers.emplace_back(std::make_unique<BiasGeluFusion>(cpu_acl_cuda_dml_webgpu_eps));
transformers.emplace_back(std::make_unique<GroupQueryAttentionFusion>(cuda_eps));
// Run MatMulAddFusion again after *AttentionFusion transforms with `preserve_attention_pattern = false`,
// to cleanup the remaining MatMul-Add that were part of the attention pattern but not detected or fused.
Expand Down
16 changes: 16 additions & 0 deletions onnxruntime/test/contrib_ops/activation_op_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,22 @@ TEST_F(ActivationOpTest, Gelu) {
}
#endif

TEST_F(ActivationOpTest, Gelu_half) {
const std::vector<MLFloat16>& X = input_values_fp16[0];
std::vector<MLFloat16> Y;
Y.reserve(X.size());
for (const MLFloat16& x_half : X) {
const float x = x_half.ToFloat();
Y.push_back(MLFloat16(x * 0.5f * (1.0f + std::erf(x * static_cast<float>(M_SQRT1_2)))));
}

OpTester tester("Gelu", 1, onnxruntime::kMSDomain);
const std::vector<int64_t> dims{1, 1, static_cast<int64_t>(X.size())};
tester.AddInput<MLFloat16>("X", dims, X);
tester.AddOutput<MLFloat16>("Y", dims, Y);
tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider});
}

#if defined(USE_DNNL)
std::vector<BFloat16> expected_output_bfloat16(const std::vector<float>& input_data) {
std::vector<float> output;
Expand Down
Loading