From 6b895231f733a31e403ac010de4e536e7de7995a Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Tue, 12 Feb 2019 11:45:11 -0800 Subject: [PATCH 1/5] Promote to ONNX commit that has StringNormalizer Adjust implementation to match ONNX spec. --- cmake/external/onnx | 2 +- onnxruntime/contrib_ops/contrib_kernels.cc | 2 - .../core/graph/contrib_ops/contrib_defs.cc | 33 -------------- .../providers/cpu/cpu_execution_provider.cc | 5 +++ .../providers/cpu/nn}/string_normalizer.cc | 43 +++++++++---------- .../providers/cpu/nn}/string_normalizer.h | 4 +- .../cpu/nn}/string_normalizer_test.cc | 33 +++++--------- 7 files changed, 37 insertions(+), 85 deletions(-) rename onnxruntime/{contrib_ops/cpu => core/providers/cpu/nn}/string_normalizer.cc (91%) rename onnxruntime/{contrib_ops/cpu => core/providers/cpu/nn}/string_normalizer.h (91%) rename onnxruntime/test/{contrib_ops => providers/cpu/nn}/string_normalizer_test.cc (88%) diff --git a/cmake/external/onnx b/cmake/external/onnx index 2896c77cfc628..b37fc6df4e426 160000 --- a/cmake/external/onnx +++ b/cmake/external/onnx @@ -1 +1 @@ -Subproject commit 2896c77cfc628f18b6ca6b28e3a380807fa00f53 +Subproject commit b37fc6df4e426650cb0d48fc69519d0cae1584ae diff --git a/onnxruntime/contrib_ops/contrib_kernels.cc b/onnxruntime/contrib_ops/contrib_kernels.cc index 89b57be80ab1e..5245ce0e46646 100644 --- a/onnxruntime/contrib_ops/contrib_kernels.cc +++ b/onnxruntime/contrib_ops/contrib_kernels.cc @@ -16,7 +16,6 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, uint8_t, DequantizeLinear); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, int8_t, DequantizeLinear); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, float, QuantizeLinear); -class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, string, StringNormalizer); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, float, NonMaxSuppression); class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, Range); class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, WordConvEmbedding); @@ -43,7 +42,6 @@ void RegisterContribKernels(KernelRegistry& kernel_registry) { kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); - kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); diff --git a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc index e8302df87fc7a..7f9ab1a31837d 100644 --- a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc @@ -1073,39 +1073,6 @@ The bounding box coordinates corresponding to the selected indices can then be o updateOutputShape(ctx, 0, input_shape); }); - ONNX_CONTRIB_OPERATOR_SCHEMA(StringNormalizer) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "X", "Strings to normalize", "T") - .Output(0, "Y", "Normalized strings", "T") - .TypeConstraint( - "T", - {"tensor(string)"}, - "Input/Output is a string tensor") - .Attr( - "casechangeaction", - "string enum that cases output to be lowercased/uppercases/unchanged. Valid values are \"LOWER\", \"UPPER\", \"NONE\"", - AttributeProto::STRING) - .Attr( - "is_case_sensitive", - "Boolean. Whether the identification of stop words in X is case-sensitive.", - AttributeProto::INT) - .Attr( - "stopwords", - "List of stop words", - AttributeProto::STRINGS, - OPTIONAL) - .Attr( - "locale", - "Environment dependent string that denotes the locale according to which output strings needs to be upper/lowercased. Default en_US", - AttributeProto::STRING, - OPTIONAL) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - auto output_elem_type = ctx.getOutputType(0)->mutable_tensor_type(); - output_elem_type->set_elem_type(ONNX_NAMESPACE::TensorProto::STRING); - }) - .SetDoc(R"DOC([optional] Step1: Remove elements in X if they match any of the stop words so that the output tensor will not contain any stop words. This operator only accepts [C]- and [1, C]-tensors. If all elements in X are dropped, the output will be the default value of string tensor with shape [1] if input shape is [C] and shape [1, 1] if input shape is [1, C].)DOC"); - ONNX_CONTRIB_OPERATOR_SCHEMA(GatherND) .SetDomain(kMSDomain) .SinceVersion(1) diff --git a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc index d6fd83eb6497b..acbc7db1ff332 100644 --- a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc +++ b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc @@ -262,6 +262,9 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 9, string, Where); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 9, float, Where); +// Opset 10 +class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 10, StringNormalizer); + void RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) { kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); @@ -515,6 +518,8 @@ void RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) { kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); + + kernel_registry.Register(BuildKernelCreateInfo()); } // Forward declarations of ml op kernels diff --git a/onnxruntime/contrib_ops/cpu/string_normalizer.cc b/onnxruntime/core/providers/cpu/nn/string_normalizer.cc similarity index 91% rename from onnxruntime/contrib_ops/cpu/string_normalizer.cc rename to onnxruntime/core/providers/cpu/nn/string_normalizer.cc index a20eaade10d3b..7ce49bef4a427 100644 --- a/onnxruntime/contrib_ops/cpu/string_normalizer.cc +++ b/onnxruntime/core/providers/cpu/nn/string_normalizer.cc @@ -16,15 +16,13 @@ #include namespace onnxruntime { -namespace contrib { -ONNX_CPU_OPERATOR_TYPED_MS_KERNEL( +ONNX_CPU_OPERATOR_KERNEL( StringNormalizer, - 1, - string, + 10, KernelDefBuilder() .TypeConstraint("T", DataTypeImpl::GetTensorType()), - contrib::StringNormalizer); + StringNormalizer); namespace string_normalizer { const std::string conv_error("Conversion Error"); @@ -157,29 +155,29 @@ using namespace string_normalizer; StringNormalizer::StringNormalizer(const OpKernelInfo& info) : OpKernel(info), is_case_sensitive_(true), - casechangeaction_(NONE), + case_change_action_(NONE), compare_caseaction_(NONE) { int64_t iscasesensitive = 0; Status status = info.GetAttr("is_case_sensitive", &iscasesensitive); ORT_ENFORCE(status.IsOK(), "attribute is_case_sensitive is not set"); is_case_sensitive_ = iscasesensitive != 0; - std::string casechangeaction; - status = info.GetAttr("casechangeaction", &casechangeaction); - ORT_ENFORCE(status.IsOK(), "attribute caseaction is not set"); - if (casechangeaction == "LOWER") { - casechangeaction_ = LOWER; - } else if (casechangeaction == "UPPER") { - casechangeaction_ = UPPER; - } else if (casechangeaction == "NONE") { - casechangeaction_ = NONE; + std::string case_change_action; + status = info.GetAttr("case_change_action", &case_change_action); + ORT_ENFORCE(status.IsOK(), "attribute case_change_action is not set"); + if (case_change_action == "LOWER") { + case_change_action_ = LOWER; + } else if (case_change_action == "UPPER") { + case_change_action_ = UPPER; + } else if (case_change_action == "NONE") { + case_change_action_ = NONE; } else { - ORT_ENFORCE(false, "attribute casechangeaction has invalid value"); + ORT_ENFORCE(false, "attribute case_change_action has invalid value"); } if (!is_case_sensitive_) { // Convert stop words to a case which can help us preserve the case of filtered strings - compare_caseaction_ = (casechangeaction_ == UPPER) ? UPPER : LOWER; + compare_caseaction_ = (case_change_action_ == UPPER) ? UPPER : LOWER; } locale_name_ = info.GetAttrOrDefault("locale", default_locale); @@ -248,10 +246,10 @@ Status StringNormalizer::Compute(OpKernelContext* ctx) const { ++first; } status = CopyCaseAction(filtered_strings.cbegin(), filtered_strings.cend(), ctx, locale, converter, - N, filtered_strings.size(), casechangeaction_); + N, filtered_strings.size(), case_change_action_); } else { // Nothing to filter. Copy input to output and change case if needed - status = CopyCaseAction(input_data, input_data + C, ctx, locale, converter, N, C, casechangeaction_); + status = CopyCaseAction(input_data, input_data + C, ctx, locale, converter, N, C, case_change_action_); } } else { if (!wstopwords_.empty()) { @@ -273,7 +271,7 @@ Status StringNormalizer::Compute(OpKernelContext* ctx) const { } locale.ChangeCase(compare_caseaction_, wstr); if (0 == wstopwords_.count(wstr)) { - if (casechangeaction_ == NONE) { + if (case_change_action_ == NONE) { filtered_orignal_strings.push_back(std::cref(s)); } else { filtered_cased_strings.push_back(converter.to_bytes(wstr)); @@ -281,7 +279,7 @@ Status StringNormalizer::Compute(OpKernelContext* ctx) const { } ++first; } - if (casechangeaction_ == NONE) { + if (case_change_action_ == NONE) { status = CopyCaseAction(filtered_orignal_strings.cbegin(), filtered_orignal_strings.cend(), ctx, locale, converter, N, filtered_orignal_strings.size(), NONE); } else { @@ -290,10 +288,9 @@ Status StringNormalizer::Compute(OpKernelContext* ctx) const { } } else { // Nothing to filter. Copy input to output and change case if needed - status = CopyCaseAction(input_data, input_data + C, ctx, locale, converter, N, C, casechangeaction_); + status = CopyCaseAction(input_data, input_data + C, ctx, locale, converter, N, C, case_change_action_); } } return status; } -} // namespace contrib } // namespace onnxruntime diff --git a/onnxruntime/contrib_ops/cpu/string_normalizer.h b/onnxruntime/core/providers/cpu/nn/string_normalizer.h similarity index 91% rename from onnxruntime/contrib_ops/cpu/string_normalizer.h rename to onnxruntime/core/providers/cpu/nn/string_normalizer.h index 8bc865400f6d4..1f15926060f86 100644 --- a/onnxruntime/contrib_ops/cpu/string_normalizer.h +++ b/onnxruntime/core/providers/cpu/nn/string_normalizer.h @@ -10,7 +10,6 @@ #include namespace onnxruntime { -namespace contrib { class StringNormalizer : public OpKernel { public: @@ -27,7 +26,7 @@ class StringNormalizer : public OpKernel { private: bool is_case_sensitive_; - CaseAction casechangeaction_; + CaseAction case_change_action_; CaseAction compare_caseaction_; // used for case-insensitive compare std::string locale_name_; // Either if these are populated but not both @@ -35,5 +34,4 @@ class StringNormalizer : public OpKernel { std::unordered_set wstopwords_; }; -} // namespace contrib } // namespace onnxruntime diff --git a/onnxruntime/test/contrib_ops/string_normalizer_test.cc b/onnxruntime/test/providers/cpu/nn/string_normalizer_test.cc similarity index 88% rename from onnxruntime/test/contrib_ops/string_normalizer_test.cc rename to onnxruntime/test/providers/cpu/nn/string_normalizer_test.cc index e3374f60c0195..3da6533394bfa 100644 --- a/onnxruntime/test/contrib_ops/string_normalizer_test.cc +++ b/onnxruntime/test/providers/cpu/nn/string_normalizer_test.cc @@ -9,8 +9,8 @@ namespace onnxruntime { namespace test { namespace str_normalizer_test { -constexpr const char* domain = onnxruntime::kMSDomain; -const int opset_ver = 1; +constexpr const char* domain = kOnnxDomain; +const int opset_ver = 10; #ifdef _MSC_VER const std::string test_locale("en-US"); @@ -18,12 +18,14 @@ const std::string test_locale("en-US"); const std::string test_locale("en_US.UTF-8"); #endif -void InitTestAttr(OpTester& test, const std::string& casechangeaction, - bool iscasesensitive, +void InitTestAttr(OpTester& test, const std::string& case_change_action, + bool is_case_sensitive, const std::vector& stopwords, const std::string& locale) { - test.AddAttribute("casechangeaction", casechangeaction); - test.AddAttribute("is_case_sensitive", int64_t{iscasesensitive}); + if (!case_change_action.empty()) { + test.AddAttribute("case_change_action", case_change_action); + } + test.AddAttribute("is_case_sensitive", int64_t{is_case_sensitive}); if (!stopwords.empty()) { test.AddAttribute("stopwords", stopwords); } @@ -36,27 +38,12 @@ void InitTestAttr(OpTester& test, const std::string& casechangeaction, using namespace str_normalizer_test; TEST(ContribOpTest, StringNormalizerTest) { - // Test wrong 2 dimensions - // - casesensitive approach - // - no stopwords. - // - No change case action - { - OpTester test("StringNormalizer", opset_ver, domain); - InitTestAttr(test, "NONE", true, {}, test_locale); - std::vector dims{2, 2}; - std::vector input = {std::string("monday"), std::string("tuesday"), std::string("wednesday"), std::string("thursday")}; - test.AddInput("T", dims, input); - std::vector output(input); // do the same for now - test.AddOutput("Y", dims, output); - - test.Run(OpTester::ExpectResult::kExpectFailure, "Input dimensions are either[C > 0] or [1][C > 0] allowed"); - } // - casesensitive approach // - no stopwords. - // - No change case action + // - No change case action, expecting default to take over { OpTester test("StringNormalizer", opset_ver, domain); - InitTestAttr(test, "NONE", true, {}, test_locale); + InitTestAttr(test, "", true, {}, test_locale); std::vector dims{4}; std::vector input = {std::string("monday"), std::string("tuesday"), std::string("wednesday"), std::string("thursday")}; From 7c044f9f5bd2051617538d9f1a35bd85db8ed503 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Wed, 20 Feb 2019 17:22:08 -0800 Subject: [PATCH 2/5] Update ONNX commits. --- cgmanifest.json | 8 ++++---- .../ci_build/github/linux/docker/scripts/install_deps.sh | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cgmanifest.json b/cgmanifest.json index c88188a0cb0a9..d99662e79341f 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -48,10 +48,10 @@ { "component":{ "type":"git", - "git":{ - "commitHash":"2896c77cfc628f18b6ca6b28e3a380807fa00f53", - "repositoryUrl":"https://github.com/onnx/onnx.git" - } + "git": { + "commitHash": "b37fc6df4e426650cb0d48fc69519d0cae1584ae", + "repositoryUrl": "https://github.com/onnx/onnx.git" + } } }, { diff --git a/tools/ci_build/github/linux/docker/scripts/install_deps.sh b/tools/ci_build/github/linux/docker/scripts/install_deps.sh index 0a30abf374357..fc0723b4bb0aa 100755 --- a/tools/ci_build/github/linux/docker/scripts/install_deps.sh +++ b/tools/ci_build/github/linux/docker/scripts/install_deps.sh @@ -38,8 +38,8 @@ else #5af210ca8a1c73aa6bae8754c9346ec54d0a756e is v1.2.3 #bae6333e149a59a3faa9c4d9c44974373dcf5256 is v1.3.0 #9e55ace55aad1ada27516038dfbdc66a8a0763db is v1.4.1 - #2896c77cfc628f18b6ca6b28e3a380807fa00f53 is v1.4.1 latest - for onnx_version in "5af210ca8a1c73aa6bae8754c9346ec54d0a756e" "bae6333e149a59a3faa9c4d9c44974373dcf5256" "9e55ace55aad1ada27516038dfbdc66a8a0763db" "2896c77cfc628f18b6ca6b28e3a380807fa00f53"; do + #b37fc6df4e426650cb0d48fc69519d0cae1584ae is v1.4.1 latest + for onnx_version in "5af210ca8a1c73aa6bae8754c9346ec54d0a756e" "bae6333e149a59a3faa9c4d9c44974373dcf5256" "9e55ace55aad1ada27516038dfbdc66a8a0763db" "b37fc6df4e426650cb0d48fc69519d0cae1584ae"; do if [ -z ${lastest_onnx_version+x} ]; then echo "first pass"; else From db728269ddac79c0aeb472a4d2e48dff96b8b092 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Wed, 20 Feb 2019 17:44:12 -0800 Subject: [PATCH 3/5] Add Opset 10 comment --- onnxruntime/core/providers/cpu/cpu_execution_provider.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc index acbc7db1ff332..2ddbe8836069a 100644 --- a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc +++ b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc @@ -519,6 +519,7 @@ void RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) { kernel_registry.Register(BuildKernelCreateInfo()); kernel_registry.Register(BuildKernelCreateInfo()); + // Opset 10 kernel_registry.Register(BuildKernelCreateInfo()); } From bb0c1ee7d4ba8cef42aa87ffed3f0d931e767996 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Fri, 8 Mar 2019 15:22:19 -0800 Subject: [PATCH 4/5] Remove test exclusions. Override BackendTest class to handle strings compasision properly until this is fixed in ONNX. --- onnxruntime/test/onnx/main.cc | 12 ---------- .../test/python/onnx_backend_test_series.py | 24 ++++++++++++++++--- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/onnxruntime/test/onnx/main.cc b/onnxruntime/test/onnx/main.cc index 18585041d02ac..b6fbefbddfea6 100644 --- a/onnxruntime/test/onnx/main.cc +++ b/onnxruntime/test/onnx/main.cc @@ -301,18 +301,6 @@ int real_main(int argc, char* argv[], OrtEnv** p_env) { {"atanh_example", "opset 9 not supported yet"}, {"scan_sum", "opset 9 not supported yet"}, {"shrink", "opset 9 not supported yet"}, - {"strnormalizer_export_monday_casesensintive_lower", "opset 10 not supported yet"}, - {"strnormalizer_export_monday_casesensintive_nochangecase", "opset 10 not supported yet"}, - {"strnormalizer_export_monday_casesensintive_upper", "opset 10 not supported yet"}, - {"strnormalizer_export_monday_empty_output", "opset 10 not supported yet"}, - {"strnormalizer_export_monday_insensintive_upper_twodim", "opset 10 not supported yet"}, - {"strnormalizer_nostopwords_nochangecase", "opset 10 not supported yet"}, - {"strnorm_model_monday_casesensintive_lower", "opset 10 not supported yet"}, - {"strnorm_model_monday_casesensintive_nochangecase", "opset 10 not supported yet"}, - {"strnorm_model_monday_casesensintive_upper", "opset 10 not supported yet"}, - {"strnorm_model_monday_empty_output", "opset 10 not supported yet"}, - {"strnorm_model_monday_insensintive_upper_twodim", "opset 10 not supported yet"}, - {"strnorm_model_nostopwords_nochangecase", "opset 10 not supported yet"}, {"cast_DOUBLE_to_FLOAT16", "Cast opset 9 not supported yet"}, {"cast_DOUBLE_to_FLOAT", "Cast opset 9 not supported yet"}, {"cast_FLOAT_to_DOUBLE", "Cast opset 9 not supported yet"}, diff --git a/onnxruntime/test/python/onnx_backend_test_series.py b/onnxruntime/test/python/onnx_backend_test_series.py index 9469f82b179ac..e5f0c8fff1bd1 100644 --- a/onnxruntime/test/python/onnx_backend_test_series.py +++ b/onnxruntime/test/python/onnx_backend_test_series.py @@ -6,12 +6,32 @@ import unittest import onnx.backend.test +import numpy as np # type: ignore import onnxruntime.backend as c2 pytest_plugins = 'onnx.backend.test.report', -backend_test = onnx.backend.test.BackendTest(c2, __name__) +class OnnxruntimeBackendTest(onnx.backend.test.BackendTest): + def __init__(self, backend, parent_module=None): + onnx.backend.test.BackendTest.__init__(self, backend, parent_module) + + @classmethod + def assert_similar_outputs(cls, ref_outputs, outputs, rtol, atol): + np.testing.assert_equal(len(ref_outputs), len(outputs)) + for i in range(len(outputs)): + np.testing.assert_equal(ref_outputs[i].dtype, outputs[i].dtype) + if ref_outputs[i].dtype == np.object: + np.testing.assert_array_equal(ref_outputs[i], outputs[i]) + else: + np.testing.assert_allclose( + ref_outputs[i], + outputs[i], + rtol=rtol, + atol=atol) + + +backend_test = OnnxruntimeBackendTest(c2, __name__) # Type not supported backend_test.exclude(r'(FLOAT16)') @@ -48,8 +68,6 @@ '|^test_PReLU_3d_cpu.*' '|^test_PReLU_3d_multiparam_cpu.*' '|^test_PoissonNLLLLoss_no_reduce_cpu.*' -'|^test_strnormalizer_*.*' -'|^test_strnorm_*.*' '|^test_Softsign_cpu.*' '|^test_operator_add_broadcast_cpu.*' '|^test_operator_add_size1_broadcast_cpu.*' From 1812e58ef297be3f5036d83d057ae7809d95d267 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Fri, 8 Mar 2019 15:44:02 -0800 Subject: [PATCH 5/5] Restore test_gru_seq_length_cpu exclusion --- onnxruntime/test/python/onnx_backend_test_series.py | 1 + 1 file changed, 1 insertion(+) diff --git a/onnxruntime/test/python/onnx_backend_test_series.py b/onnxruntime/test/python/onnx_backend_test_series.py index a577b5b71f123..588f717214e20 100644 --- a/onnxruntime/test/python/onnx_backend_test_series.py +++ b/onnxruntime/test/python/onnx_backend_test_series.py @@ -38,6 +38,7 @@ def assert_similar_outputs(cls, ref_outputs, outputs, rtol, atol): backend_test.exclude(r'(' '^test_cast_DOUBLE_to_FLOAT_cpu.*' +'|^test_gru_seq_length_cpu.*' '|^test_cast_FLOAT_to_DOUBLE_cpu.*' '|^test_cast_FLOAT_to_STRING_cpu.*' '|^test_cast_STRING_to_FLOAT_cpu.*'