mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-30 20:18:08 +00:00
Support double for ArgMax operator (#4907)
This commit is contained in:
parent
3d63d8d4f1
commit
294eaca9ef
3 changed files with 56 additions and 28 deletions
|
|
@ -310,6 +310,7 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain,
|
|||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, MLFloat16, Round);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, uint8_t, DynamicQuantizeLinear);
|
||||
class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11, float, ArgMax);
|
||||
class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11, double, ArgMax);
|
||||
class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11, int32_t, ArgMax);
|
||||
class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11, float, ArgMin);
|
||||
class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11, int32_t, ArgMin);
|
||||
|
|
@ -401,6 +402,7 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain,
|
|||
|
||||
// opset 12
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, float, ArgMax);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, double, ArgMax);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, int32_t, ArgMax);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, float, ArgMin);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, int32_t, ArgMin);
|
||||
|
|
@ -453,7 +455,7 @@ KernelCreateInfo BuildKernelCreateInfo<void>() {
|
|||
|
||||
Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) {
|
||||
static const BuildKernelCreateInfoFn function_table[] = {
|
||||
BuildKernelCreateInfo<void>, //default entry to avoid the list become empty after ops-reducing
|
||||
BuildKernelCreateInfo<void>, //default entry to avoid the list become empty after ops-reducing
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 6, 10,
|
||||
Clip)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 6, Elu)>,
|
||||
|
|
@ -910,6 +912,8 @@ Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) {
|
|||
DynamicQuantizeLinear)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11,
|
||||
float, ArgMax)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11,
|
||||
double, ArgMax)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11,
|
||||
int32_t, ArgMax)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 11,
|
||||
|
|
@ -1058,6 +1062,8 @@ Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) {
|
|||
// OpSet 12
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, float,
|
||||
ArgMax)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, double,
|
||||
ArgMax)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, int32_t,
|
||||
ArgMax)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, float,
|
||||
|
|
@ -1189,7 +1195,7 @@ KernelCreateInfo BuildKernelCreateInfo<void>() {
|
|||
|
||||
Status RegisterOnnxMLOperatorKernels(KernelRegistry& kernel_registry) {
|
||||
static const BuildKernelCreateInfoFn function_table[] = {
|
||||
BuildKernelCreateInfo<void>, //default entry to avoid the list become empty after ops-reducing
|
||||
BuildKernelCreateInfo<void>, //default entry to avoid the list become empty after ops-reducing
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, float,
|
||||
ArrayFeatureExtractor)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMLDomain, 1, double,
|
||||
|
|
|
|||
|
|
@ -143,7 +143,10 @@ REGISTER_UNARY_ELEMENTWISE_KERNEL_DOUBLE_ONLY(ReduceSumSquare, 11);
|
|||
|
||||
REGISTER_UNARY_ELEMENTWISE_VERSIONED_KERNEL(ArgMax, 1, 10);
|
||||
REGISTER_UNARY_ELEMENTWISE_VERSIONED_KERNEL(ArgMax, 11, 11);
|
||||
REGISTER_UNARY_ELEMENTWISE_VERSIONED_KERNEL_DOUBLE_ONLY(ArgMax, 11, 11)
|
||||
REGISTER_UNARY_ELEMENTWISE_KERNEL(ArgMax, 12);
|
||||
REGISTER_UNARY_ELEMENTWISE_KERNEL_DOUBLE_ONLY(ArgMax, 12);
|
||||
|
||||
REGISTER_UNARY_ELEMENTWISE_VERSIONED_KERNEL(ArgMin, 1, 10);
|
||||
REGISTER_UNARY_ELEMENTWISE_VERSIONED_KERNEL(ArgMin, 11, 11);
|
||||
REGISTER_UNARY_ELEMENTWISE_KERNEL(ArgMin, 12);
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ TEST(ReductionOpTest, ReduceMax_int32) {
|
|||
#if defined(OPENVINO_CONFIG_GPU_FP32) || defined(OPENVINO_CONFIG_GPU_FP16) || defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -616,11 +616,11 @@ TEST(ReductionOpTest, ReduceMax_int64) {
|
|||
9, 10,
|
||||
11, 12});
|
||||
test.AddOutput<int64_t>("reduced", {3, 1, 1}, {4, 8, 12});
|
||||
#if defined(OPENVINO_CONFIG_GPU_FP32) || defined(OPENVINO_CONFIG_GPU_FP16) || defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
# endif
|
||||
#if defined(OPENVINO_CONFIG_GPU_FP32) || defined(OPENVINO_CONFIG_GPU_FP16) || defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ReduceMax_int8) {
|
||||
|
|
@ -637,11 +637,11 @@ TEST(ReductionOpTest, ReduceMax_int8) {
|
|||
9, 10,
|
||||
11, 12});
|
||||
test.AddOutput<int8_t>("reduced", {3, 1, 1}, {4, 8, 12});
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
#endif
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ReduceMax_uint8) {
|
||||
|
|
@ -658,11 +658,11 @@ TEST(ReductionOpTest, ReduceMax_uint8) {
|
|||
9, 10,
|
||||
11, 12});
|
||||
test.AddOutput<uint8_t>("reduced", {3, 1, 1}, {4, 8, 12});
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
#endif
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); // OpenVINO: Disabled temporarily
|
||||
#else
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !(defined USE_TENSORRT) && !(defined USE_TVM)
|
||||
|
|
@ -1152,7 +1152,6 @@ void test_apex_reduce_sum(
|
|||
} else {
|
||||
test.Run();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ReduceSum_apex_matrix_large) {
|
||||
|
|
@ -1204,13 +1203,13 @@ TEST(ReductionOpTest, ReduceSum_batch_by_seq_by_30528) {
|
|||
#endif
|
||||
|
||||
TEST(ReductionOpTest, ReduceSum_bert_selected_batch_size) {
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD) || defined(OPENVINO_CONFIG_VAD_M)
|
||||
test_apex_reduce_sum(85 * 128, 768, true);
|
||||
test_apex_reduce_sum(86 * 128, 768, true);
|
||||
#else
|
||||
test_apex_reduce_sum(85 * 128, 768);
|
||||
test_apex_reduce_sum(86 * 128, 768);
|
||||
#endif
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD) || defined(OPENVINO_CONFIG_VAD_M)
|
||||
test_apex_reduce_sum(85 * 128, 768, true);
|
||||
test_apex_reduce_sum(86 * 128, 768, true);
|
||||
#else
|
||||
test_apex_reduce_sum(85 * 128, 768);
|
||||
test_apex_reduce_sum(86 * 128, 768);
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ReduceSum_apex_more) {
|
||||
|
|
@ -1608,6 +1607,26 @@ TEST(ReductionOpTest, ArgMax) {
|
|||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ArgMax_Double_Type) {
|
||||
OpTester test("ArgMax", 11);
|
||||
test.AddAttribute("axis", static_cast<int64_t>(1));
|
||||
test.AddAttribute("keepdims", static_cast<int64_t>(1));
|
||||
test.AddInput<double>("data", {3, 2, 2},
|
||||
{1.0, 2.0,
|
||||
3.0, 4.0,
|
||||
|
||||
5.0, 6.0,
|
||||
7.0, 8.0,
|
||||
|
||||
9.0, 10.0,
|
||||
11.0, 12.0});
|
||||
test.AddOutput<int64_t>("reduced", {3, 1, 2},
|
||||
{1, 1,
|
||||
1, 1,
|
||||
1, 1});
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: axis must be 0
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ArgMax_do_not_keepdims) {
|
||||
OpTester test("ArgMax");
|
||||
test.AddAttribute("axis", (int64_t)1);
|
||||
|
|
@ -1636,7 +1655,7 @@ TEST(ReductionOpTest, ArgMax_do_not_keepdims_2) {
|
|||
{1.0f, 2.0f, 3.0f});
|
||||
test.AddOutput<int64_t>("reduced", {},
|
||||
{2});
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); // TensorRT: node1: at least 2 dimensions are required for input
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); // TensorRT: node1: at least 2 dimensions are required for input
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ArgMax_int32) {
|
||||
|
|
@ -1796,7 +1815,7 @@ TEST(ReductionOpTest, ArgMin_do_not_keepdims_2) {
|
|||
test.AddInput<float>("data", {3},
|
||||
{1.0f, 2.0f, 3.0f});
|
||||
test.AddOutput<int64_t>("reduced", {}, {0});
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); // TensorRT: node1: at least 2 dimensions are required for input
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); // TensorRT: node1: at least 2 dimensions are required for input
|
||||
}
|
||||
|
||||
TEST(ReductionOpTest, ArgMin_do_not_keepdims_2_select_last) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue