Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,18 @@ jobs:
testRequantizedDWConv
test2DRequantizedConv
iSoftmax
FloatAdder
testFloatAdder
testFloatGEMM
testFloat2DConvolution
testFloatLayerNorm
testFloatDiv
testFloatRelu
testFloatMaxPool
testFloatMatmul
testFloatSoftmax
testFloatTranspose
testFloatMul


generic-models:
uses: ./.github/workflows/TestRunnerGeneric.yml
Expand All @@ -64,6 +74,7 @@ jobs:
ICCT_ITA_8
miniMobileNet
miniMobileNetv2
CCT


### CortexM Tests ###
Expand Down Expand Up @@ -199,8 +210,9 @@ jobs:
Hardswish
RQHardswish
testBacktracking
FloatAdder
testFloatAdder
testFloatGEMM
testFloatSoftmax
num-cores: 8

siracusa-models:
Expand Down
17 changes: 16 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,19 @@
- Add one new #define OUTPUTTYPE to testoutput.h

### Changed
Change main.c to use OUTPUTTYPE instead of float
Change main.c to use OUTPUTTYPE instead of float

## Add Operators for CCT Model

### Added
- Float Template, binding and parser, test for Conv2D, LayerNorm, Div, Relu, Softmax, MaxPool, Matmul, Transpose, Gelu, Mul, Reshape, Gather, Squeeze, Padding
- CCT model test to Generic Target
- Math Lib link on Generic Target

### Changed
- float infinity macro #define inf
- Signprop depend on float check and platform

### Fixed
- MaxPool Padding Extract Pass for float and interger
- Testinput, testoutput, weight type casted from double to float warning
7 changes: 5 additions & 2 deletions Deeploy/DeeployTypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,10 @@ def __eq__(self, other):

def _valueString(self) -> str:
values = list(self.values.reshape(-1))
strValues = [str(value) for value in values]
if self.values.dtype == np.float32:
strValues = [f'{value}f' for value in values]
else:
strValues = [str(value) for value in values]
valueString = ', '.join(strValues)
return valueString

Expand Down Expand Up @@ -901,7 +904,7 @@ def hoistConstant(self, node: gs.Node, name: str = '', _type: Optional[Type[Poin
localBuffer = self.VariableBuffer.fromNode(node = node)
globalBuffer = self.ConstantBuffer.fromVariableBuffer(localBuffer, values = node.values)
globalBuffer.name = name
globalBuffer._type = type
globalBuffer._type = _type

self.add(globalBuffer, 'global')

Expand Down
38 changes: 19 additions & 19 deletions Deeploy/Targets/CortexM/Platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@
CMSISDWConv1DParser, CMSISDWConv2DParser, CMSISGEMMParser, CMSISLinearAttentionParser, CMSISMaxPool2DParser
from Deeploy.Targets.CortexM.TopologyOptimizationPasses.Passes import ConvRequantMergePass, GEMMRequantMergePass, \
LinearAttentionAlignmentPass, MatMulRequantMergePass, MHSAAlignmentPass
from Deeploy.Targets.Generic.Bindings import BasicAddBindings, BasicDebugPrintBindings, BasicGatherBindings, \
BasicGELUBinding, BasicIntegerDivBinding, BasicLayerNormBinding, BasicMatMulBinding, BasicMulBindings, \
from Deeploy.Targets.Generic.Bindings import BasicAddBindings, BasicDebugPrintBindings, BasicDivBindings, \
BasicGatherBindings, BasicGELUBindings, BasicLayerNormBindings, BasicMatMulBindings, BasicMulBindings, \
BasicPad1DBindings, BasicPad2DBindings, BasicReduceMeanBindings, BasicReduceSumBindings, BasicReshapeBindings, \
BasicRQIntegerDivBinding, BasicRQSBindings, BasicRQSGELUBinding, BasicSliceBindings, BasicSoftmaxBinding, \
BasicRQIntegerDivBinding, BasicRQSBindings, BasicRQSGELUBinding, BasicSliceBindings, BasicSoftmaxBindings, \
BasicTransposeBindings, DummyBinding
from Deeploy.Targets.Generic.Layers import AddLayer, CLCALayer, DebugPrintLayer, GatherLayer, IntegerDivLayer, \
LinearAttentionLayer, MatMulLayer, MaxPoolLayer, MulLayer, PadLayer, ReduceMeanLayer, ReduceSumLayer, \
RequantShiftLayer, ReshapeLayer, RQIntegerDivLayer, RQSiGELULayer, SliceLayer, TransposeLayer, iGELULayer, \
iLayerNormLayer, iSoftmaxLayer
from Deeploy.Targets.Generic.Layers import AddLayer, CLCALayer, DebugPrintLayer, DivLayer, GatherLayer, GELULayer, \
LayerNormLayer, LinearAttentionLayer, MatMulLayer, MaxPoolLayer, MulLayer, PadLayer, ReduceMeanLayer, \
ReduceSumLayer, RequantShiftLayer, ReshapeLayer, RQIntegerDivLayer, RQSiGELULayer, SliceLayer, SoftmaxLayer, \
TransposeLayer
from Deeploy.Targets.Generic.Parsers import AddParser, DebugParser, DummyParser, FlattenParser, GatherParser, \
IntegerDivParser, MatMulParser, MulParser, Pad1DParser, Pad2DParser, ReduceMeanParser, ReduceSumParser, \
RequantShiftParser, ReshapeParser, RQIntegerDivParser, RQSiGELUParser, SliceParser, TransposeParser, \
UnsqueezeParser, iGELUParser, iLayerNormParser, iSoftmaxParser
GELUParser, IntegerDivParser, MatMulParser, MulParser, Pad1DParser, Pad2DParser, ReduceMeanParser, \
ReduceSumParser, RequantShiftParser, ReshapeParser, RQIntegerDivParser, RQSiGELUParser, SliceParser, \
TransposeParser, UnsqueezeParser, iLayerNormParser, iSoftmaxParser
from Deeploy.Targets.Generic.Templates import AllocateTemplate, FreeTemplate
from Deeploy.Targets.Generic.TopologyOptimizationPasses.Passes import IntegerDivRequantMergePass, \
MergeConstAddAndRequantPass, iGELURequantMergePass
Expand All @@ -61,12 +61,12 @@
DWConv2D_int8_Mapper = NodeMapper(CMSISDWConv2DParser(), [CMSISDWConv2DBinding])
FlattenMapper = NodeMapper(FlattenParser(), BasicReshapeBindings)
GatherMapper = NodeMapper(GatherParser(), BasicGatherBindings)
GELU_int8_Mapper = NodeMapper(iGELUParser(), [BasicGELUBinding])
GELU_int8_Mapper = NodeMapper(GELUParser(), BasicGELUBindings)
GEMMMapper = NodeMapper(CMSISGEMMParser(), CMSISGEMMBindings)
iLayerNorm_int8_Mapper = NodeMapper(iLayerNormParser(), [BasicLayerNormBinding])
IntegerDivMapper = NodeMapper(IntegerDivParser(), [BasicIntegerDivBinding])
iLayerNorm_int8_Mapper = NodeMapper(iLayerNormParser(), BasicLayerNormBindings)
IntegerDivMapper = NodeMapper(IntegerDivParser(), BasicDivBindings)
LinearAttention_int16_Mapper = NodeMapper(CMSISLinearAttentionParser(), [CMSISLinearAttentionBinding])
MatMulMapper = NodeMapper(MatMulParser(), [BasicMatMulBinding])
MatMulMapper = NodeMapper(MatMulParser(), BasicMatMulBindings)
MaxPool2DMapper = NodeMapper(CMSISMaxPool2DParser(), [CMSISMaxPool2DBinding])
MulMapper = NodeMapper(MulParser(), BasicMulBindings)
Pad1DMapper = NodeMapper(Pad1DParser(), BasicPad1DBindings)
Expand All @@ -77,7 +77,7 @@
ReshapeMapper = NodeMapper(ReshapeParser(), BasicReshapeBindings)
RQGELU_int8_Mapper = NodeMapper(RQSiGELUParser(), [BasicRQSGELUBinding])
RQIntegerDivMapper = NodeMapper(RQIntegerDivParser(), [BasicRQIntegerDivBinding])
Softmax_int8_Mapper = NodeMapper(iSoftmaxParser(), [BasicSoftmaxBinding])
Softmax_int8_Mapper = NodeMapper(iSoftmaxParser(), BasicSoftmaxBindings)
TransposeMapper = NodeMapper(TransposeParser(), BasicTransposeBindings)
UnsqueezeMapper = NodeMapper(UnsqueezeParser(), BasicReshapeBindings)

Expand All @@ -93,11 +93,11 @@
'DebugPrint': DebugPrintLayer([DebugPrint_Mapper]),
'Flatten': ReshapeLayer([FlattenMapper]),
'Gather': GatherLayer([GatherMapper]),
'iGELU': iGELULayer([GELU_int8_Mapper]),
'iLayerNorm': iLayerNormLayer([iLayerNorm_int8_Mapper]),
'IntegerDiv': IntegerDivLayer([IntegerDivMapper]),
'iGELU': GELULayer([GELU_int8_Mapper]),
'iLayerNorm': LayerNormLayer([iLayerNorm_int8_Mapper]),
'IntegerDiv': DivLayer([IntegerDivMapper]),
'IntegerMean': ReduceMeanLayer([ReduceMeanMapper]),
'iSoftmax': iSoftmaxLayer([Softmax_int8_Mapper]),
'iSoftmax': SoftmaxLayer([Softmax_int8_Mapper]),
'LinearAttention': LinearAttentionLayer([LinearAttention_int16_Mapper]),
'MatMul': MatMulLayer([MatMulMapper]),
'MaxPool': MaxPoolLayer([MaxPool2DMapper]),
Expand Down
117 changes: 89 additions & 28 deletions Deeploy/Targets/Generic/Bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,22 @@
from Deeploy.AbstractDataTypes import PointerClass
from Deeploy.CommonExtensions.CodeTransformationPasses.MemoryAllocation import ArgumentStructGeneration, \
MemoryManagementGeneration, MemoryPassthroughGeneration
from Deeploy.CommonExtensions.DataTypes import FloatDataTypes, IntegerDataTypes, SignedIntegerDataTypes, float32_t, \
int8_t, int32_t, uint8_t
from Deeploy.CommonExtensions.DataTypes import IntegerDataTypes, SignedIntegerDataTypes, float32_t, int8_t, int32_t, \
uint8_t
from Deeploy.DeeployTypes import CodeTransformation, NodeBinding
from Deeploy.FutureExtension.CodeTransformationPasses.FutureCodeTransformation import FutureGeneration
from Deeploy.Targets.Generic.Templates import AddTemplate, ConcatTemplate, ConvTemplate, DebugPrintTemplate, \
DummyTemplate, DWConvTemplate, FloatAddTemplate, FloatGemmTemplate, GatherTemplate, GemmTemplate, \
IntegerDivTemplate, ITAMaxTemplate, ITAPartialMaxTemplate, MatMulTemplate, MaxPoolTemplate, MulTemplate, \
PadTemplate, ReduceMeanTemplate, ReduceSumTemplate, RequantShiftTemplate, ReshapeTemplate, RQIntegerDivTemplate, \
DummyTemplate, DWConvTemplate, FloatAddTemplate, FloatConvTemplate, FloatDivTemplate, FloatGELUTemplate, \
FloatGemmTemplate, FloatLayernormTemplate, FloatMatMulTemplate, FloatMaxPoolTemplate, FloatMulTemplate, \
FloatPadTemplate, FloatReluTemplate, FloatSoftmaxTemplate, GatherTemplate, GemmTemplate, IntegerDivTemplate, \
ITAMaxTemplate, ITAPartialMaxTemplate, MatMulTemplate, MaxPoolTemplate, MulTemplate, PadTemplate, \
ReduceMeanTemplate, ReduceSumTemplate, RequantShiftTemplate, ReshapeTemplate, RQIntegerDivTemplate, \
RQSiGELUTemplate, SliceTemplate, TransposeTemplate, iGELUTemplate, iLayernormTemplate, iRMSNormTemplate, \
iSoftmaxTemplate
from Deeploy.Targets.Generic.TypeCheckers import AddChecker, ConcatChecker, ConvChecker, DebugPrintChecker, \
DummyChecker, FloatAddChecker, GatherChecker, GELUChecker, GEMMChecker, IntegerDivChecker, MatMulChecker, \
MaxPoolChecker, MulChecker, PadChecker, ReduceMeanChecker, ReduceSumChecker, RequantShiftChecker, ReshapeChecker, \
RQIntegerDivChecker, SliceChecker, SoftmaxChecker, TransposeChecker, iLayerNormChecker
DivChecker, DummyChecker, GatherChecker, GELUChecker, GEMMChecker, LayerNormChecker, MatMulChecker, \
MaxPoolChecker, MulChecker, PadChecker, ReduceMeanChecker, ReduceSumChecker, ReluChecker, RequantShiftChecker, \
ReshapeChecker, RQIntegerDivChecker, SliceChecker, SoftmaxChecker, TransposeChecker

BasicTransformer = CodeTransformation([ArgumentStructGeneration(), MemoryManagementGeneration(), FutureGeneration()])

Expand All @@ -68,8 +70,8 @@
for type1 in IntegerDataTypes
for type2 in IntegerDataTypes
] + [
NodeBinding(FloatAddChecker([PointerClass(type), PointerClass(type)], [PointerClass(type)]),
FloatAddTemplate.referenceTemplate, BasicTransformer) for type in FloatDataTypes
NodeBinding(AddChecker([PointerClass(float32_t), PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatAddTemplate.referenceTemplate, BasicTransformer)
]

BasicConv1DBinding = NodeBinding(ConvChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
Expand All @@ -78,8 +80,15 @@
BasicDWConv1DBinding = NodeBinding(ConvChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
DWConvTemplate.reference1DTemplate, BasicTransformer)

BasicConv2DBinding = NodeBinding(ConvChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
ConvTemplate.reference2DTemplate, BasicTransformer)
BasicConv2DBindings = [
NodeBinding(ConvChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
ConvTemplate.reference2DTemplate, BasicTransformer)
] + [
NodeBinding(
ConvChecker([PointerClass(float32_t), PointerClass(float32_t),
PointerClass(float32_t)], [PointerClass(float32_t)]), FloatConvTemplate.reference2DTemplate,
BasicTransformer)
]

BasicDWConv2DBinding = NodeBinding(ConvChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
DWConvTemplate.reference2DTemplate, BasicTransformer)
Expand All @@ -92,10 +101,18 @@
BasicGatherBindings = [
NodeBinding(GatherChecker([PointerClass(type), PointerClass(int32_t)], [PointerClass(type)]),
GatherTemplate.referenceTemplate, BasicTransformer) for type in SignedIntegerDataTypes
] + [
NodeBinding(GatherChecker([PointerClass(float32_t), PointerClass(type)], [PointerClass(float32_t)]),
GatherTemplate.referenceTemplate, BasicTransformer) for type in IntegerDataTypes
]

BasicGELUBinding = NodeBinding(GELUChecker([PointerClass(int8_t)], [PointerClass(int32_t)]),
iGELUTemplate.referenceTemplate, BasicTransformer)
BasicGELUBindings = [
NodeBinding(GELUChecker([PointerClass(int8_t)], [PointerClass(int32_t)]), iGELUTemplate.referenceTemplate,
BasicTransformer)
] + [
NodeBinding(GELUChecker([PointerClass(float32_t)], [PointerClass(float32_t)]), FloatGELUTemplate.referenceTemplate,
BasicTransformer)
]

BasicGEMMBindings = [
NodeBinding(
Expand All @@ -108,31 +125,56 @@
BasicTransformer)
]

BasicIntegerDivBinding = NodeBinding(
IntegerDivChecker([PointerClass(int32_t), PointerClass(int32_t)], [PointerClass(int32_t)]),
IntegerDivTemplate.referenceTemplate, BasicTransformer)
BasicDivBindings = [
NodeBinding(DivChecker([PointerClass(int32_t), PointerClass(int32_t)], [PointerClass(int32_t)]),
IntegerDivTemplate.referenceTemplate, BasicTransformer)
] + [
NodeBinding(DivChecker([PointerClass(float32_t), PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatDivTemplate.referenceTemplate, BasicTransformer)
]

BasicITASoftmaxBinding = NodeBinding(SoftmaxChecker([PointerClass(int8_t)], [PointerClass(int8_t)]),
ITAMaxTemplate.referenceTemplate, BasicTransformer)

BasicITAPartialSoftmaxBinding = NodeBinding(SoftmaxChecker([PointerClass(int8_t)], [PointerClass(int8_t)]),
ITAPartialMaxTemplate.referenceTemplate, BasicTransformer)

BasicLayerNormBinding = NodeBinding(
iLayerNormChecker([PointerClass(int8_t), PointerClass(int32_t),
PointerClass(int32_t)], [PointerClass(int8_t)]), iLayernormTemplate.referenceTemplate,
BasicTransformer)
BasicLayerNormBindings = [
NodeBinding(
LayerNormChecker([PointerClass(int8_t), PointerClass(int32_t),
PointerClass(int32_t)], [PointerClass(int8_t)]), iLayernormTemplate.referenceTemplate,
BasicTransformer)
] + [
NodeBinding(
LayerNormChecker(
[PointerClass(float32_t), PointerClass(float32_t),
PointerClass(float32_t)], [PointerClass(float32_t)]), FloatLayernormTemplate.referenceTemplate,
BasicTransformer)
]

BasicMatMulBinding = NodeBinding(MatMulChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
MatMulTemplate.referenceTemplate, BasicTransformer)
BasicMatMulBindings = [
NodeBinding(MatMulChecker([PointerClass(int8_t), PointerClass(int8_t)], [PointerClass(int32_t)]),
MatMulTemplate.referenceTemplate, BasicTransformer)
] + [
NodeBinding(MatMulChecker([PointerClass(float32_t), PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatMatMulTemplate.referenceTemplate, BasicTransformer)
]

BasicMaxPool2DBinding = NodeBinding(MaxPoolChecker([PointerClass(int8_t)], [PointerClass(int8_t)]),
MaxPoolTemplate.referenceTemplate, BasicTransformer)
BasicMaxPool2DBindings = [
NodeBinding(MaxPoolChecker([PointerClass(int8_t)], [PointerClass(int8_t)]), MaxPoolTemplate.referenceTemplate,
BasicTransformer)
] + [
NodeBinding(MaxPoolChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatMaxPoolTemplate.referenceTemplate, BasicTransformer)
]

BasicMulBindings = [
NodeBinding(MulChecker([PointerClass(typeA), PointerClass(typeB)], [PointerClass(int32_t)]),
MulTemplate.referenceTemplate, BasicTransformer)
for typeA, typeB in itertools.product(SignedIntegerDataTypes, SignedIntegerDataTypes)
] + [
NodeBinding(MulChecker([PointerClass(float32_t), PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatMulTemplate.referenceTemplate, BasicTransformer)
]

BasicPad1DBindings = [
Expand All @@ -142,6 +184,11 @@
BasicPad2DBindings = [
NodeBinding(PadChecker([PointerClass(type)], [PointerClass(type)]), PadTemplate.reference2DTemplate,
BasicTransformer) for type in SignedIntegerDataTypes
] + [
NodeBinding(
PadChecker([PointerClass(float32_t), PointerClass(float32_t),
PointerClass(float32_t)], [PointerClass(float32_t)]), FloatPadTemplate.reference2DTemplate,
BasicTransformer)
]

BasicReduceMeanBindings = [
Expand All @@ -154,9 +201,15 @@
BasicTransformer) for type in SignedIntegerDataTypes
]

BasicReluBinding = NodeBinding(ReluChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatReluTemplate.referenceTemplate, BasicTransformer)

BasicReshapeBindings = [
NodeBinding(ReshapeChecker([PointerClass(type), PointerClass(int32_t)], [PointerClass(type)]),
ReshapeTemplate.referenceTemplate, ReshapeSkipTransformer) for type in IntegerDataTypes
] + [
NodeBinding(ReshapeChecker([PointerClass(float32_t), PointerClass(type)], [PointerClass(float32_t)]),
ReshapeTemplate.referenceTemplate, ReshapeSkipTransformer) for type in IntegerDataTypes
]

BasicRQSBindings = [
Expand All @@ -181,16 +234,24 @@
PointerClass(int32_t)
], [PointerClass(int8_t)]), RQIntegerDivTemplate.referenceTemplate, BasicTransformer)

BasicSoftmaxBinding = NodeBinding(SoftmaxChecker([PointerClass(int8_t)], [PointerClass(int8_t)]),
iSoftmaxTemplate.referenceTemplate, BasicTransformer)
BasicSoftmaxBindings = [
NodeBinding(SoftmaxChecker([PointerClass(int8_t)], [PointerClass(int8_t)]), iSoftmaxTemplate.referenceTemplate,
BasicTransformer)
] + [
NodeBinding(SoftmaxChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatSoftmaxTemplate.referenceTemplate, BasicTransformer)
]

BasicTransposeBindings = [
NodeBinding(TransposeChecker([PointerClass(type)], [PointerClass(type)]), TransposeTemplate.referenceTemplate,
BasicTransformer) for type in IntegerDataTypes
] + [
NodeBinding(TransposeChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
TransposeTemplate.referenceTemplate, BasicTransformer)
]

BasiciRMSNormBinding = NodeBinding(
iLayerNormChecker([PointerClass(int8_t), PointerClass(int32_t)], [PointerClass(int8_t)]),
LayerNormChecker([PointerClass(int8_t), PointerClass(int32_t)], [PointerClass(int8_t)]),
iRMSNormTemplate.referenceTemplate, BasicTransformer)

DummyBinding = NodeBinding(DummyChecker([PointerClass(int8_t)], [PointerClass(int8_t)]),
Expand Down
Loading
Loading