Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,14 @@ def _NCHWtoNHWC_fun(graph: gs.Graph, match: Match, name: str, default_channels_f
if node.op in ["Conv", "RequantizedConv"]:
# In the case of Conv: [weights, opt. bias], RequantizedConv: [weights, mul, add, opt. shift]
for tensor in node.inputs[1:]:
_transformLayoutConst(tensor, spatialDims, default_channels_first)
# Standard case: The weight is a direct constant input.
if isinstance(tensor, gs.Constant):
_transformLayoutConst(tensor, spatialDims, default_channels_first)

# MeZO case: The weight is produced by a Perturb node.
elif isinstance(tensor, gs.Variable):
permute_temp = _transformLayoutPermutation(len(tensor.shape), spatialDims, default_channels_first)
graph.nodes.append(_appendTranspose(tensor, node, permute_temp))

node.attrs["channels_first"] = default_channels_first

Expand Down
7 changes: 5 additions & 2 deletions Deeploy/DeeployTypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2884,10 +2884,11 @@ def generateIOBufferInitializationCode(self) -> str:

callStack += "static const uint32_t " + self.ctxt._mangle("num_inputs") + f" = {len(inputs)};"
callStack += "static const uint32_t " + self.ctxt._mangle("num_outputs") + f" = {len(outputs)};"

callStack += "static const uint32_t seed = 12345;" # fixed seed for reproducibility
callStack += "static const uint32_t perturbation_sign = 1;" # fixed sign for reproducibility
callStack += "extern void* " + self.ctxt._mangle("inputs") + f"[{len(inputs)}];"
callStack += "extern void* " + self.ctxt._mangle("outputs") + f"[{len(outputs)}];"

callStack += "static const uint32_t " + self.ctxt._mangle("inputs_bytes") + f"[{len(inputs)}] = " + "{"

numBytes = []
Expand Down Expand Up @@ -3049,6 +3050,8 @@ def generateIncludeString(self) -> str:
for engine in self.Platform.engines:
for include in engine.includeList:
includeStr += ["#include \"" + include + "\""]
if engine.name == "GAP9Cluster":
includeStr += ["#include \"kernel/RandomNoise.h\""]
return ("\n").join(includeStr)

def generateEngineInitializationCode(self) -> str:
Expand Down
38 changes: 36 additions & 2 deletions Deeploy/Targets/GAP9/Bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from Deeploy.Targets.Generic.TypeCheckers import AddChecker, ConcatChecker, ConvChecker, DequantChecker, \
GatherChecker, GELUChecker, GEMMChecker, HardswishChecker, LayerNormChecker, MatMulChecker, MulChecker, \
QuantChecker, ReduceMeanChecker, ReluChecker, ReshapeChecker, RQAddChecker, RQHardswishChecker, SGDChecker, \
SliceChecker, SoftmaxChecker, SoftmaxCrossEntropyLossChecker, TransposeChecker
SliceChecker, SoftmaxChecker, SoftmaxCrossEntropyLossChecker, TransposeChecker, PerturbZOChecker
from Deeploy.Targets.PULPOpen.Bindings import ForkClosure, L3MemoryAwareFunctionCallClosure, \
MemoryAwareForkTransformer, MemoryAwareFunctionCallClosure, TilingCallClosure
from Deeploy.Targets.PULPOpen.CodeTransformationPasses.PULPClusterSynch import PULPSynchCoresPass
Expand All @@ -39,7 +39,8 @@
FloatMulTemplate, FloatReluTemplate, FloatSoftmaxTemplate, GEMMTemplate, MatrixVectorTemplate, MaxPool2DTemplate, \
MulTemplate, ReduceMeanTemplate, RequantShiftTemplate, ReshapeTemplate, RQAddTemplate, RQSiHardswishTemplate, \
SGDTemplate, SoftmaxCrossEntropyLossTemplate, TallGEMMTemplate, TransposeTemplate, UniformRequantShiftTemplate, \
iRMSNormTemplate, iSoftmaxTemplate
iRMSNormTemplate, iSoftmaxTemplate, FloatPerturbEggrollTemplate, FloatPerturbUniformTemplate, FloatPerturbNormalTemplate, \
FloatPerturbRademacherTemplate, FloatPerturbTriangleTemplate
from Deeploy.Targets.PULPOpen.TypeCheckers import PULPConvChecker, PULPLinearChecker, PULPMaxPoolChecker, \
PULPRequantShiftChecker
from Deeploy.TilingExtension.CodeTransformationPasses.TilingVariableReplacement import TilingVariableReplacement, \
Expand Down Expand Up @@ -328,6 +329,9 @@
GAP9ConcatBindings = [
NodeBinding(ConcatChecker([PointerClass(type), PointerClass(type)], [PointerClass(type)]),
ConcatTemplate.referenceTemplate, GAP9ClusterTransformer) for type in IntegerDataTypes
] + [
NodeBinding(ConcatChecker([PointerClass(float32_t), PointerClass(float32_t)], [PointerClass(float32_t)]),
ConcatTemplate.referenceTemplate, GAP9ClusterTransformer)
]

GAP9iRMSNormBindings = [
Expand Down Expand Up @@ -397,3 +401,33 @@
NodeBinding(DequantChecker([PointerClass(int32_t)], [PointerClass(float32_t)]), DequantTemplate.referenceTemplate,
GAP9Transformer),
]

GAP9PerturbNormalBindings = [
NodeBinding(
PerturbZOChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatPerturbNormalTemplate.referenceTemplate,
GAP9Transformer)]

GAP9PerturbUniformBindings = [
NodeBinding(
PerturbZOChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatPerturbUniformTemplate.referenceTemplate,
GAP9Transformer)]

GAP9PerturbEggrollBindings = [
NodeBinding(
PerturbZOChecker([PointerClass(int32_t)], [PointerClass(float32_t)]),
FloatPerturbEggrollTemplate.referenceTemplate,
GAP9Transformer)]

GAP9PerturbRademacherBindings = [
NodeBinding(
PerturbZOChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatPerturbRademacherTemplate.referenceTemplate,
GAP9Transformer)]

GAP9PerturbTriangleBindings = [
NodeBinding(
PerturbZOChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatPerturbTriangleTemplate.referenceTemplate,
GAP9Transformer)]
26 changes: 22 additions & 4 deletions Deeploy/Targets/GAP9/Platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@
GAP9RQSTallGEMMTilingReadyBindings, GAP9RQSTilingReadyBindings, GAP9SGDTilingReadyBindings, \
GAP9SoftmaxCrossEntropyGradTilingReadyBindings, GAP9SoftmaxCrossEntropyTilingReadyBindings, \
GAP9SoftmaxGradTilingReadyBindings, GAP9SoftmaxTilingReadyBindings, GAP9TransposeTilingReadyBindings, \
GAP9UniformRQSTilingReadyBindings
GAP9UniformRQSTilingReadyBindings, GAP9PerturbNormalTilingReadyBindings, GAP9PerturbUniformTilingReadyBindings, \
GAP9PerturbEggrollTilingReadyBindings, GAP9PerturbRademacherTilingReadyBindings, GAP9PerturbTriangleTilingReadyBindings
from Deeploy.Targets.Generic.Bindings import BasicGEMMBindings, BasicPad1DBindings, BasicPad2DBindings, \
BasicRQIntegerDivBinding
from Deeploy.Targets.Generic.Layers import AddLayer, ConcatLayer, ConvLayer, GatherLayer, GELULayer, GEMMLayer, \
LayerNormLayer, MatMulLayer, MaxPoolLayer, MulLayer, PadLayer, QuantLayer, ReduceMeanLayer, ReduceSumLayer, \
ReluLayer, RequantShiftLayer, ReshapeLayer, RQIntegerDivLayer, RQSiGELULayer, RQSiHardswishLayer, SGDLayer, \
SliceLayer, SoftmaxCrossEntropyLossGradLayer, SoftmaxCrossEntropyLossLayer, SoftmaxGradLayer, SoftmaxLayer, \
TransposeLayer, iHardswishLayer, iRMSNormLayer
TransposeLayer, iHardswishLayer, iRMSNormLayer, PerturbEggrollLayer, PerturbNormalLayer, PerturbRademacherLayer,\
PerturbTriangleLayer, PerturbUniformLayer
from Deeploy.Targets.Generic.Parsers import AddParser, ConcatParser, DequantParser, FlattenParser, GatherParser, \
GELUParser, GEMMParser, LayerNormParser, MatMulParser, MaxPool2DParser, MulParser, Pad1DParser, Pad2DParser, \
QuantParser, ReduceMeanParser, ReduceSumParser, ReluParser, RequantShiftParser, ReshapeParser, RQAddParser, \
RQIntegerDivParser, RQSiGELUParser, RQSiHardswishParser, SGDParser, SliceParser, \
SoftmaxCrossEntropyLossGradParser, SoftmaxCrossEntropyLossParser, SoftmaxGradParser, SoftmaxParser, \
TransposeParser, UniformRequantShiftParser, UnsqueezeParser, iHardswishParser, iRMSNormParser, iSoftmaxParser
TransposeParser, UniformRequantShiftParser, UnsqueezeParser, iHardswishParser, iRMSNormParser, iSoftmaxParser, \
PerturbEggrollParser, PerturbNormalParser, PerturbRademacherParser, PerturbTriangleParser, PerturbUniformParser
from Deeploy.Targets.Generic.Templates import AllocateTemplate as BasicAllocateTemplate
from Deeploy.Targets.PULPOpen.Bindings import BasicDequantBindings, BasicQuantBindings, PULPConv1DBinding, \
PULPDMASliceBindings, PULPDWConv1DBinding, PULPReduceMeanBindings, PULPSliceBindings
Expand Down Expand Up @@ -93,6 +96,11 @@
GAP9_QuantMapper = NodeMapper(QuantParser(), BasicQuantBindings)
GAP9_DequantMapper = NodeMapper(DequantParser(), BasicDequantBindings)
GAP9_GEMMDequantMapper = NodeMapper(PULPGEMMParser(), BasicGEMMBindings)
GAP9_PerturbNormalMapper = NodeMapper(PerturbNormalParser(), GAP9PerturbNormalTilingReadyBindings)
GAP9_PerturbUniformMapper = NodeMapper(PerturbUniformParser(), GAP9PerturbUniformTilingReadyBindings)
GAP9_PerturbEggrollMapper = NodeMapper(PerturbEggrollParser(), GAP9PerturbEggrollTilingReadyBindings)
GAP9_PerturbRademacherMapper = NodeMapper(PerturbRademacherParser(), GAP9PerturbRademacherTilingReadyBindings)
GAP9_PerturbTriangleMapper = NodeMapper(PerturbTriangleParser(), GAP9PerturbTriangleTilingReadyBindings)

# GAP9-specific mapping using ClDma
GAP9Mapping = {
Expand Down Expand Up @@ -171,7 +179,17 @@
'SoftmaxCrossEntropyLossGrad':
SoftmaxCrossEntropyLossGradLayer([GAP9_SoftmaxCrossEntropyLossGradMapper]),
'SGD':
SGDLayer([GAP9_SGDMapper])
SGDLayer([GAP9_SGDMapper]),
'PerturbNormal':
PerturbNormalLayer([GAP9_PerturbNormalMapper]),
'PerturbUniform':
PerturbUniformLayer([GAP9_PerturbUniformMapper]),
'PerturbEggroll':
PerturbEggrollLayer([GAP9_PerturbEggrollMapper]),
'PerturbRademacher':
PerturbRademacherLayer([GAP9_PerturbRademacherMapper]),
'PerturbTriangle':
PerturbTriangleLayer([GAP9_PerturbTriangleMapper]),
}


Expand Down
19 changes: 18 additions & 1 deletion Deeploy/Targets/GAP9/Tiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
GAP9RQAddBindings, GAP9RQSBindings, GAP9RQSConv2DBindings, GAP9RQSDWConv2DBindings, GAP9RQSGEMMBindings, \
GAP9RQSiHardswishBindings, GAP9RQSMatrixVecBindings, GAP9RQSTallGEMMBindings, GAP9SGDBindings, \
GAP9SoftmaxBindings, GAP9SoftmaxCrossEntropyLossBindings, GAP9SoftmaxCrossEntropyLossGradBindings, \
GAP9SoftmaxGradBindings, GAP9TransposeBindings, GAP9UniformRQSBindings
GAP9SoftmaxGradBindings, GAP9TransposeBindings, GAP9UniformRQSBindings, GAP9PerturbNormalBindings, \
GAP9PerturbUniformBindings, GAP9PerturbEggrollBindings, GAP9PerturbRademacherBindings, GAP9PerturbTriangleBindings
from Deeploy.Targets.Generic.TileConstraints.AddTileConstraint import AddTileConstraint
from Deeploy.Targets.Generic.TileConstraints.ConcatTileConstraint import ConcatTileConstraint
from Deeploy.Targets.Generic.TileConstraints.iHardswishTileConstraint import iHardswishTileConstraint
Expand All @@ -27,6 +28,7 @@
from Deeploy.Targets.Generic.TileConstraints.RQSiGELUTileConstraint import RQSiGELUTileConstraint
from Deeploy.Targets.Generic.TileConstraints.RQSiHardswishTileConstraint import RQSiHardswishTileConstraint
from Deeploy.Targets.Generic.TileConstraints.TransposeTileConstraint import TransposeTileConstraint
from Deeploy.Targets.Generic.TileConstraints.EggrollTileConstraint import EggrollTileConstraint
from Deeploy.Targets.Generic.TileConstraints.UnaryTileConstraint import UnaryTileConstraint
from Deeploy.Targets.Generic.TileConstraints.UntiledTileConstraint import UntiledTileConstraint
from Deeploy.Targets.PULPOpen.TileConstraints.ConvTileConstraint import Conv2DTileConstraint, RQConv2DTileConstraint
Expand Down Expand Up @@ -142,3 +144,18 @@

GAP9SGDTilingReadyBindings = TilingReadyNodeBindings(nodeBindings = GAP9SGDBindings,
tileConstraint = SGDTileConstraint())

GAP9PerturbNormalTilingReadyBindings = TilingReadyNodeBindings(nodeBindings = GAP9PerturbNormalBindings,
tileConstraint = UnaryTileConstraint())

GAP9PerturbUniformTilingReadyBindings = TilingReadyNodeBindings(nodeBindings = GAP9PerturbUniformBindings,
tileConstraint = UnaryTileConstraint())

GAP9PerturbEggrollTilingReadyBindings = TilingReadyNodeBindings(nodeBindings = GAP9PerturbEggrollBindings,
tileConstraint = EggrollTileConstraint())

GAP9PerturbRademacherTilingReadyBindings = TilingReadyNodeBindings(nodeBindings = GAP9PerturbRademacherBindings,
tileConstraint = UnaryTileConstraint())

GAP9PerturbTriangleTilingReadyBindings = TilingReadyNodeBindings(nodeBindings = GAP9PerturbTriangleBindings,
tileConstraint = UnaryTileConstraint())
37 changes: 37 additions & 0 deletions Deeploy/Targets/Generic/Layers.py
Original file line number Diff line number Diff line change
Expand Up @@ -709,3 +709,40 @@ def computeOps(self):
numPx = opRep['dim_im_out_x']

return numPx * opsPerPx


class PerturbNormalLayer(ONNXLayer):
def __init__(self, maps: List[NodeMapper]):
super().__init__(maps)

def computeOps(self):
return self.mapper.parser.operatorRepresentation['size']

class PerturbUniformLayer(ONNXLayer):
def __init__(self, maps: List[NodeMapper]):
super().__init__(maps)

def computeOps(self):
return self.mapper.parser.operatorRepresentation['size']

class PerturbEggrollLayer(ONNXLayer):
def __init__(self, maps: List[NodeMapper]):
super().__init__(maps)

def computeOps(self):
return self.mapper.parser.operatorRepresentation['size']

class PerturbRademacherLayer(ONNXLayer):
def __init__(self, maps: List[NodeMapper]):
super().__init__(maps)

def computeOps(self):
return self.mapper.parser.operatorRepresentation['size']

class PerturbTriangleLayer(ONNXLayer):
def __init__(self, maps: List[NodeMapper]):
super().__init__(maps)

def computeOps(self):
return self.mapper.parser.operatorRepresentation['size']

Loading