com.microsoft.GemmFastGelu

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

Description

Fuses MatMul, an optional bias, and FastGelu: Y = FastGelu(X @ W + bias). X has rank at least 2 with shape (..., K), W has shape (K, N), and bias has shape (N). The activation runs in the float32 accumulator before the output is narrowed, avoiding an intermediate (..., N) tensor. Bfloat16 is not implemented.

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

Inputs

Name Logical dtype Rank Shape Description Presence
X T Left operand of rank 2 or greater with shape (..., K); every leading-axis coordinate identifies a row of the product. required
W T 2 Right operand with shape (K, N). required
bias T 1 Optional bias with shape (N), added before the activation. optional

Outputs

Name Logical dtype Rank Shape Description Presence
Y T same as X ONNX MatMul result of X and W FastGelu(X @ W + bias), with the same rank and leading dimensions as X and a trailing N. required

Type constraints

Variable Allowed dtypes
T float32, float16

Implementation variants

One implementation is selected per call from the device capabilities, the request shapes and the dtypes; these notes say what each one covers.

  • sgmat_direct_bias — Uses supported subgroup matrices with direct activation loads and double-buffered weights. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat_direct — Uses supported subgroup matrices with direct activation loads and double-buffered weights. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat_direct_bias_f16 — Uses supported subgroup matrices with direct activation loads and double-buffered weights. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat_direct_f16 — Uses supported subgroup matrices with direct activation loads and double-buffered weights. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat_bias — Uses supported subgroup matrices with staged operands. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat — Uses supported subgroup matrices with staged operands. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat_bias_f16 — Uses supported subgroup matrices with staged operands. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.
  • sgmat_f16 — Uses supported subgroup matrices with staged operands. Bias and FastGelu run on the f32 accumulator before the single output cast. Resource, alignment and matrix-type guards retain the portable path on other devices.

Device requirements

Some implementation variants require subgroup-matrix and subgroups. These are route-specific capabilities, not package-wide requirements; availability also depends on the request shape and dtype.

Files

Use with @huggingface/kernels

npm install --save-exact @huggingface/kernels@0.0.1-preview.2

Required output shapes and logical data types are inferred from the supplied inputs and attributes; result tensors are allocated automatically.

The version: 1 option selects the published kernel contract; it is independent of any operator opset, contrib since_version, or model version. It follows the v1 branch as fixes land. To pin exact artifact bytes, pass a 40-character commit revision instead of 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.GemmFastGelu", { version: 1 });
const { Y } = await kernel({ X: { data: XData, shape: [5, 6] }, W: { data: WData, shape: [6, 4] } });
Downloads last month
-
kernel
webgpu
wgsl
apache-2.0
WebGPU

Requires WebGPU support. See the compatibility table.