Skip to content

ConvTranspose support: capability, int8 requant, and compile-time fail-closed gate - #30

Merged
asteinh merged 4 commits into
developfrom
feature/convtranspose
Aug 16, 2026
Merged

ConvTranspose support: capability, int8 requant, and compile-time fail-closed gate#30
asteinh merged 4 commits into
developfrom
feature/convtranspose

Conversation

@asteinh

@asteinh asteinh commented Aug 15, 2026

Copy link
Copy Markdown
Member

Summary

Adds the compiler side of ConvTranspose support and closes a compile-time gate
gap. When a graph contains a ConvTranspose, the compiler now declares it
supported, lays its weight out in the runtime's expected OHWI layout, computes
the correct int8 requant scale, and emits a plan the runtime executes bit-exact
against ONNX Runtime. Separately, tigris compile now fails closed for any
operator that has no runtime kernel, instead of compiling and failing at device
load.

Pairs with the runtime change in raws-labs/tigris-runtime#32, which executes the
transposed convolution. Merge tigris-runtime#32 first.

What changed

  • ConvTranspose added to the reference and s8 capability sets; the capability
    matrix is regenerated (CMSIS-NN / ESP-NN resolve to the s8_ref fallback, as
    for other reference-native ops). The already-present weight-layout transpose
    (IOHW -> OHWI) and attribute packing now take effect.
  • The int8 requant fix: ConvTranspose added to the effective-scale operator
    set so its per-output-channel output multiplier and shift use
    input_scale * weight_scale / output_scale. ConvTranspose's weight is
    [C_in, C_out, kH, kW], so per-output-channel quantization uses axis 1; this
    is verified end to end.
  • A general compile-time fail-closed gate: validate_operator_support now
    rejects any operator whose type has no runtime route on any backend, with an
    actionable diagnostic, instead of encoding a plan that only fails at load.
    ConvTranspose passes because it now has a route; MatMul, Pad, BatchNorm and
    the other schema-known-but-unimplemented ops now fail at compile.
  • ConvTranspose is restricted at compile to the supported subset: group == 1
    and dilation == 1 are enforced (mirroring the runtime loader guards);
    output_padding is absorbed into the ONNX-inferred output shape.
  • Cross-repo differential gate cases: ConvTranspose float, int8 (per-channel,
    multi-output-channel), a kernel-greater-than-stride overlap case, an
    output_padding case, an asymmetric-pad case, and a Conv-then-ConvTranspose
    case, all asserted bit-exact against ONNX Runtime.

Testing

  • pytest: full suite passes (324 passed, 2 skipped), including the new operator
    validation tests and the general-gate rejection test.
  • Cross-repo gate: all existing cases pass, and every new ConvTranspose case
    matches ONNX Runtime (float allclose 1e-5; int8 at the established 1-LSB QDQ
    tolerance). The capability-to-runtime consistency check passes.

@asteinh
asteinh merged commit 518ff66 into develop Aug 16, 2026
10 checks passed
@asteinh
asteinh deleted the feature/convtranspose branch August 16, 2026 15:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant