Skip to content

Commit c938552

Browse files
committed
add support for Sigmoid operator for Generic target
1 parent 6bfface commit c938552

11 files changed

Lines changed: 88 additions & 10 deletions

File tree

Deeploy/Targets/Generic/Bindings.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
FloatCeilTemplate, FloatClipTemplate, FloatConvTemplate, FloatDivTemplate, FloatDWConvTemplate, FloatExpTemplate, \
1717
FloatFloorTemplate, FloatGELUTemplate, FloatGemmTemplate, FloatLayernormTemplate, FloatMatMulTemplate, \
1818
FloatMaxPoolTemplate, FloatMulTemplate, FloatPadTemplate, FloatPowTemplate, FloatReduceMeanTemplate, \
19-
FloatReluTemplate, FloatSoftmaxTemplate, FloatSqrtTemplate, FloatSubTemplate, GatherTemplate, GemmTemplate, \
20-
IntegerDivTemplate, ITAMaxTemplate, ITAPartialMaxTemplate, MatMulTemplate, MaxPoolTemplate, MulTemplate, \
21-
PadTemplate, QuantTemplate, ReduceMeanTemplate, ReduceSumTemplate, RequantShiftTemplate, ReshapeTemplate, \
22-
RQIntegerDivTemplate, RQSiGELUTemplate, SliceTemplate, SubTemplate, TransposeTemplate, iGELUTemplate, \
23-
iLayernormTemplate, iRMSNormTemplate, iSoftmaxTemplate
19+
FloatReluTemplate, FloatSigmoidTemplate, FloatSoftmaxTemplate, FloatSqrtTemplate, FloatSubTemplate, \
20+
GatherTemplate, GemmTemplate, IntegerDivTemplate, ITAMaxTemplate, ITAPartialMaxTemplate, MatMulTemplate, \
21+
MaxPoolTemplate, MulTemplate, PadTemplate, QuantTemplate, ReduceMeanTemplate, ReduceSumTemplate, \
22+
RequantShiftTemplate, ReshapeTemplate, RQIntegerDivTemplate, RQSiGELUTemplate, SliceTemplate, SubTemplate, \
23+
TransposeTemplate, iGELUTemplate, iLayernormTemplate, iRMSNormTemplate, iSoftmaxTemplate
2424
from Deeploy.Targets.Generic.TypeCheckers import AddChecker, BatchNormChecker, ConcatChecker, ConvChecker, \
2525
DebugPrintChecker, DequantChecker, DivChecker, DummyChecker, GatherChecker, GELUChecker, GEMMChecker, \
2626
LayerNormChecker, MatMulChecker, MaxPoolChecker, MulChecker, PadChecker, QuantChecker, ReduceMeanChecker, \
@@ -362,3 +362,8 @@
362362
NodeBinding(DummyChecker([PointerClass(float32_t)], [PointerClass(float32_t)]), FloatExpTemplate.referenceTemplate,
363363
BasicTransformer),
364364
]
365+
366+
BasicSigmoidBindings = [
367+
NodeBinding(DummyChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
368+
FloatSigmoidTemplate.referenceTemplate, BasicTransformer),
369+
]

Deeploy/Targets/Generic/Layers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,3 +728,7 @@ class ClipLayer(ONNXLayer):
728728

729729
class ExpLayer(ONNXLayer):
730730
pass
731+
732+
733+
class SigmoidLayer(ONNXLayer):
734+
pass

Deeploy/Targets/Generic/Parsers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2920,3 +2920,9 @@ class ExpParser(UnaryElementWiseParser):
29202920

29212921
def parseNode(self, node: gs.Node) -> bool:
29222922
return super().parseNode(node) and node.op == 'Exp'
2923+
2924+
2925+
class SigmoidParser(UnaryElementWiseParser):
2926+
2927+
def parseNode(self, node: gs.Node) -> bool:
2928+
return super().parseNode(node) and node.op == 'Sigmoid'

Deeploy/Targets/Generic/Platform.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,22 @@
1313
BasicITAPartialSoftmaxBinding, BasicITASoftmaxBinding, BasicLayerNormBindings, BasicMatMulBindings, \
1414
BasicMaxPool1DBindings, BasicMaxPool2DBindings, BasicMulBindings, BasicPad1DBindings, BasicPad2DBindings, \
1515
BasicPowBindings, BasicQuantBindings, BasicReduceMeanBindings, BasicReduceSumBindings, BasicReluBinding, \
16-
BasicReshapeBindings, BasicRQIntegerDivBinding, BasicRQSBindings, BasicRQSGELUBinding, BasicSliceBindings, \
17-
BasicSoftmaxBindings, BasicSqrtBindings, BasicSubBindings, BasicTransposeBindings, DummyBinding
16+
BasicReshapeBindings, BasicRQIntegerDivBinding, BasicRQSBindings, BasicRQSGELUBinding, BasicSigmoidBindings, \
17+
BasicSliceBindings, BasicSoftmaxBindings, BasicSqrtBindings, BasicSubBindings, BasicTransposeBindings, \
18+
DummyBinding
1819
from Deeploy.Targets.Generic.Layers import AddLayer, BatchNormalizationLayer, CeilLayer, ClipLayer, ConcatLayer, \
1920
ConvLayer, ConvTransposeLayer, DebugPrintLayer, DequantLayer, DivLayer, ExpLayer, FloorLayer, GatherLayer, \
2021
GELULayer, GEMMLayer, ITAMaxLayer, LayerNormLayer, MatMulLayer, MaxPoolLayer, MulLayer, PadLayer, PowLayer, \
2122
QuantLayer, ReduceMeanLayer, ReduceSumLayer, ReluLayer, RequantShiftLayer, ReshapeLayer, RQIntegerDivLayer, \
22-
RQSiGELULayer, SliceLayer, SoftmaxLayer, SqrtLayer, SubLayer, TransposeLayer
23+
RQSiGELULayer, SigmoidLayer, SliceLayer, SoftmaxLayer, SqrtLayer, SubLayer, TransposeLayer
2324
from Deeploy.Targets.Generic.Parsers import AddParser, BatchNormParser, CeilParser, ClipParser, ConcatParser, \
2425
ConvTranspose1DParser, DebugParser, DequantParser, DivParser, DummyParser, ExpParser, FlattenParser, FloorParser, \
2526
GatherParser, GELUParser, GenericConv1DParser, GenericConv2DParser, GenericDWConv1DParser, GenericDWConv2DParser, \
2627
GenericGEMMParser, GenericMaxPool2DParser, IntegerDivParser, ITAMaxParser, ITAPartialMaxParser, LayerNormParser, \
2728
MatMulParser, MaxPool1DParser, MulParser, Pad1DParser, Pad2DParser, PowParser, QuantParser, ReduceMeanParser, \
28-
ReduceSumParser, ReluParser, RequantShiftParser, ReshapeParser, RQIntegerDivParser, RQSiGELUParser, SliceParser, \
29-
SoftmaxParser, SqrtParser, SubParser, TransposeParser, UnsqueezeParser, iLayerNormParser, iSoftmaxParser
29+
ReduceSumParser, ReluParser, RequantShiftParser, ReshapeParser, RQIntegerDivParser, RQSiGELUParser, SigmoidParser, \
30+
SliceParser, SoftmaxParser, SqrtParser, SubParser, TransposeParser, UnsqueezeParser, iLayerNormParser, \
31+
iSoftmaxParser
3032
from Deeploy.Targets.Generic.Templates import AllocateTemplate, FreeTemplate
3133
from Deeploy.Targets.Generic.TopologyOptimizationPasses.Passes import DequantPatternPass, ExtractPaddingFromConvPass, \
3234
ExtractPaddingFromPoolPass, MatMulAddMergePass, MergeConstAddAndRequantPass, QuantPatternPass, \
@@ -78,6 +80,7 @@
7880
FloorMapper = NodeMapper(FloorParser(), BasicFloorBindings)
7981
ClipMapper = NodeMapper(ClipParser(), BasicClipBindings)
8082
ExpMapper = NodeMapper(ExpParser(), BasicExpBindings)
83+
SigmoidMapper = NodeMapper(SigmoidParser(), BasicSigmoidBindings)
8184

8285
# Dummy nodes are intended for development purposes only!
8386
# They should always generate compiler errors to not accidentally end up in production code
@@ -129,6 +132,7 @@
129132
'Floor': FloorLayer([FloorMapper]),
130133
'Clip': ClipLayer([ClipMapper]),
131134
'Exp': ExpLayer([ExpMapper]),
135+
'Sigmoid': SigmoidLayer([SigmoidMapper]),
132136
# # For example, you can use the DummpyMapper, in case you want to test
133137
# # deployment or optimizations with GlobalAveragePool nodes but did not yet
134138
# # implement the corresponding kernel
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# SPDX-FileCopyrightText: 2021 ETH Zurich and University of Bologna
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
import numpy as np
5+
6+
from Deeploy.DeeployTypes import NetworkContext, NodeTemplate, OperatorRepresentation
7+
8+
9+
class _SigmoidTemplate(NodeTemplate):
10+
11+
def alignToContext(self, ctxt: NetworkContext,
12+
operatorRepresentation: OperatorRepresentation) -> tuple[NetworkContext, dict, list[str]]:
13+
14+
data_in = ctxt.lookup(operatorRepresentation['data_in'])
15+
operatorRepresentation['size'] = int(np.prod(data_in.shape))
16+
operatorRepresentation['type_width'] = data_in._type.referencedType.typeWidth
17+
return ctxt, operatorRepresentation, []
18+
19+
20+
referenceTemplate = _SigmoidTemplate("""
21+
// Exp (Name: ${nodeName}, Op: ${nodeOp})
22+
Sigmoid_fp${type_width}_fp${type_width}(${data_in}, ${data_out}, ${size});
23+
""")
776 Bytes
Binary file not shown.
124 Bytes
Binary file not shown.
778 Bytes
Binary file not shown.

TargetLibraries/Generic/inc/DeeployBasicMath.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
#include "kernel/RQHardswish.h"
5555
#include "kernel/Relu.h"
5656
#include "kernel/RequantShift.h"
57+
#include "kernel/Sigmoid.h"
5758
#include "kernel/Softmax.h"
5859
#include "kernel/Sqrt.h"
5960

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2020 ETH Zurich and University of Bologna
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef __DEEPLOY_BASIC_MATH_SIGMOID_KERNEL_HEADER_
8+
#define __DEEPLOY_BASIC_MATH_SIGMOID_KERNEL_HEADER_
9+
10+
#include "DeeployBasicMath.h"
11+
12+
/*
13+
* element wise sigmoid
14+
*/
15+
16+
/******************************************************************************/
17+
/* Sigmoid */
18+
/******************************************************************************/
19+
void Sigmoid_fp32_fp32(float32_t *data_in, float32_t *data_out, int32_t size);
20+
21+
#endif //__DEEPLOY_BASIC_MATH_SIGMOID_KERNEL_HEADER_

0 commit comments

Comments
 (0)