mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-10 17:37:14 +00:00
Register OpSet13 CUDA Kernels for BERT/UniLMv2 (#4856)
* opset13 cuda kernels for BERT. * add opset13 SoftmaxCrossEntropyLoss. * opset13 size. * fix argmax/min for ut. * fix ut failure for argmax/min. * OrtMemTypeCPUInput Co-authored-by: Vincent Wang <weicwang@microsoft.com>
This commit is contained in:
parent
370d194db7
commit
84de14a833
31 changed files with 1213 additions and 423 deletions
|
|
@ -432,6 +432,23 @@ using BuildKernelCreateInfoFn = KernelCreateInfo (*)();
|
|||
static_cast<KernelCreatePtrFn>([](const OpKernelInfo& info) -> OpKernel* { return new __VA_ARGS__(info); })); \
|
||||
}
|
||||
|
||||
#define ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(provider, domain, startver, endver, type1, type2, name) \
|
||||
provider##_##name##_##domain##_ver##startver##_##endver##_##type1##_##type2
|
||||
|
||||
#define ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_EX(name, domain, startver, endver, type1, type2, provider, builder, ...) \
|
||||
class ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(provider, domain, startver, endver, type1, type2, name); \
|
||||
template <> \
|
||||
KernelCreateInfo \
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(provider, domain, startver, endver, type1, type2, name)>() { \
|
||||
return KernelCreateInfo( \
|
||||
builder.SetName(#name) \
|
||||
.SetDomain(domain) \
|
||||
.SinceVersion(startver, endver) \
|
||||
.Provider(provider) \
|
||||
.Build(), \
|
||||
static_cast<KernelCreatePtrFn>([](const OpKernelInfo& info) -> OpKernel* { return new __VA_ARGS__(info); })); \
|
||||
}
|
||||
|
||||
// Use within macro definitions to create a custom vector of constraints.
|
||||
// Example: #define REG_KERNEL(OP, VERSION, KERNEL_CLASS, Type, ...)
|
||||
// .TypeConstraint("T", BuildKernelDefConstraints<Type, __VA_ARGS_>())
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ class ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDoma
|
|||
class ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 4, Reshape_1);
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 5, Reshape);
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, Shape);
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, Size);
|
||||
class ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 12, Size);
|
||||
class ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 9, Slice);
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, SpaceToDepth);
|
||||
class ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, DepthToSpace);
|
||||
|
|
@ -456,6 +456,7 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain,
|
|||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, double_double, Dropout);
|
||||
|
||||
// opset 13
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, Size);
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, Cast);
|
||||
class ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, Sign);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, uint8_t, DequantizeLinear);
|
||||
|
|
@ -710,7 +711,7 @@ Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) {
|
|||
Reshape_1)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 5, Reshape)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, Shape)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, Size)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 12, Size)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 9,
|
||||
Slice)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, SpaceToDepth)>,
|
||||
|
|
@ -1159,6 +1160,7 @@ Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) {
|
|||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 12, double_double, Dropout)>,
|
||||
|
||||
// opset 13
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, Size)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, Cast)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, Sign)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 13, uint8_t,
|
||||
|
|
|
|||
|
|
@ -26,9 +26,28 @@ Status Size::Compute(OpKernelContext* ctx) const {
|
|||
// omit this.
|
||||
// TODO: Both onnxruntime and ONNX lists of types seem somewhat incomplete and incomparable.
|
||||
|
||||
ONNX_CPU_OPERATOR_VERSIONED_KERNEL(
|
||||
Size,
|
||||
1, 12,
|
||||
KernelDefBuilder().TypeConstraint("T",
|
||||
std::vector<MLDataType>({DataTypeImpl::GetTensorType<float>(),
|
||||
DataTypeImpl::GetTensorType<double>(),
|
||||
DataTypeImpl::GetTensorType<int8_t>(),
|
||||
DataTypeImpl::GetTensorType<int16_t>(),
|
||||
DataTypeImpl::GetTensorType<int32_t>(),
|
||||
DataTypeImpl::GetTensorType<int64_t>(),
|
||||
DataTypeImpl::GetTensorType<uint8_t>(),
|
||||
DataTypeImpl::GetTensorType<uint16_t>(),
|
||||
DataTypeImpl::GetTensorType<uint32_t>(),
|
||||
DataTypeImpl::GetTensorType<uint64_t>(),
|
||||
DataTypeImpl::GetTensorType<std::string>(),
|
||||
DataTypeImpl::GetTensorType<bool>()}))
|
||||
.TypeConstraint("T1", DataTypeImpl::GetTensorType<int64_t>()),
|
||||
Size);
|
||||
|
||||
ONNX_CPU_OPERATOR_KERNEL(
|
||||
Size,
|
||||
1,
|
||||
13,
|
||||
KernelDefBuilder().TypeConstraint("T",
|
||||
std::vector<MLDataType>({DataTypeImpl::GetTensorType<float>(),
|
||||
DataTypeImpl::GetTensorType<double>(),
|
||||
|
|
|
|||
|
|
@ -6,6 +6,19 @@
|
|||
namespace onnxruntime {
|
||||
namespace cuda {
|
||||
|
||||
#define REGISTER_ACTIVATION_VERSIONED_KERNEL(x, startver, endver, T) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
x, \
|
||||
kOnnxDomain, \
|
||||
startver, \
|
||||
endver, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::GetTensorType<T>()) \
|
||||
.MayInplace(0, 0), \
|
||||
x<T>);
|
||||
|
||||
#define REGISTER_ACTIVATION_KERNEL(x, ver, T) \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
x, \
|
||||
|
|
@ -32,6 +45,14 @@ namespace cuda {
|
|||
return Status::OK(); \
|
||||
}
|
||||
|
||||
#define UNARY_ACTIVATION_OP_VERSIONED_TYPED(name, startver, endver, T) \
|
||||
REGISTER_ACTIVATION_VERSIONED_KERNEL(name, startver, endver, T)
|
||||
|
||||
#define UNARY_ACTIVATION_OP_VERSIONED_HFD(name, startver, endver) \
|
||||
UNARY_ACTIVATION_OP_VERSIONED_TYPED(name, startver, endver, MLFloat16) \
|
||||
UNARY_ACTIVATION_OP_VERSIONED_TYPED(name, startver, endver, float) \
|
||||
UNARY_ACTIVATION_OP_VERSIONED_TYPED(name, startver, endver, double)
|
||||
|
||||
#define UNARY_ACTIVATION_OP_TYPED(name, ver, T) \
|
||||
REGISTER_ACTIVATION_KERNEL(name, ver, T) \
|
||||
UNARY_ACTIVATION_COMPUTE(name, T)
|
||||
|
|
@ -44,12 +65,15 @@ namespace cuda {
|
|||
UNARY_ACTIVATION_OP_HFD(Elu, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(HardSigmoid, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(LeakyRelu, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(Relu, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(Relu, 13);
|
||||
UNARY_ACTIVATION_OP_VERSIONED_HFD(Relu, 6, 12);
|
||||
UNARY_ACTIVATION_OP_HFD(Selu, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(Sigmoid, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(Sigmoid, 13);
|
||||
UNARY_ACTIVATION_OP_VERSIONED_HFD(Sigmoid, 6, 12);
|
||||
UNARY_ACTIVATION_OP_HFD(Softplus, 1);
|
||||
UNARY_ACTIVATION_OP_HFD(Softsign, 1);
|
||||
UNARY_ACTIVATION_OP_HFD(Tanh, 6);
|
||||
UNARY_ACTIVATION_OP_HFD(Tanh, 13);
|
||||
UNARY_ACTIVATION_OP_VERSIONED_HFD(Tanh, 6, 12);
|
||||
UNARY_ACTIVATION_OP_HFD(ThresholdedRelu, 10);
|
||||
|
||||
} // namespace cuda
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -158,6 +158,9 @@ Status BinaryElementwise<ShouldBroadcast>::Prepare(OpKernelContext* context, Bin
|
|||
return Status::OK(); \
|
||||
}
|
||||
|
||||
#define BINARY_OP_VERSIONED_TYPED(name, startver, endver, T) \
|
||||
BINARY_ELEMENTWISE_REGISTER_KERNEL_VERSIONED_TYPED(name, startver, endver, T)
|
||||
|
||||
#define BINARY_OP_TYPED(name, ver, T) \
|
||||
BINARY_ELEMENTWISE_REGISTER_KERNEL_TYPED(name, ver, T) \
|
||||
BINARY_ELEMENTWISE_COMPUTE(name, T)
|
||||
|
|
@ -185,6 +188,18 @@ Status BinaryElementwise<ShouldBroadcast>::Prepare(OpKernelContext* context, Bin
|
|||
// D: double
|
||||
// O: bool
|
||||
|
||||
#define BINARY_OP_VERSIONED_HFD(name, startver, endver) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, MLFloat16) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, float) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, double)
|
||||
|
||||
#define BINARY_OP_VERSIONED_UZILHFD(name, startver, endver) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, uint32_t) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, uint64_t) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, int32_t) \
|
||||
BINARY_OP_VERSIONED_TYPED(name, startver, endver, int64_t) \
|
||||
BINARY_OP_VERSIONED_HFD(name, startver, endver)
|
||||
|
||||
#define BINARY_OP_HFD(name, ver) \
|
||||
BINARY_OP_TYPED(name, ver, MLFloat16) \
|
||||
BINARY_OP_TYPED(name, ver, float) \
|
||||
|
|
@ -250,21 +265,35 @@ Status BinaryElementwise<ShouldBroadcast>::Prepare(OpKernelContext* context, Bin
|
|||
BINARY_ELEMENTWISE_REGISTER_KERNEL_VERSIONED_TYPED(name, startver, endver, int64_t) \
|
||||
BINARY_OP_REGISTER_VERSIONED_HFD(name, startver, endver)
|
||||
|
||||
BINARY_OP_UZILHFD(Add, 7)
|
||||
BINARY_OP_UZILHFD(Sub, 7)
|
||||
BINARY_OP_UZILHFD(Mul, 7)
|
||||
BINARY_OP_UZILHFD(Div, 7)
|
||||
BINARY_OP_VERSIONED_UZILHFD(Add, 7, 12)
|
||||
BINARY_OP_VERSIONED_UZILHFD(Sub, 7, 12)
|
||||
BINARY_OP_VERSIONED_UZILHFD(Mul, 7, 12)
|
||||
BINARY_OP_VERSIONED_UZILHFD(Div, 7, 12)
|
||||
|
||||
BINARY_OP_UZILHFD(Add, 13)
|
||||
BINARY_OP_UZILHFD(Sub, 13)
|
||||
BINARY_OP_UZILHFD(Mul, 13)
|
||||
BINARY_OP_UZILHFD(Div, 13)
|
||||
|
||||
BINARY_OP_REGISTER_VERSIONED_CLASS_HFD(Pow, Pow_7, 7, 11)
|
||||
BINARY_LOGICALOP_TYPED(And, 7, bool)
|
||||
BINARY_LOGICALOP_TYPED(Or, 7, bool)
|
||||
BINARY_LOGICALOP_TYPED(Xor, 7, bool)
|
||||
BINARY_OP_HFD(PRelu, 7)
|
||||
|
||||
// Pow version 12
|
||||
// Pow since version 12
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Pow,
|
||||
kOnnxDomain,
|
||||
12, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder().TypeConstraint("T", BuildKernelDefConstraints<int32_t, int64_t, float, double>()).TypeConstraint("T1", BuildKernelDefConstraints<int32_t, int64_t, float, double>()),
|
||||
Pow);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Pow,
|
||||
kOnnxDomain,
|
||||
12,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder().TypeConstraint("T", BuildKernelDefConstraints<int32_t, int64_t, float, double>()).TypeConstraint("T1", BuildKernelDefConstraints<int32_t, int64_t, float, double>()),
|
||||
Pow);
|
||||
|
|
@ -410,11 +439,14 @@ Status Less<T>::ComputeInternal(OpKernelContext* context) const {
|
|||
return Status::OK();
|
||||
}
|
||||
|
||||
BINARY_LOGICALOP_REGISTER_UZILHFD(Greater, 9)
|
||||
BINARY_OP_REGISTER_OIL(Equal, 13)
|
||||
BINARY_OP_REGISTER_VERSIONED_OIL(Equal, 11, 12)
|
||||
BINARY_OP_REGISTER_VERSIONED_OIL(Equal, 7, 10)
|
||||
BINARY_OP_REGISTER_OIL(Equal, 11)
|
||||
BINARY_LOGICALOP_REGISTER_UZILHFD(Greater, 13)
|
||||
BINARY_OP_REGISTER_VERSIONED_UZILHFD(Greater, 9, 12)
|
||||
BINARY_OP_REGISTER_VERSIONED_HFD(Greater, 7, 8)
|
||||
BINARY_LOGICALOP_REGISTER_UZILHFD(Less, 9)
|
||||
BINARY_LOGICALOP_REGISTER_UZILHFD(Less, 13)
|
||||
BINARY_OP_REGISTER_VERSIONED_UZILHFD(Less, 9, 12)
|
||||
BINARY_OP_REGISTER_VERSIONED_HFD(Less, 7, 8)
|
||||
|
||||
} // namespace cuda
|
||||
|
|
|
|||
|
|
@ -30,10 +30,20 @@ namespace cuda {
|
|||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
Gemm<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
Gemm, \
|
||||
kOnnxDomain, \
|
||||
11, \
|
||||
12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
Gemm<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
Gemm, \
|
||||
kOnnxDomain, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
|
|
|
|||
|
|
@ -19,10 +19,19 @@ namespace cuda {
|
|||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
MatMul<T>); \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
MatMul, \
|
||||
kOnnxDomain, \
|
||||
9, 12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
MatMul<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
MatMul, \
|
||||
kOnnxDomain, \
|
||||
9, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
|
|
|
|||
|
|
@ -65,10 +65,18 @@ SPECIALIZED_SOFTMAX_HELPER_IMPL(MLFloat16)
|
|||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
Softmax<T>); \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
Softmax, \
|
||||
kOnnxDomain, \
|
||||
11, 12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
Softmax<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
Softmax, \
|
||||
kOnnxDomain, \
|
||||
11, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
|
|
@ -81,10 +89,18 @@ SPECIALIZED_SOFTMAX_HELPER_IMPL(MLFloat16)
|
|||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
Softmax<T>); \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
LogSoftmax, \
|
||||
kOnnxDomain, \
|
||||
11, 12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
Softmax<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
LogSoftmax, \
|
||||
kOnnxDomain, \
|
||||
11, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
|
|
|
|||
|
|
@ -13,6 +13,17 @@ Status UnaryElementwise::Prepare(OpKernelContext* context, UnaryElementwisePrepa
|
|||
return Status::OK();
|
||||
}
|
||||
|
||||
#define UNARY_ELEMENTWISE_REGISTER_VERSIONED_KERNEL(x, startver, endver, T) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
x, \
|
||||
kOnnxDomain, \
|
||||
startver, \
|
||||
endver, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
x<T>);
|
||||
|
||||
#define UNARY_ELEMENTWISE_REGISTER_KERNEL(x, ver, T) \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
x, \
|
||||
|
|
@ -46,6 +57,9 @@ Status UnaryElementwise::Prepare(OpKernelContext* context, UnaryElementwisePrepa
|
|||
return Status::OK(); \
|
||||
}
|
||||
|
||||
#define UNARY_OP_VERSIONED_TYPED(name, startver, endver, T) \
|
||||
UNARY_ELEMENTWISE_REGISTER_VERSIONED_KERNEL(name, startver, endver, T)
|
||||
|
||||
#define UNARY_OP_TYPED(name, ver, T) \
|
||||
UNARY_ELEMENTWISE_REGISTER_KERNEL(name, ver, T) \
|
||||
UNARY_ELEMENTWISE_COMPUTE(name, T)
|
||||
|
|
@ -68,6 +82,25 @@ Status UnaryElementwise::Prepare(OpKernelContext* context, UnaryElementwisePrepa
|
|||
// D: double
|
||||
// O: bool
|
||||
|
||||
#define UNARY_OP_VERSIONED_HFD(name, startver, endver) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, MLFloat16) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, float) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, double)
|
||||
|
||||
#define UNARY_OP_VERSIONED_CSILHFD(name, startver, endver) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, int8_t) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, int16_t) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, int32_t) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, int64_t) \
|
||||
UNARY_OP_VERSIONED_HFD(name, startver, endver)
|
||||
|
||||
#define UNARY_OP_VERSIONED_BWUZCSILHFD(name, startver, endver) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, uint8_t) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, uint16_t) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, uint32_t) \
|
||||
UNARY_OP_VERSIONED_TYPED(name, startver, endver, uint64_t) \
|
||||
UNARY_OP_VERSIONED_CSILHFD(name, startver, endver)
|
||||
|
||||
#define UNARY_OP_HFD(name, ver) \
|
||||
UNARY_OP_TYPED(name, ver, MLFloat16) \
|
||||
UNARY_OP_TYPED(name, ver, float) \
|
||||
|
|
@ -87,15 +120,26 @@ Status UnaryElementwise::Prepare(OpKernelContext* context, UnaryElementwisePrepa
|
|||
UNARY_OP_TYPED(name, ver, uint64_t) \
|
||||
UNARY_OP_CSILHFD(name, ver)
|
||||
|
||||
UNARY_OP_BWUZCSILHFD(Abs, 6)
|
||||
UNARY_OP_CSILHFD(Neg, 6)
|
||||
UNARY_OP_HFD(Floor, 6)
|
||||
UNARY_OP_HFD(Ceil, 6)
|
||||
UNARY_OP_HFD(Reciprocal, 6)
|
||||
UNARY_OP_HFD(Sqrt, 6)
|
||||
UNARY_OP_HFD(Log, 6)
|
||||
UNARY_OP_HFD(Exp, 6)
|
||||
UNARY_OP_HFD(Erf, 9)
|
||||
UNARY_OP_VERSIONED_BWUZCSILHFD(Abs, 6, 12)
|
||||
UNARY_OP_VERSIONED_CSILHFD(Neg, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Floor, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Ceil, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Reciprocal, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Sqrt, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Log, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Exp, 6, 12)
|
||||
UNARY_OP_VERSIONED_HFD(Erf, 9, 12)
|
||||
|
||||
UNARY_OP_BWUZCSILHFD(Abs, 13)
|
||||
UNARY_OP_CSILHFD(Neg, 13)
|
||||
UNARY_OP_HFD(Floor, 13)
|
||||
UNARY_OP_HFD(Ceil, 13)
|
||||
UNARY_OP_HFD(Reciprocal, 13)
|
||||
UNARY_OP_HFD(Sqrt, 13)
|
||||
UNARY_OP_HFD(Log, 13)
|
||||
UNARY_OP_HFD(Exp, 13)
|
||||
UNARY_OP_HFD(Erf, 13)
|
||||
|
||||
UNARY_LOGICALOP_TYPED(Not, 1, bool)
|
||||
UNARY_OP_HFD(Round, 11)
|
||||
|
||||
|
|
|
|||
|
|
@ -233,13 +233,16 @@ const auto k_hfd_datatypes =
|
|||
KernelDefBuilder().TypeConstraint("T", datatypes), \
|
||||
impl_class)
|
||||
|
||||
REGISTER_KERNEL(Sum, SumOp, 8, k_hfd_datatypes)
|
||||
REGISTER_KERNEL(Sum, SumOp, 13, k_hfd_datatypes)
|
||||
REGISTER_VERSIONED_KERNEL(Sum, SumOp, 8, 12, k_hfd_datatypes)
|
||||
REGISTER_VERSIONED_KERNEL(Sum, SumOp, 6, 7, k_hfd_datatypes)
|
||||
|
||||
REGISTER_KERNEL(Min, MinOp, 12, k_uzilhfd_datatypes)
|
||||
REGISTER_KERNEL(Min, MinOp, 13, k_uzilhfd_datatypes)
|
||||
REGISTER_VERSIONED_KERNEL(Min, MinOp, 12, 12, k_uzilhfd_datatypes)
|
||||
REGISTER_VERSIONED_KERNEL(Min, MinOp, 6, 11, k_hfd_datatypes)
|
||||
|
||||
REGISTER_KERNEL(Max, MaxOp, 12, k_uzilhfd_datatypes)
|
||||
REGISTER_KERNEL(Max, MaxOp, 13, k_uzilhfd_datatypes)
|
||||
REGISTER_VERSIONED_KERNEL(Max, MaxOp, 12, 12, k_uzilhfd_datatypes)
|
||||
REGISTER_VERSIONED_KERNEL(Max, MaxOp, 6, 11, k_hfd_datatypes)
|
||||
|
||||
#undef REGISTER_VERSIONED_KERNEL
|
||||
|
|
|
|||
|
|
@ -6,10 +6,23 @@
|
|||
namespace onnxruntime {
|
||||
namespace cuda {
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Dropout,
|
||||
kOnnxDomain,
|
||||
12, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllIEEEFloatTensorTypes())
|
||||
.TypeConstraint("T1", DataTypeImpl::AllIEEEFloatTensorTypes())
|
||||
.TypeConstraint("T2", DataTypeImpl::GetTensorType<bool>())
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(1)
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(2),
|
||||
Dropout<false>);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Dropout,
|
||||
kOnnxDomain,
|
||||
12,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllIEEEFloatTensorTypes())
|
||||
|
|
|
|||
|
|
@ -24,16 +24,24 @@ namespace cuda {
|
|||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>); \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
kOnnxDomain, \
|
||||
11, 12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
kOnnxDomain, \
|
||||
11, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>);
|
||||
|
||||
// Register with the latest version 12
|
||||
// Register those with changes in OpSet12.
|
||||
#define REGISTER_KERNEL_TYPED_12(name, T) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
|
|
@ -51,10 +59,37 @@ namespace cuda {
|
|||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>); \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
kOnnxDomain, \
|
||||
12, 12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
kOnnxDomain, \
|
||||
12, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>);
|
||||
|
||||
// CUDA ArgMax/ArgMin doesn't have OpSet12 implementation (with select_last_index attr), keep it in OpSet11 for now.
|
||||
#define REGISTER_KERNEL_TYPED_11(name, T) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
kOnnxDomain, \
|
||||
1, 10, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
name<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
name, \
|
||||
kOnnxDomain, \
|
||||
11, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<T>()), \
|
||||
|
|
@ -890,8 +925,13 @@ template Tensor ReduceCompute<double, CUDNN_REDUCE_TENSOR_NO_INDICES>(
|
|||
REGISTER_KERNEL_TYPED(name, float) \
|
||||
REGISTER_KERNEL_TYPED(name, double)
|
||||
|
||||
REGISTER_KERNEL_HFD(ArgMax)
|
||||
REGISTER_KERNEL_HFD(ArgMin)
|
||||
#define REGISTER_KERNEL_HFD_11(name) \
|
||||
REGISTER_KERNEL_TYPED_11(name, MLFloat16) \
|
||||
REGISTER_KERNEL_TYPED_11(name, float) \
|
||||
REGISTER_KERNEL_TYPED_11(name, double)
|
||||
|
||||
REGISTER_KERNEL_HFD_11(ArgMax)
|
||||
REGISTER_KERNEL_HFD_11(ArgMin)
|
||||
REGISTER_KERNEL_HFD(ReduceL1)
|
||||
REGISTER_KERNEL_HFD(ReduceL2)
|
||||
|
||||
|
|
|
|||
|
|
@ -34,10 +34,20 @@ const std::vector<MLDataType> castOpTypeConstraints{
|
|||
.TypeConstraint("T1", DataTypeImpl::GetTensorType<T>()) \
|
||||
.TypeConstraint("T2", castOpTypeConstraints), \
|
||||
Cast<T>); \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
Cast, \
|
||||
kOnnxDomain, \
|
||||
9, 12, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.TypeConstraint("T1", DataTypeImpl::GetTensorType<T>()) \
|
||||
.TypeConstraint("T2", castOpTypeConstraints), \
|
||||
Cast<T>); \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
Cast, \
|
||||
kOnnxDomain, \
|
||||
9, \
|
||||
13, \
|
||||
T, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
|
|
|
|||
|
|
@ -15,9 +15,17 @@ ONNX_OPERATOR_VERSIONED_KERNEL_EX(Concat,
|
|||
Concat);
|
||||
|
||||
// opset 11 explicitly support negative axis
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(Concat,
|
||||
kOnnxDomain,
|
||||
11, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
Concat);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(Concat,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
|
|
|
|||
|
|
@ -108,10 +108,20 @@ Status Expand::ComputeInternal(OpKernelContext* ctx) const {
|
|||
}
|
||||
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Expand,
|
||||
kOnnxDomain,
|
||||
8, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(1),
|
||||
Expand);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Expand,
|
||||
kOnnxDomain,
|
||||
8,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
|
|
|
|||
|
|
@ -20,11 +20,23 @@ ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
|||
DataTypeImpl::GetTensorType<int64_t>()}),
|
||||
Gather);
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Gather,
|
||||
kOnnxDomain,
|
||||
11, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
.TypeConstraint("Tind", std::vector<MLDataType>{
|
||||
DataTypeImpl::GetTensorType<int32_t>(),
|
||||
DataTypeImpl::GetTensorType<int64_t>()}),
|
||||
Gather);
|
||||
|
||||
// explicit negative axis support
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Gather,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
|
|
|
|||
|
|
@ -12,7 +12,19 @@ namespace cuda {
|
|||
ONNX_OPERATOR_KERNEL_EX(
|
||||
GatherElements,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
.TypeConstraint("Tind", std::vector<MLDataType>{
|
||||
DataTypeImpl::GetTensorType<int32_t>(),
|
||||
DataTypeImpl::GetTensorType<int64_t>()}),
|
||||
GatherElements);
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
GatherElements,
|
||||
kOnnxDomain,
|
||||
11, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
|
|
|
|||
|
|
@ -90,6 +90,19 @@ Status GatherNDBase::PrepareCompute(
|
|||
return Status::OK();
|
||||
}
|
||||
|
||||
#define REGISTER_KERNEL_VERSIONED_TYPED_GATHER_ND(TIndex, startver, endver) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
GatherND, \
|
||||
kOnnxDomain, \
|
||||
startver, \
|
||||
endver, \
|
||||
TIndex, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::AllIEEEFloatTensorTypes()) \
|
||||
.TypeConstraint("Tind", DataTypeImpl::GetTensorType<TIndex>()), \
|
||||
GatherND<TIndex>);
|
||||
|
||||
#define REGISTER_KERNEL_TYPED_GATHER_ND(TIndex, ver) \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
GatherND, \
|
||||
|
|
@ -112,7 +125,8 @@ Status GatherNDBase::PrepareCompute(
|
|||
#ifdef ENABLE_TRAINING
|
||||
REGISTER_KERNEL_TYPED_GATHER_ND(int64_t, 1)
|
||||
#endif
|
||||
REGISTER_KERNEL_TYPED_GATHER_ND(int64_t, 12)
|
||||
REGISTER_KERNEL_TYPED_GATHER_ND(int64_t, 13)
|
||||
REGISTER_KERNEL_VERSIONED_TYPED_GATHER_ND(int64_t, 12, 12)
|
||||
|
||||
template <typename T>
|
||||
struct GatherNDComputeImpl {
|
||||
|
|
|
|||
|
|
@ -11,10 +11,18 @@ namespace cuda {
|
|||
|
||||
// kernel builder functions
|
||||
#define NONZERO_TYPED_KERNEL_WITH_TYPE_NAME(type, type_name) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
NonZero, \
|
||||
kOnnxDomain, \
|
||||
9, 12, \
|
||||
type_name, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<type>()), \
|
||||
NonZero<type>) \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
NonZero, \
|
||||
kOnnxDomain, \
|
||||
9, \
|
||||
13, \
|
||||
type_name, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::GetTensorType<type>()), \
|
||||
|
|
|
|||
|
|
@ -9,7 +9,19 @@ namespace cuda {
|
|||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Reshape,
|
||||
kOnnxDomain,
|
||||
5,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
.TypeConstraint("shape", DataTypeImpl::GetTensorType<int64_t>())
|
||||
.Alias(0, 0)
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(1),
|
||||
Reshape);
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Reshape,
|
||||
kOnnxDomain,
|
||||
5, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
|
|
|
|||
|
|
@ -22,10 +22,23 @@ ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
|||
DataTypeImpl::GetTensorType<int64_t>()}),
|
||||
ScatterElements);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
ScatterElements,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
.TypeConstraint("Tind", std::vector<MLDataType>{
|
||||
DataTypeImpl::GetTensorType<int32_t>(),
|
||||
DataTypeImpl::GetTensorType<int64_t>()}),
|
||||
ScatterElements);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
ScatterElements,
|
||||
kOnnxDomain,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
|
|
|
|||
|
|
@ -7,10 +7,21 @@
|
|||
namespace onnxruntime {
|
||||
namespace cuda {
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Shape,
|
||||
kOnnxDomain,
|
||||
1, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.OutputMemoryType<OrtMemTypeCPUOutput>(0)
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes())
|
||||
.TypeConstraint("T1", DataTypeImpl::GetTensorType<int64_t>()),
|
||||
Shape);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Shape,
|
||||
kOnnxDomain,
|
||||
1,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.OutputMemoryType<OrtMemTypeCPUOutput>(0)
|
||||
|
|
|
|||
|
|
@ -7,10 +7,21 @@
|
|||
namespace onnxruntime {
|
||||
namespace cuda {
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Size,
|
||||
kOnnxDomain,
|
||||
1, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.OutputMemoryType<OrtMemTypeCPUInput>(0)
|
||||
.TypeConstraint("T", DataTypeImpl::AllTensorTypes())
|
||||
.TypeConstraint("T1", DataTypeImpl::GetTensorType<int64_t>()),
|
||||
Size);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Size,
|
||||
kOnnxDomain,
|
||||
1,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
// properly force CPU/GPU synch inside the kernel
|
||||
|
|
|
|||
|
|
@ -43,11 +43,11 @@ REGISTER_V10_TYPED_SLICE(int32_t)
|
|||
REGISTER_V10_TYPED_SLICE(int64_t)
|
||||
REGISTER_V10_TYPED_SLICE(float)
|
||||
|
||||
#define REGISTER_V11_TYPED_SLICE(TIND) \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
#define REGISTER_V12_TYPED_SLICE(TIND) \
|
||||
ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \
|
||||
Slice, \
|
||||
kOnnxDomain, \
|
||||
11, \
|
||||
11, 12, \
|
||||
TIND, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
|
|
@ -59,9 +59,29 @@ REGISTER_V10_TYPED_SLICE(float)
|
|||
.TypeConstraint("Tind", DataTypeImpl::GetTensorType<TIND>()), \
|
||||
Slice<true>);
|
||||
|
||||
REGISTER_V11_TYPED_SLICE(int32_t)
|
||||
REGISTER_V11_TYPED_SLICE(int64_t)
|
||||
REGISTER_V11_TYPED_SLICE(float)
|
||||
REGISTER_V12_TYPED_SLICE(int32_t)
|
||||
REGISTER_V12_TYPED_SLICE(int64_t)
|
||||
REGISTER_V12_TYPED_SLICE(float)
|
||||
|
||||
#define REGISTER_V13_TYPED_SLICE(TIND) \
|
||||
ONNX_OPERATOR_TYPED_KERNEL_EX( \
|
||||
Slice, \
|
||||
kOnnxDomain, \
|
||||
13, \
|
||||
TIND, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(1) \
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(2) \
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(3) \
|
||||
.InputMemoryType<OrtMemTypeCPUInput>(4) \
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()) \
|
||||
.TypeConstraint("Tind", DataTypeImpl::GetTensorType<TIND>()), \
|
||||
Slice<true>);
|
||||
|
||||
REGISTER_V13_TYPED_SLICE(int32_t)
|
||||
REGISTER_V13_TYPED_SLICE(int64_t)
|
||||
REGISTER_V13_TYPED_SLICE(float)
|
||||
|
||||
static Status SliceImpCore(const void* input_data, void* output_data,
|
||||
size_t element_size, size_t dimension_count,
|
||||
|
|
|
|||
|
|
@ -16,9 +16,16 @@ ONNX_OPERATOR_VERSIONED_KERNEL_EX(Split,
|
|||
Split);
|
||||
|
||||
// explicitly supports negative axis
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(Split,
|
||||
kOnnxDomain,
|
||||
11, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
Split);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(Split,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder().TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
Split);
|
||||
|
|
|
|||
|
|
@ -17,10 +17,20 @@ ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
|||
Squeeze);
|
||||
|
||||
// explicit support for negative axis.
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Squeeze,
|
||||
kOnnxDomain,
|
||||
11, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.Alias(0, 0)
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
Squeeze);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Squeeze,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.Alias(0, 0)
|
||||
|
|
|
|||
|
|
@ -9,9 +9,17 @@
|
|||
namespace onnxruntime {
|
||||
namespace cuda {
|
||||
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(Transpose,
|
||||
kOnnxDomain,
|
||||
1, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
Transpose);
|
||||
|
||||
ONNX_OPERATOR_KERNEL_EX(Transpose,
|
||||
kOnnxDomain,
|
||||
1,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
|
|
|
|||
|
|
@ -17,10 +17,21 @@ ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
|||
Unsqueeze);
|
||||
|
||||
// explicitly support negative axis
|
||||
ONNX_OPERATOR_VERSIONED_KERNEL_EX(
|
||||
Unsqueeze,
|
||||
kOnnxDomain,
|
||||
11, 12,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.Alias(0, 0)
|
||||
.TypeConstraint("T", DataTypeImpl::AllFixedSizeTensorTypes()),
|
||||
Unsqueeze);
|
||||
|
||||
// support bfloat16
|
||||
ONNX_OPERATOR_KERNEL_EX(
|
||||
Unsqueeze,
|
||||
kOnnxDomain,
|
||||
11,
|
||||
13,
|
||||
kCudaExecutionProvider,
|
||||
KernelDefBuilder()
|
||||
.Alias(0, 0)
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1
|
|||
class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 9, float, int64_t, SparseSoftmaxCrossEntropy);
|
||||
// class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 9, float, int32_t, SparseSoftmaxCrossEntropyGrad);
|
||||
class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 9, float, int64_t, SparseSoftmaxCrossEntropyGrad);
|
||||
class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 12, float, int64_t, SoftmaxCrossEntropyLoss);
|
||||
class ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 12, 12, float, int64_t, SoftmaxCrossEntropyLoss);
|
||||
class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 13, float, int64_t, SoftmaxCrossEntropyLoss);
|
||||
class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, int64_t, SoftmaxCrossEntropyLossGrad);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, SoftmaxGrad);
|
||||
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, double, SoftmaxGrad);
|
||||
|
|
@ -193,7 +194,8 @@ Status RegisterCudaTrainingKernels(KernelRegistry& kernel_registry) {
|
|||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, LogSoftmaxGrad)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, double, LogSoftmaxGrad)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, MLFloat16, LogSoftmaxGrad)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 12, float, int64_t, SoftmaxCrossEntropyLoss)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 12, 12, float, int64_t, SoftmaxCrossEntropyLoss)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 13, float, int64_t, SoftmaxCrossEntropyLoss)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, int64_t, SoftmaxCrossEntropyLossGrad)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, BatchNormalizationGrad)>,
|
||||
BuildKernelCreateInfo<ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, double, BatchNormalizationGrad)>,
|
||||
|
|
|
|||
|
|
@ -11,6 +11,18 @@
|
|||
namespace onnxruntime {
|
||||
namespace cuda {
|
||||
|
||||
#define REGISTER_KERNEL_VERSIONED_TYPED_TWO_TYPES(Class, T, Tin, domain, startver, endver) \
|
||||
ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_EX( \
|
||||
Class, \
|
||||
domain, \
|
||||
startver, endver, \
|
||||
T, Tin, \
|
||||
kCudaExecutionProvider, \
|
||||
KernelDefBuilder() \
|
||||
.TypeConstraint("T", DataTypeImpl::GetTensorType<T>()) \
|
||||
.TypeConstraint("Tin", DataTypeImpl::GetTensorType<Tin>()), \
|
||||
Class<T, Tin>);
|
||||
|
||||
#define REGISTER_KERNEL_TYPED_TWO_TYPES(Class, T, Tin, domain, version) \
|
||||
ONNX_OPERATOR_TWO_TYPED_KERNEL_EX( \
|
||||
Class, \
|
||||
|
|
@ -243,11 +255,15 @@ Status SoftmaxCrossEntropyLossGrad<T, Tin>::ComputeInternal(OpKernelContext* ctx
|
|||
return Status::OK();
|
||||
}
|
||||
|
||||
#define SPECIALIZED_VERSIONED_COMPUTE_SPARSE(Class, T, Tin, domain, startver, endvar) \
|
||||
REGISTER_KERNEL_VERSIONED_TYPED_TWO_TYPES(Class, T, Tin, domain, startver, endvar)
|
||||
|
||||
#define SPECIALIZED_COMPUTE_SPARSE(Class, T, Tin, domain, version) \
|
||||
REGISTER_KERNEL_TYPED_TWO_TYPES(Class, T, Tin, domain, version) \
|
||||
template Status Class<T, Tin>::ComputeInternal(OpKernelContext* ctx) const;
|
||||
|
||||
SPECIALIZED_COMPUTE_SPARSE(SoftmaxCrossEntropyLoss, float, int64_t, kOnnxDomain, 12)
|
||||
SPECIALIZED_VERSIONED_COMPUTE_SPARSE(SoftmaxCrossEntropyLoss, float, int64_t, kOnnxDomain, 12, 12)
|
||||
SPECIALIZED_COMPUTE_SPARSE(SoftmaxCrossEntropyLoss, float, int64_t, kOnnxDomain, 13)
|
||||
SPECIALIZED_COMPUTE_SPARSE(SoftmaxCrossEntropyLossGrad, float, int64_t, kMSDomain, 1)
|
||||
|
||||
} // namespace cuda
|
||||
|
|
|
|||
Loading…
Reference in a new issue