Xenova's picture
Xenova HF Staff
sync 2e7068faf55e
b5d19c4 verified
|
Raw
History Blame
2.85 kB
metadata
library_name: kernels
license: apache-2.0
tags:
  - kernel
  - webgpu
  - wgsl

com.microsoft.GatedAdd

com.microsoft · ONNX Runtime contrib operator · contrib since_version 1

Description

Adds Y, scaled by a per-row gate, to X: output = X + round_to_T(Y * gate). X and Y have shape (..., C); gate has the same rank with a trailing dimension of 1, so one value covers each row of C channels. Rounding the product to T before the addition preserves the semantics of a separate Mul followed by Add. Bfloat16 is not implemented.

See the ONNX Runtime GatedAdd contrib-operator spec for the reference semantics.

Inputs

Name Bind key Logical dtype Rank Shape Description Presence
X X T Unscaled input with shape (..., C). Any rank of at least 1 is accepted; only the trailing channel axis is distinguished. required
Y Y T Input scaled by the gate, with the same shape as X. required
gate gate T Per-row gate with shape (..., 1): the same rank and leading dimensions as X, with a trailing dimension of 1 that broadcasts over the C channels. required

Outputs

Name Bind key Logical dtype Rank Shape Description Presence
output output T same as X same as X Gated sum X + round_to_T(Y * gate), with the same shape as X. required

Type constraints

Variable Allowed dtypes
T float32, float16

Files

Use with @huggingface/kernels

The loader derives every required output's shape and logical dtype from the manifest contract and this call. It then allocates the result tensors automatically.

The version: 1 option selects the published kernel contract; it is independent of any operator opset, contrib since_version, or model version.

Replace each *Data placeholder with a typed array containing the corresponding input data.

import { getKernel } from "@huggingface/kernels";

const kernel = await getKernel("webgpu-kernels/com.microsoft.GatedAdd", { version: 1 });
const { output } = await kernel({
  X: { data: XData, shape: [2, 3] },
  Y: { data: YData, shape: [2, 3] },
  gate: { data: gateData, shape: [2, 1] },
});