Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
99d5517
Add Engram contrib op schemas
Copilot Aug 25, 2026
b44523f
Add CPU Engram contrib kernels
Copilot Aug 25, 2026
819e695
Add CUDA Engram contrib kernels
Copilot Aug 25, 2026
608c54f
Add WebGPU Engram contrib kernels
Copilot Aug 25, 2026
3ad3490
Add Engram contrib op tests
Copilot Aug 25, 2026
3fd904b
Fix Engram CPU threadpool usage
Copilot Aug 25, 2026
1c82a47
Split Engram ops into standalone files
Copilot Aug 25, 2026
b8a41e7
Add CPU FP16 Engram kernels, shared EP helpers, and docs
Copilot Aug 25, 2026
fcb7ca0
Rename NgramHashMapping to NGramHashMapping
Copilot Aug 25, 2026
2ddc306
Address PR review: shared-gate/RMS passes and sign(0) fix for Engram ops
Copilot Aug 25, 2026
e22b5c8
Fix CI failures: CUDA GetComputeStream, WebGPU namespace, test skip trap
Copilot Aug 26, 2026
aaad3f7
Address review: preprojected EngramGate inputs, cross-invocation stat…
Copilot Aug 27, 2026
4c54142
Add WebGPU state kernels, equivalence tests, and regenerated contrib …
Copilot Aug 27, 2026
913a4f4
Write present_state on the empty-sequence path in all ShortConv EPs
Copilot Aug 27, 2026
0cd1275
Update OperatorKernels.md for the new Engram op signatures
Copilot Aug 27, 2026
fb32151
Address review: raw ShortConv state, engram_helper rename, exact mult…
Copilot Aug 28, 2026
8e89bcf
Remove unused chunk_config local in ShortConv chunked test (-Werror fix)
Copilot Aug 28, 2026
3749862
Vectorize WebGPU Engram shaders and cover int32 chunked n-gram path
Copilot Aug 31, 2026
ec7bcd6
Address review: validate vocab_sizes, temp allocator + loop hoisting,…
Copilot Sep 1, 2026
b907fdf
Remove ShortConv op; use CausalConvWithState instead
Copilot Sep 1, 2026
fe54d5c
Clarify multipliers/vocab_sizes descriptions as conventions, not cons…
Copilot Sep 1, 2026
c70e9d0
Add dilation attribute to CausalConvWithState schema and CPU kernel
Copilot Sep 1, 2026
772561e
Add dilation support to CausalConvWithState CUDA/WebGPU kernels, test…
Copilot Sep 1, 2026
a6d194e
Changes before error encountered
Copilot Sep 1, 2026
8d512ca
Add channels_last support to CausalConvWithState CPU/CUDA/WebGPU kernels
Copilot Sep 1, 2026
45de634
Add dilation support to VarlenCausalConvWithState CUDA kernels
Copilot Sep 1, 2026
3b15c9c
Add CUDA EP coverage, channels_last and varlen dilation tests, and up…
Copilot Sep 1, 2026
7fff3ae
Document why the varlen state shift is one sample regardless of dilation
Copilot Sep 1, 2026
698dbf7
Merge remote-tracking branch 'origin/main' into copilot/add-op-suppor…
Copilot Sep 1, 2026
608d15f
Define the missing MakeRamp test helper in engram_ops_test.cc
Copilot Sep 1, 2026
b90057d
Make NGramHashMapping past/present aliasing safe; fix CPU/WGSL review…
Copilot Sep 1, 2026
9cfee6b
Add channels-last CUDA prefill kernel and close review coverage gaps
Copilot Sep 1, 2026
a30e067
Close the 9cfee6b review round: WebGPU MayInplace + bounds guard, in-…
Copilot Sep 2, 2026
b81719f
Remove now-unused MakeRamp test helper
Copilot Sep 2, 2026
6e766f9
Get libuuid from vcpkg for the Linux CoreML EP build
Copilot Sep 2, 2026
d443828
Skip the WebGPU in-place test when the provider is unavailable
Copilot Sep 2, 2026
fb18029
Read aliased NGram history through the present_ids binding on WebGPU
Copilot Sep 2, 2026
68f3a4b
Run the lint jobs on a Python version cached on the runner pool
Copilot Sep 2, 2026
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
172 changes: 172 additions & 0 deletions docs/ContribOperators.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ Do not modify directly.*
* <a href="#com.microsoft.DynamicTimeWarping">com.microsoft.DynamicTimeWarping</a>
* <a href="#com.microsoft.EPContext">com.microsoft.EPContext</a>
* <a href="#com.microsoft.EmbedLayerNormalization">com.microsoft.EmbedLayerNormalization</a>
* <a href="#com.microsoft.EngramGate">com.microsoft.EngramGate</a>
* <a href="#com.microsoft.ExpandDims">com.microsoft.ExpandDims</a>
* <a href="#com.microsoft.FastGelu">com.microsoft.FastGelu</a>
* <a href="#com.microsoft.FusedConv">com.microsoft.FusedConv</a>
Expand Down Expand Up @@ -70,6 +71,7 @@ Do not modify directly.*
* <a href="#com.microsoft.MulInteger">com.microsoft.MulInteger</a>
* <a href="#com.microsoft.MultiHeadAttention">com.microsoft.MultiHeadAttention</a>
* <a href="#com.microsoft.MurmurHash3">com.microsoft.MurmurHash3</a>
* <a href="#com.microsoft.NGramHashMapping">com.microsoft.NGramHashMapping</a>
* <a href="#com.microsoft.NGramRepeatBlock">com.microsoft.NGramRepeatBlock</a>
* <a href="#com.microsoft.NhwcConv">com.microsoft.NhwcConv</a>
* <a href="#com.microsoft.NhwcFusedConv">com.microsoft.NhwcFusedConv</a>
Expand Down Expand Up @@ -110,6 +112,7 @@ Do not modify directly.*
* <a href="#com.microsoft.RotaryEmbedding">com.microsoft.RotaryEmbedding</a>
* <a href="#com.microsoft.SampleOp">com.microsoft.SampleOp</a>
* <a href="#com.microsoft.Sampling">com.microsoft.Sampling</a>
* <a href="#com.microsoft.ShortConv">com.microsoft.ShortConv</a>
* <a href="#com.microsoft.SkipGroupNorm">com.microsoft.SkipGroupNorm</a>
* <a href="#com.microsoft.SkipLayerNormalization">com.microsoft.SkipLayerNormalization</a>
* <a href="#com.microsoft.SkipSimplifiedLayerNormalization">com.microsoft.SkipSimplifiedLayerNormalization</a>
Expand Down Expand Up @@ -1771,6 +1774,68 @@ This version of the operator has been available since version 1 of the 'com.micr
</dl>


### <a name="com.microsoft.EngramGate"></a><a name="com.microsoft.engramgate">**com.microsoft.EngramGate**</a>

Fuses the Engram gate/value projection block.

The op consumes flattened n-gram embeddings, hidden states in
(batch_size, sequence_length, hc_mult, hidden_size) layout, per-hyper-connection key projection
weights, a shared value projection, and RMSNorm scales. It computes the Engram gate:

gate = sigmoid(sign(dot) * sqrt(max(abs(dot), 1e-6))) where
dot = sum(RMSNorm(key) * RMSNorm(query)) / sqrt(hidden_size).

The output is gate * value_projection(embeddings), broadcast across hidden_size for each
hyper-connection. A following ShortConv plus Add represents the final Engram residual
value + short_conv(value).

#### Version

This version of the operator has been available since version 1 of the 'com.microsoft' operator set.

#### Attributes

<dl>
<dt><tt>epsilon</tt> : float</dt>
<dd>Epsilon used by both RMS normalization steps. Default is 1e-5.</dd>
</dl>

#### Inputs

<dl>
<dt><tt>embeddings</tt> : T</dt>
<dd>Flattened Engram embeddings with shape (batch_size, sequence_length, embedding_size).</dd>
<dt><tt>hidden_states</tt> : T</dt>
<dd>Hidden states with shape (batch_size, sequence_length, hc_mult, hidden_size).</dd>
<dt><tt>key_weight</tt> : T</dt>
<dd>Per-hyper-connection key projection weights with shape (hc_mult, embedding_size, hidden_size).</dd>
<dt><tt>key_bias</tt> (optional) : T</dt>
<dd>Optional per-hyper-connection key projection bias with shape (hc_mult, hidden_size).</dd>
<dt><tt>value_weight</tt> : T</dt>
<dd>Shared value projection weight with shape (embedding_size, hidden_size).</dd>
<dt><tt>value_bias</tt> (optional) : T</dt>
<dd>Optional shared value projection bias with shape (hidden_size).</dd>
<dt><tt>key_norm_scale</tt> : T</dt>
<dd>RMSNorm scale for key projections with shape (hc_mult, hidden_size).</dd>
<dt><tt>query_norm_scale</tt> : T</dt>
<dd>RMSNorm scale for hidden-state queries with shape (hc_mult, hidden_size).</dd>
</dl>

#### Outputs

<dl>
<dt><tt>output</tt> : T</dt>
<dd>Gated value tensor with shape (batch_size, sequence_length, hc_mult, hidden_size).</dd>
</dl>

#### Type Constraints

<dl>
<dt><tt>T</tt> : tensor(float), tensor(float16), tensor(bfloat16)</dt>
<dd>Constrain input and output types to float tensors.</dd>
</dl>


### <a name="com.microsoft.ExpandDims"></a><a name="com.microsoft.expanddims">**com.microsoft.ExpandDims**</a>

ExpandDims echo operator.
Expand Down Expand Up @@ -4037,6 +4102,58 @@ This version of the operator has been available since version 1 of the 'com.micr
</dl>


### <a name="com.microsoft.NGramHashMapping"></a><a name="com.microsoft.ngramhashmapping">**com.microsoft.NGramHashMapping**</a>

Computes Engram n-gram hash ids from pre-compressed tokenizer ids.

For n in [2, max_ngram_size], the op creates causal shifts of input_ids, padding positions before the
sequence with pad_id, and computes
mix = shifted_0 * multipliers[0] xor ... xor shifted_(n-1) * multipliers[n-1].
For every head of that n-gram order it emits mix modulo the corresponding head vocabulary size.
The output layout is (batch_size, sequence_length, (max_ngram_size - 1) * n_head_per_ngram), with
heads for n=2 first, then n=3, and so on.

#### Version

This version of the operator has been available since version 1 of the 'com.microsoft' operator set.

#### Attributes

<dl>
<dt><tt>max_ngram_size</tt> : int (required)</dt>
<dd>Maximum n-gram order. Must be at least 2.</dd>
<dt><tt>n_head_per_ngram</tt> : int (required)</dt>
<dd>Number of hash heads emitted for each n-gram order.</dd>
<dt><tt>pad_id</tt> : int (required)</dt>
<dd>Compressed tokenizer id used to pad causal shifts before the beginning of a sequence.</dd>
</dl>

#### Inputs

<dl>
<dt><tt>input_ids</tt> : M</dt>
<dd>Compressed tokenizer ids with shape (batch_size, sequence_length).</dd>
<dt><tt>multipliers</tt> : M</dt>
<dd>Per-shift odd multipliers with shape (max_ngram_size).</dd>
<dt><tt>vocab_sizes</tt> : M</dt>
<dd>Per-output-head prime vocabulary sizes with shape ((max_ngram_size - 1) * n_head_per_ngram).</dd>
</dl>

#### Outputs

<dl>
<dt><tt>hash_ids</tt> : M</dt>
<dd>Hash ids with shape (batch_size, sequence_length, (max_ngram_size - 1) * n_head_per_ngram).</dd>
</dl>

#### Type Constraints

<dl>
<dt><tt>M</tt> : tensor(int32), tensor(int64)</dt>
<dd>Constrain ids, multipliers, vocabulary sizes, and output ids to integer tensors.</dd>
</dl>


### <a name="com.microsoft.NGramRepeatBlock"></a><a name="com.microsoft.ngramrepeatblock">**com.microsoft.NGramRepeatBlock**</a>

Enforce no repetition of n-grams. Scores are set to `-inf` for tokens that form a repeated n-gram if added to the back of the input_ids.
Expand Down Expand Up @@ -6354,6 +6471,61 @@ This version of the operator has been available since version 1 of the 'com.micr
</dl>


### <a name="com.microsoft.ShortConv"></a><a name="com.microsoft.shortconv">**com.microsoft.ShortConv**</a>

Fuses the Engram ShortConv block over input shape (batch_size, sequence_length, hc_mult, hidden_size).

For each (batch, token, hyper-connection) row, the op first applies RMS normalization over hidden_size:
normed = input * norm_scale * rsqrt(mean(input * input) + epsilon).

It then flattens hc_mult and hidden_size into depthwise convolution channels and applies a causal
1D convolution with optional dilation along the sequence axis. The output is cropped to sequence_length,
optionally passed through SiLU/Swish, and returned in (batch_size, sequence_length, hc_mult, hidden_size)
layout. The convolution weight layout is (hc_mult * hidden_size, 1, kernel_size).

#### Version

This version of the operator has been available since version 1 of the 'com.microsoft' operator set.

#### Attributes

<dl>
<dt><tt>activation</tt> : string</dt>
<dd>Fused activation function. One of: 'silu', 'swish', 'none'. Default is 'silu'.</dd>
<dt><tt>dilation</tt> : int</dt>
<dd>Causal convolution dilation along the sequence axis. Default is 1.</dd>
<dt><tt>epsilon</tt> : float</dt>
<dd>Epsilon used by the per-hyper-connection RMS normalization. Default is 1e-5.</dd>
</dl>

#### Inputs (3 - 4)

<dl>
<dt><tt>input</tt> : T</dt>
<dd>Input tensor with shape (batch_size, sequence_length, hc_mult, hidden_size).</dd>
<dt><tt>weight</tt> : T</dt>
<dd>Depthwise convolution kernel with shape (hc_mult * hidden_size, 1, kernel_size).</dd>
<dt><tt>norm_scale</tt> : T</dt>
<dd>RMSNorm scale with shape (hc_mult, hidden_size).</dd>
<dt><tt>bias</tt> (optional) : T</dt>
<dd>Optional convolution bias with shape (hc_mult * hidden_size).</dd>
</dl>

#### Outputs

<dl>
<dt><tt>output</tt> : T</dt>
<dd>Output tensor with the same shape as input.</dd>
</dl>

#### Type Constraints

<dl>
<dt><tt>T</tt> : tensor(float), tensor(float16), tensor(bfloat16)</dt>
<dd>Constrain input and output types to float tensors.</dd>
</dl>


### <a name="com.microsoft.SkipGroupNorm"></a><a name="com.microsoft.skipgroupnorm">**com.microsoft.SkipGroupNorm**</a>

This operator element-wise adds x, skip and bias, then apply group normalization and optional activation.
Expand Down
6 changes: 6 additions & 0 deletions docs/OperatorKernels.md
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,7 @@ The **OpSet Version** column uses the following notation:
|DynamicQuantizeMatMul|*in* A:**T1**<br> *in* B:**T2**<br> *in* b_scale:**T1**<br> *in* b_zero_point:**T2**<br> *in* bias:**T1**<br> *out* Y:**T1**|1+|**T1** = tensor(float)<br/> **T2** = tensor(int8), tensor(uint8)|
|DynamicTimeWarping|*in* input:**F**<br> *out* output:**I**|1+|**F** = tensor(float)<br/> **I** = tensor(int32)|
|EmbedLayerNormalization|*in* input_ids:**T1**<br> *in* segment_ids:**T1**<br> *in* word_embedding:**T**<br> *in* position_embedding:**T**<br> *in* segment_embedding:**T**<br> *in* gamma:**T**<br> *in* beta:**T**<br> *in* mask:**T1**<br> *in* position_ids:**T1**<br> *out* output:**T**<br> *out* mask_index:**T1**<br> *out* embedding_sum:**T**|1+|**T** = tensor(float)|
|EngramGate|*in* embeddings:**T**<br> *in* hidden_states:**T**<br> *in* key_weight:**T**<br> *in* key_bias:**T**<br> *in* value_weight:**T**<br> *in* value_bias:**T**<br> *in* key_norm_scale:**T**<br> *in* query_norm_scale:**T**<br> *out* output:**T**|1+|**T** = tensor(float), tensor(float16)|
|ExpandDims|*in* X:**T**<br> *in* axis:**tensor(int32)**<br> *out* Y:**T**|1+|**T** = tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)<br/> **axis** = tensor(int32)|
|FastGelu|*in* X:**T**<br> *in* bias:**T**<br> *out* Y:**T**|1+|**T** = tensor(float)|
|FusedConv|*in* X:**T**<br> *in* W:**T**<br> *in* B:**T**<br> *in* Z:**T**<br> *out* Y:**T**|1+|**T** = tensor(float)|
Expand All @@ -608,6 +609,7 @@ The **OpSet Version** column uses the following notation:
|MoE|*in* input:**T**<br> *in* router_probs:**T**<br> *in* fc1_experts_weights:**T**<br> *in* fc1_experts_bias:**T**<br> *in* fc2_experts_weights:**T**<br> *in* fc2_experts_bias:**T**<br> *in* fc3_experts_weights:**T**<br> *in* fc3_experts_bias:**T**<br> *out* output:**T**|1+|**T** = tensor(float)|
|MultiHeadAttention|*in* query:**T**<br> *in* key:**T**<br> *in* value:**T**<br> *in* bias:**T**<br> *in* key_padding_mask:**M**<br> *in* attention_bias:**T**<br> *in* past_key:**T**<br> *in* past_value:**T**<br> *in* past_sequence_length:**M**<br> *in* cache_indirection:**M**<br> *out* output:**T**<br> *out* present_key:**T**<br> *out* present_value:**T**<br> *out* qk:**QK**|1+|**T** = tensor(float)|
|MurmurHash3|*in* X:**T1**<br> *out* Y:**T2**|1+|**T1** = tensor(double), tensor(float), tensor(int32), tensor(int64), tensor(string), tensor(uint32), tensor(uint64)<br/> **T2** = tensor(int32), tensor(uint32)|
|NGramHashMapping|*in* input_ids:**M**<br> *in* multipliers:**M**<br> *in* vocab_sizes:**M**<br> *out* hash_ids:**M**|1+|**M** = tensor(int32), tensor(int64)|
|NGramRepeatBlock|*in* input_ids:**Tid**<br> *in* scores:**T**<br> *out* scores_out:**T**|1+|**T** = tensor(float)<br/> **Tid** = tensor(int64)|
|NhwcMaxPool|*in* x:**T**<br> *out* y:**T**|1+|**T** = tensor(int8), tensor(uint8)|
|Pad|*in* data:**T**<br> *in* pads:**tensor(int64)**<br> *in* value:**T**<br> *out* output:**T**|1+|**T** = tensor(float)|
Expand All @@ -628,6 +630,7 @@ The **OpSet Version** column uses the following notation:
|RotaryEmbedding|*in* input:**T**<br> *in* position_ids:**M**<br> *in* cos_cache:**T**<br> *in* sin_cache:**T**<br> *out* output:**T**|1+|**M** = tensor(int64)<br/> **T** = tensor(float), tensor(float16)|
|SampleOp|*in* X:**T**<br> *out* Y:**T**|1+|**T** = tensor(float)|
|Sampling|*in* input_ids:**I**<br> *in* max_length:**I**<br> *in* min_length:**I**<br> *in* repetition_penalty:**T**<br> *in* vocab_mask:**I**<br> *in* prefix_vocab_mask:**I**<br> *in* attention_mask:**I**<br> *in* presence_mask:**I**<br> *in* seed:**I**<br> *out* sequences:**I**<br> *out* filtered_logits:**T**|1+|**T** = tensor(float)|
|ShortConv|*in* input:**T**<br> *in* weight:**T**<br> *in* norm_scale:**T**<br> *in* bias:**T**<br> *out* output:**T**|1+|**T** = tensor(float), tensor(float16)|
|SkipLayerNormalization|*in* input:**T**<br> *in* skip:**T**<br> *in* gamma:**T**<br> *in* beta:**T**<br> *in* bias:**T**<br> *out* output:**T**<br> *out* mean:**U**<br> *out* inv_std_var:**U**<br> *out* input_skip_bias_sum:**T**|1+|**T** = tensor(double), tensor(float), tensor(float16)|
|SkipSimplifiedLayerNormalization|*in* input:**T**<br> *in* skip:**T**<br> *in* gamma:**T**<br> *in* bias:**T**<br> *out* output:**T**<br> *out* mean:**U**<br> *out* inv_std_var:**U**<br> *out* input_skip_bias_sum:**T**|1+|**T** = tensor(double), tensor(float), tensor(float16)|
|SparseAttention|*in* query:**T**<br> *in* key:**T**<br> *in* value:**T**<br> *in* past_key:**T**<br> *in* past_value:**T**<br> *in* block_row_indices:**M**<br> *in* block_col_indices:**M**<br> *in* total_sequence_length:**M**<br> *in* key_total_sequence_lengths:**M**<br> *in* cos_cache:**T**<br> *in* sin_cache:**T**<br> *out* output:**T**<br> *out* present_key:**T**<br> *out* present_value:**T**|1+|**M** = tensor(int32)<br/> **T** = tensor(float), tensor(float16)|
Expand Down Expand Up @@ -1087,6 +1090,7 @@ The **OpSet Version** column uses the following notation:
|DequantizeWithOrder|*in* input:**Q**<br> *in* scale_input:**S**<br> *out* output:**F**|1+|**F** = tensor(float), tensor(float16)<br/> **Q** = tensor(int8)<br/> **S** = tensor(float)|
|DynamicTimeWarping|*in* input:**F**<br> *out* output:**I**|1+|**F** = tensor(float)<br/> **I** = tensor(int32)|
|EmbedLayerNormalization|*in* input_ids:**T1**<br> *in* segment_ids:**T1**<br> *in* word_embedding:**T**<br> *in* position_embedding:**T**<br> *in* segment_embedding:**T**<br> *in* gamma:**T**<br> *in* beta:**T**<br> *in* mask:**T1**<br> *in* position_ids:**T1**<br> *out* output:**T**<br> *out* mask_index:**T1**<br> *out* embedding_sum:**T**|1+|**T** = tensor(float), tensor(float16)|
|EngramGate|*in* embeddings:**T**<br> *in* hidden_states:**T**<br> *in* key_weight:**T**<br> *in* key_bias:**T**<br> *in* value_weight:**T**<br> *in* value_bias:**T**<br> *in* key_norm_scale:**T**<br> *in* query_norm_scale:**T**<br> *out* output:**T**|1+|**T** = tensor(bfloat16), tensor(float), tensor(float16)|
|FastGelu|*in* X:**T**<br> *in* bias:**T**<br> *out* Y:**T**|1+|**T** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)|
|FusedConv|*in* X:**T**<br> *in* W:**T**<br> *in* B:**T**<br> *in* Z:**T**<br> *out* Y:**T**|1+|**T** = tensor(float)|
|FusedMatMul|*in* A:**T**<br> *in* B:**T**<br> *out* Y:**T**|1+|**T** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)|
Expand All @@ -1113,6 +1117,7 @@ The **OpSet Version** column uses the following notation:
|MatMulNBits|*in* A:**T1**<br> *in* B:**T2**<br> *in* scales:**T1**<br> *in* zero_points:**T3**<br> *in* g_idx:**T4**<br> *in* bias:**T1**<br> *out* Y:**T1**|1+|**T1** = tensor(bfloat16), tensor(float), tensor(float16)<br/> **T2** = tensor(uint8)<br/> **T3** = tensor(bfloat16), tensor(float), tensor(float16), tensor(uint8)|
|MoE|*in* input:**T**<br> *in* router_probs:**T**<br> *in* fc1_experts_weights:**T**<br> *in* fc1_experts_bias:**T**<br> *in* fc2_experts_weights:**T**<br> *in* fc2_experts_bias:**T**<br> *in* fc3_experts_weights:**T**<br> *in* fc3_experts_bias:**T**<br> *out* output:**T**|1+|**T** = tensor(bfloat16), tensor(float), tensor(float16)|
|MultiHeadAttention|*in* query:**T**<br> *in* key:**T**<br> *in* value:**T**<br> *in* bias:**T**<br> *in* key_padding_mask:**M**<br> *in* attention_bias:**T**<br> *in* past_key:**T**<br> *in* past_value:**T**<br> *in* past_sequence_length:**M**<br> *in* cache_indirection:**M**<br> *out* output:**T**<br> *out* present_key:**T**<br> *out* present_value:**T**<br> *out* qk:**QK**|1+|**QK** = tensor(bfloat16), tensor(float), tensor(float16)<br/> **T** = tensor(bfloat16), tensor(float), tensor(float16)|
|NGramHashMapping|*in* input_ids:**M**<br> *in* multipliers:**M**<br> *in* vocab_sizes:**M**<br> *out* hash_ids:**M**|1+|**M** = tensor(int32), tensor(int64)|
|NGramRepeatBlock|*in* input_ids:**Tid**<br> *in* scores:**T**<br> *out* scores_out:**T**|1+|**T** = tensor(float)<br/> **Tid** = tensor(int64)|
|NhwcConv|*in* X:**T**<br> *in* W:**T**<br> *in* B:**T**<br> *out* Y:**T**|1+|**T** = tensor(float), tensor(float16)|
|PackedAttention|*in* input:**T**<br> *in* weights:**T**<br> *in* bias:**T**<br> *in* token_offset:**M**<br> *in* cumulative_sequence_length:**M**<br> *in* attention_bias:**T**<br> *out* output:**T**|1+|**T** = tensor(float), tensor(float16)|
Expand All @@ -1134,6 +1139,7 @@ The **OpSet Version** column uses the following notation:
|Rfft|*in* X:**T**<br> *out* Y:**T**|1+|**T** = tensor(double), tensor(float), tensor(float16)|
|RotaryEmbedding|*in* input:**T**<br> *in* position_ids:**M**<br> *in* cos_cache:**T**<br> *in* sin_cache:**T**<br> *out* output:**T**|1+|**M** = tensor(int64)<br/> **T** = tensor(bfloat16), tensor(float), tensor(float16)|
|Sampling|*in* input_ids:**I**<br> *in* max_length:**I**<br> *in* min_length:**I**<br> *in* repetition_penalty:**T**<br> *in* vocab_mask:**I**<br> *in* prefix_vocab_mask:**I**<br> *in* attention_mask:**I**<br> *in* presence_mask:**I**<br> *in* seed:**I**<br> *out* sequences:**I**<br> *out* filtered_logits:**T**|1+|**T** = tensor(float), tensor(float16)|
|ShortConv|*in* input:**T**<br> *in* weight:**T**<br> *in* norm_scale:**T**<br> *in* bias:**T**<br> *out* output:**T**|1+|**T** = tensor(bfloat16), tensor(float), tensor(float16)|
|SkipGroupNorm|*in* X:**T**<br> *in* gamma:**M**<br> *in* beta:**M**<br> *in* skip:**T**<br> *in* bias:**T**<br> *out* Y:**T**<br> *out* S:**T**|1+|**T** = tensor(float), tensor(float16)|
|SkipLayerNormalization|*in* input:**T**<br> *in* skip:**T**<br> *in* gamma:**T**<br> *in* beta:**T**<br> *in* bias:**T**<br> *out* output:**T**<br> *out* mean:**U**<br> *out* inv_std_var:**U**<br> *out* input_skip_bias_sum:**T**|1+|**T** = tensor(bfloat16), tensor(float), tensor(float16)|
|SkipSimplifiedLayerNormalization|*in* input:**T**<br> *in* skip:**T**<br> *in* gamma:**T**<br> *in* bias:**T**<br> *out* output:**T**<br> *out* mean:**U**<br> *out* inv_std_var:**U**<br> *out* input_skip_bias_sum:**T**|1+|**T** = tensor(bfloat16), tensor(float), tensor(float16)|
Expand Down
Loading
Loading