Add int8/int32 Relu for Opset 14 (#7536)

* Add int8 Relu for Opset 14

* update kernel def hashes and exclude TensorRT for int8 relu

Co-authored-by: Hari Vallabhaneni <harivall@berkeley.edu>
This commit is contained in:
Pranav Prakash 2021-05-24 13:19:14 -07:00 committed by GitHub
parent 98007f0be6
commit f487f6be25
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 1 deletions

View file

@ -49,6 +49,8 @@ REGISTER_VERSIONED_UNARY_ELEMENTWISE_TYPED_KERNEL(Relu, 13, 13, float);
REGISTER_VERSIONED_UNARY_ELEMENTWISE_TYPED_KERNEL(Relu, 13, 13, double);
REGISTER_UNARY_ELEMENTWISE_TYPED_KERNEL(Relu, 14, float);
REGISTER_UNARY_ELEMENTWISE_TYPED_KERNEL(Relu, 14, double);
REGISTER_UNARY_ELEMENTWISE_TYPED_KERNEL(Relu, 14, int8_t);
REGISTER_UNARY_ELEMENTWISE_TYPED_KERNEL(Relu, 14, int32_t);
REGISTER_UNARY_ELEMENTWISE_KERNEL(Selu, 6);
REGISTER_VERSIONED_UNARY_ELEMENTWISE_TYPED_KERNEL(Sigmoid, 6, 12, float);
REGISTER_VERSIONED_UNARY_ELEMENTWISE_TYPED_KERNEL(Sigmoid, 6, 12, double);

View file

@ -665,6 +665,8 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain,
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, int64_t, CumSum);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, float, Relu);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, double, Relu);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, int8_t, Relu);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, int32_t, Relu);
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, Trilu);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, float, Add);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, double, Add);
@ -1777,6 +1779,10 @@ Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) {
Relu)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, double,
Relu)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, int8_t,
Relu)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, int32_t,
Relu)>,
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, Trilu)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, float, Add)>,
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 14, double, Add)>,

View file

@ -100,6 +100,12 @@ TEST_F(ActivationOpTest, Relu) {
TestActivationOp<double>("Relu",
input_values_double,
[](double x) { return std::max(x, 0.0); });
TestActivationOp<int8_t>("Relu",
input_values_int8,
[](int8_t x) { return std::max(x, static_cast<int8_t>(0)); },
{},
/*is_tensorrt_supported=*/ false,
/*opset_version= */ 14);
}
TEST_F(ActivationOpTest, Elu) {

View file

@ -82,6 +82,8 @@ class ActivationOpTest : public ::testing::Test {
100.0, -100.0, 1000.0, -1000.0, // input values that leads to exp() overflow
DBL_MIN, DBL_MIN / 10, -DBL_MIN / 10, // min, denorm, -denorm
DBL_MAX, -DBL_MAX, std::numeric_limits<double>::infinity()}}; // max, -max, inf
std::vector<std::vector<int8_t>> input_values_int8{{-1, -5, 0, 1, 5, 100, -100, // normal input values for activation
std::numeric_limits<int8_t>::min(), std::numeric_limits<int8_t>::max()}}; // min, max
void SetUp() override {
float low = -1.0f, high = 1.0f;

View file

@ -1999,6 +1999,14 @@
"Relu ai.onnx CPUExecutionProvider",
17992752176767437224
],
[
"Relu ai.onnx CPUExecutionProvider",
800813007613791272
],
[
"Relu ai.onnx CPUExecutionProvider",
8895401642537447048
],
[
"Reshape ai.onnx CPUExecutionProvider",
15585679549439997664
@ -2523,4 +2531,4 @@
"Xor ai.onnx CPUExecutionProvider",
14631049987911195736
]
]
]