From df3b648ca253f6a7fa5fe9eef50805f386534505 Mon Sep 17 00:00:00 2001 From: Alex Marchioni Date: Tue, 21 Oct 2025 16:51:13 +0200 Subject: [PATCH] fix bug in Generic GEMM with no bias, add testFloatGEMMnobias --- CHANGELOG.md | 3 ++ Deeploy/Targets/Generic/Parsers.py | 29 ++++-------------- .../Tests/testFloatGEMMnobias/inputs.npz | Bin 0 -> 4360 bytes .../Tests/testFloatGEMMnobias/network.onnx | Bin 0 -> 9754 bytes .../Tests/testFloatGEMMnobias/outputs.npz | Bin 0 -> 2314 bytes 5 files changed, 9 insertions(+), 23 deletions(-) create mode 100644 DeeployTest/Tests/testFloatGEMMnobias/inputs.npz create mode 100644 DeeployTest/Tests/testFloatGEMMnobias/network.onnx create mode 100644 DeeployTest/Tests/testFloatGEMMnobias/outputs.npz diff --git a/CHANGELOG.md b/CHANGELOG.md index a567305e2..4cdb588d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ This file contains the changelog for the Deeploy project. The changelog is divid - Prepare Post v0.2.0 Release [#104](https://github.com/pulp-platform/Deeploy/pull/104) - Use Docker digests instead of arch-specific tags [#106](https://github.com/pulp-platform/Deeploy/pull/106) - Fix `Unsqueeze` Op. when using ONNX opset 13 or higher (from attribute to input) [#119](https://github.com/pulp-platform/Deeploy/pull/119) +- Fix bias hoisting in generic GEMM with no bias [#126](https://github.com/pulp-platform/Deeploy/pull/126) ### Added - Add manual type inference feature (CLI: `--input-type-map`/`--input-offset-map`) to resolve ambiguities when test inputs are not representative enough @@ -53,6 +54,7 @@ This file contains the changelog for the Deeploy project. The changelog is divid - Memory/I/O summaries and input/output logging in deployers - RequantHelpers.py for Neureka's TileConstraints - Added assertion that all the graph tensors after lowering have a shape annotated +- Added testFloatGEMMnobias ### Changed - Replaced platform-specific tags (`*-amd64`, `*-arm64`) with direct digest references in `Noelware/docker-manifest-action`. @@ -102,6 +104,7 @@ This file contains the changelog for the Deeploy project. The changelog is divid - Fixed aliasing - Missing layout transformation of the const's (bias, mul, add, shift in Conv/RequantizedConv) - Keep mul/add rank of requantized Neureka tile constraints +- Fix bias hoisting in generic GEMM with no bias ### Removed - Delete outdated and unused `.gitlab-ci.yml` file diff --git a/Deeploy/Targets/Generic/Parsers.py b/Deeploy/Targets/Generic/Parsers.py index 7752834c5..f63bb5411 100644 --- a/Deeploy/Targets/Generic/Parsers.py +++ b/Deeploy/Targets/Generic/Parsers.py @@ -1682,14 +1682,6 @@ def parseNodeCtxt(self, for idx, outputNode in enumerate(node.outputs): self.operatorRepresentation[outputs[idx]] = ctxt.lookup(outputNode.name).name - # Create fake C node for GEMM-compatibility and hoist it - if not self.noBiasHoisting: - values = np.zeros(ctxt.lookup(node.inputs[0].name).shape, dtype = inputNode.dtype) - zeroTensor = gs.Constant(f'{node.name}_C_Tensor', values = values) - ctxt.hoistConstant(zeroTensor, _type = ctxt.lookup(inputNode.name)._type) - node.inputs.append(zeroTensor) - self.operatorRepresentation['C'] = f'{node.name}_C_Tensor' - # Store the input and output shapes in the operator representation self.operatorRepresentation['size'] = np.prod(ctxt.lookup(node.inputs[0].name).shape) self.operatorRepresentation['A_shape'] = ctxt.lookup(node.inputs[0].name).shape @@ -1772,8 +1764,7 @@ def parseNodeCtxt(self, class GEMMParser(MatMulParser): def __init__(self, noBiasHoisting = True): - self.noBiasHoisting = noBiasHoisting - super().__init__() + super().__init__(noBiasHoisting) def parseNode(self, node: gs.Node) -> (bool): @@ -1805,6 +1796,10 @@ def parseNode(self, node: gs.Node) -> (bool): else: self.operatorRepresentation['transB'] = 0 + if len(node.inputs) == 2 and not self.noBiasHoisting: + C = gs.Constant(f"{node.name}_C", np.zeros((1,))) + node.inputs.append(C) + return True # This might be a matmul node -> Cast up else: @@ -1836,18 +1831,6 @@ def parseNodeCtxt(self, # Create flag for same dimension between bias matrix and the final batch dimension self.operatorRepresentation['C_batched'] = (self.operatorRepresentation['batch'] == np.prod( newCtxt.lookup(node.inputs[2].name).shape[:-2])) - elif not self.noBiasHoisting: - # Create mock bias matrix if not present in the inputs - values = np.zeros((1)) - zeroTensor = gs.Constant(f'{node.name}_C_Tensor', values = values) - newCtxt.hoistConstant(zeroTensor) - - # Store it in the operator representation - self.operatorRepresentation['C'] = f'{node.name}_C_Tensor' - self.operatorRepresentation['C_shape'] = (0,) - - # Create flag for same dimension between bias matrix and the final batch dimension - self.operatorRepresentation['C_batched'] = False self.operatorRepresentation['size'] = np.prod(newCtxt.lookup(node.inputs[0].name).shape) @@ -2324,7 +2307,7 @@ def parseNodeCtxt(self, class GenericGEMMParser(GEMMParser): - def __init__(self, noBiasHoisting = True): + def __init__(self, noBiasHoisting = False): super().__init__(noBiasHoisting) def parseNode(self, node: gs.Node) -> (bool): diff --git a/DeeployTest/Tests/testFloatGEMMnobias/inputs.npz b/DeeployTest/Tests/testFloatGEMMnobias/inputs.npz new file mode 100644 index 0000000000000000000000000000000000000000..47728a36083b62e0eba484ed9d9c2978a41ffa9b GIT binary patch literal 4360 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 F{{pKCDzX3o literal 0 HcmV?d00001 diff --git a/DeeployTest/Tests/testFloatGEMMnobias/network.onnx b/DeeployTest/Tests/testFloatGEMMnobias/network.onnx new file mode 100644 index 0000000000000000000000000000000000000000..59264acd46214498e839ba287a17feb421613a5e GIT binary patch literal 9754 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 Iz`*Fg02PZ)*Z=?k literal 0 HcmV?d00001 diff --git a/DeeployTest/Tests/testFloatGEMMnobias/outputs.npz b/DeeployTest/Tests/testFloatGEMMnobias/outputs.npz new file mode 100644 index 0000000000000000000000000000000000000000..4e0debdf54de9fcbe825edaf722bfba1f464cafb GIT binary patch literal 2314 zcmbW3c~s8p7RTRuNxgB(80yrEMw*lH{p}r+Xe6Of(u6womO>{(WQsHxQyG&Ix*Z|W zZ|@9+GSw1CaX1%c=*p1fWH@!tx$Ca`@BQxeJm2+v*IsM?_w0|Si?o}CYBC#xg<~ry|joB&h$@_aEQk?(OF3qas-*i8l!fUK$u}GEQ!y2pMT& zE;k8@jE;#8i13e$4hrtdodUv_26yI57X>JTJKv@@qs--Ywr1w?Rr3E+vc}paSYN9S z)l~x((~U<8hT1dfva1b7xyDe=_nm@5U&{H#yFt7D2S~eX!j})5u#Zn0EuZa5cdoe8 zHs7JR^Sd>AzA1-y@9znbAEW7I;dzB?`#j<4>q})at*bQgR~h^`-+!3X*`#C57HE4zT!^j*B zdLLtn(zCyi)BQ+r-g{mAOz-H}*>r5x9R%4A9ck=MDb#0`(1+BMqG7re&e>?PqPan= zGHwQs(A$E_y$oome@c(jiy>~j7rj1|!qEu}(83gWbK3MW77HglQJV=keY3{=(s=Uua1qkN zuZq9h1!7qE5InGGJnw!vhD~eqNPTq+oLKY``l|el>iNddmaE1Zp|Ru^@UhIRwE*Gk zev)*bfGrtIz`?XqNP4Kpb_RWg8_M@!EB!9IEwJJIHf>npHk$2m4$ItE@t_|=xKCgz zOr2wdPyLzH&Wz?8lU8w{hnx>Oh-J$+4Z|}veNo*X!0=EMWTvg1(QlH_A%k)?8iQ=s1+Mc4w2y zxN0o;`V)oz$tp6_={BgP$FK!9L!1kVaWnmaO+hns++Xww3_E4^4yJ%M! zj^B0+!utnC(!sH#amR^y;v!W`)>D&m_xZQz;Yu}DxmGDyy}AJ2k&QTTZ3M2^mLZf> zOyXPK>#)ssG#g5#;waNp(D{@LmapTlIkh*XL2Up&QU1ytxLvHQh7mE%Z#S=r}81O!rY-g?3(Ju(Y*`dUUyZtJ81+Z&2z<*G3TIXpKYx9K$Caf z?g^zyd8pd7kyRhlDdZcYl9zV(bPi>Ys!yj+a=s;wD}5Z6d{HSI$!{ zz}QADuC=kn-dBt0Vy{VbGwY(5awU!`7N4c%xs~AG`EO6FvJ%RTEzlxQCN5P!59wQs zK>1rQ*tF#xoNJQcZ;y;2X0<(P8x~P*yc(~vaHo`L4{$iO1?J99&=|+Zp8mAdJHQMJQ|n#_7WU$(8kbzG?fX7)^NGy8Rd=9p*bC8U%^-0D$EMA=V56n>{ai8o>S6!%x@>5zIHXV)Ty$k ri;Aj+^ndB4i%q(Y>~E&&vILc``@byX>C#=TD^cmJF`ZuaZ?5?h!ND6` literal 0 HcmV?d00001