Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Do ustalenia
Ważne
Ten interfejs API jest dostępny w ramach autonomicznego pakietu redystrybucyjnego DirectML (zobacz Microsoft.AI.DirectML w wersji 1.15.0 lub nowszej. Zobacz również historię wersji języka DirectML.
Składnia
struct DML_MULTIHEAD_ATTENTION1_OPERATOR_DESC
{
_Maybenull_ const DML_TENSOR_DESC* QueryTensor;
_Maybenull_ const DML_TENSOR_DESC* KeyTensor;
_Maybenull_ const DML_TENSOR_DESC* ValueTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* MaskTensor;
_Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;
_Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* PastValueTensor;
_Maybenull_ const DML_TENSOR_DESC* PastSequenceLengthsTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;
FLOAT Scale;
FLOAT MaskFilterValue;
UINT QueryHeadCount;
UINT KeyValueHeadCount;
DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;
};
Członkowie
QueryTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Wykonaj zapytanie o kształt [batchSize, sequenceLength, hiddenSize], gdzie hiddenSize = headCount * headSize. Ten tensor wzajemnie wyklucza się z StackedQueryKeyTensor i StackedQueryKeyValueTensor. Tensor może również mieć 4 lub 5 wymiarów, o ile wiodące wymiary to 1.
KeyTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Klucz z kształtem [batchSize, keyValueSequenceLength, hiddenSize], gdzie hiddenSize = headCount * headSize. Ten tensor wzajemnie wyklucza się z StackedQueryKeyTensor, StackedKeyValueTensor i StackedQueryKeyValueTensor. Tensor może również mieć 4 lub 5 wymiarów, o ile wiodące wymiary to 1.
ValueTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Wartość z kształtem [batchSize, keyValueSequenceLength, valueHiddenSize], gdzie valueHiddenSize = headCount * valueHeadSize. Tensor wzajemnie wyklucza się z StackedKeyValueTensor i StackedQueryKeyValueTensor. Tensor może również mieć 4 lub 5 wymiarów, o ile wiodące wymiary to 1.
StackedQueryKeyTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Skumulowane zapytanie i klucz z kształtem [batchSize, sequenceLength, headCount, 2, headSize]. Ten tensor wzajemnie wyklucza się z queryTensor, KeyTensor, StackedKeyValueTensor i StackedQueryKeyValueTensor.
StackedKeyValueTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Skumulowany klucz i wartość z kształtem [batchSize, keyValueSequenceLength, headCount, 2, headSize]. Ten tensor wzajemnie wyklucza się z keyTensor, ValueTensor, StackedQueryKeyTensor i StackedQueryKeyValueTensor.
StackedQueryKeyValueTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Skumulowane zapytanie, klucz i wartość z kształtem [batchSize, sequenceLength, headCount, 3, headSize]. Ten tensor wzajemnie wyklucza się z queryTensor, KeyTensor, ValueTensor, StackedQueryKeyTensor i StackedKeyValueTensor.
BiasTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Jest to stronniczość kształtu [hiddenSize + hiddenSize + valueHiddenSize], który jest dodawany dowartości// przed pierwszą operacją GEMM. Tensor może mieć również 2, 3, 4 lub 5 wymiarów, o ile wiodące wymiary to 1.
MaskTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Jest to maska określająca, które elementy otrzymują ich wartość ustawioną na MaskFilterValue po operacji QxK GEMM. Zachowanie tej maski zależy od wartości MaskType i jest stosowane po relativePositionBiasTensor lub po pierwszej operacji GEMM, jeśli parametr RelativePositionBiasTensor ma wartość null. Aby uzyskać więcej informacji, zobacz definicję MaskType .
RelativePositionBiasTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Jest to stronniczość dodawana do wyniku pierwszej operacji GEMM.
PastKeyTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Tensor klucza z poprzedniej iteracji z kształtem [batchSize, headCount, pastSequenceLength, headSize]. Gdy tensor nie ma wartości null, jest on połączony z tensorem klucza, co powoduje utworzenie tensoru kształtu [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize].
PastValueTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Wartość tensor z poprzedniej iteracji z kształtem [batchSize, headCount, pastSequenceLength, headSize]. Gdy tensor nie ma wartości null, jest on połączony z wartością ValueDesc , co powoduje, że tensor kształtu [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize].
PastSequenceLengthsTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Do ustalenia
OutputTensor
Typ: const DML_TENSOR_DESC*
Dane wyjściowe kształtu [batchSize, sequenceLength, valueHiddenSize].
OutputPresentKeyTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Obecny stan dla klucza uwagi krzyżowego, z kształtem [batchSize, headCount, keyValueSequenceLength, headSize] lub stanem obecnym dla siebie z kształtem [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize]. Zawiera on zawartość tensor klucza lub zawartość połączonych tensorkluczy + do przekazania do następnej iteracji.
OutputPresentValueTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Obecny stan wartości uwagi krzyżowej z kształtem [batchSize, headCount, keyValueSequenceLength, headSize] lub stanem obecnym dla siebie z kształtem [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize]. Zawiera on zawartość tensoru wartości lub zawartość połączonych tensorwartości + do przekazania do następnej iteracji.
Scale
Typ: FLOAT
Skaluj, aby pomnożyć wynik operacji QxK GEMM, ale przed operacją Softmax. Ta wartość jest zwykle 1/sqrt(headSize)wartością .
MaskFilterValue
Typ: FLOAT
Wartość dodawana do wyniku operacji QxK GEMM do pozycji zdefiniowanych przez maskę zdefiniowaną jako elementy dopełniania. Ta wartość powinna być bardzo dużą liczbą ujemną (zwykle -10000,0f).
QueryHeadCount
Typ: UINT
Do ustalenia
KeyValueHeadCount
Typ: UINT
Do ustalenia
MaskType
Typ: DML_MULTIHEAD_ATTENTION_MASK_TYPE
Opisuje zachowanie biblioteki MaskTensor.
DML_MULTIHEAD_ATTENTION_MASK_TYPE_BOOLEAN. Gdy maska zawiera wartość 0, dodawana jest wartość MaskFilterValue ; ale jeśli zawiera wartość 1, nic nie zostanie dodane.
DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_LENGTH. Maska kształtu [1, batchSize]zawiera długości sekwencji nieupadowanego obszaru dla każdej partii, a wszystkie elementy po długości sekwencji mają ustawioną wartość MaskFilterValue.
DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_END_START. Maska kształtu [2, batchSize]zawiera indeksy końcowe (wykluczające) i początkowe (włącznie) obszaru, a wszystkie elementy poza obszarem mają ustawioną wartość MaskFilterValue.
DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_QUERY_SEQUENCE_LENGTH_START_END. Maska kształtu [batchSize * 3 + 2]ma następujące wartości: [keyLength[0], ..., keyLength[batchSize - 1], queryStart[0], ..., queryStart[batchSize - 1], queryEnd[batchSize - 1], keyStart[0], ..., keyStart[batchSize - 1], keyEnd[batchSize - 1]].
Dostępność
Ten operator został wprowadzony w DML_FEATURE_LEVEL_6_3.
Ograniczenia dotyczące tensorów
BiasTensor, KeyTensor, OutputPresentKeyTensor, OutputPresentValueTensor, OutputTensor, PastKeyTensor, PastSequenceLengthsTensor, PastValueTensor, QueryTensor, RelativePositionBiasTensor, StackedKeyValueTensor, StackedQueryKeyTensor, StackedQueryKeyTensor i ValueTensor muszą mieć ten sam typ danych.
Obsługa biblioteki Tensor
| Tensor | Rodzaj | Obsługiwane liczby wymiarów | Obsługiwane typy danych |
|---|---|---|---|
| QueryTensor | Opcjonalne dane wejściowe | Od 3 do 5 | FLOAT32, FLOAT16 |
| Tensor | Opcjonalne dane wejściowe | Od 3 do 5 | FLOAT32, FLOAT16 |
| Tensor wartości | Opcjonalne dane wejściowe | Od 3 do 5 | FLOAT32, FLOAT16 |
| StackedQueryKeyTensor | Opcjonalne dane wejściowe | 5 | FLOAT32, FLOAT16 |
| StackedKeyValueTensor | Opcjonalne dane wejściowe | 5 | FLOAT32, FLOAT16 |
| StackedQueryKeyValueTensor | Opcjonalne dane wejściowe | 5 | FLOAT32, FLOAT16 |
| Tensor odchylenia | Opcjonalne dane wejściowe | Od 1 do 5 | FLOAT32, FLOAT16 |
| MaskTensor | Opcjonalne dane wejściowe | Od 1 do 5 | INT32 powiedział: |
| Tensor RelativePositionBiasTensor | Opcjonalne dane wejściowe | Od 4 do 5 | FLOAT32, FLOAT16 |
| PastKeyTensor | Opcjonalne dane wejściowe | Od 4 do 5 | FLOAT32, FLOAT16 |
| Tensor PastValueTensor | Opcjonalne dane wejściowe | Od 4 do 5 | FLOAT32, FLOAT16 |
| PastSequenceLengthsTensor | Opcjonalne dane wejściowe | Od 1 do 5 | FLOAT32, FLOAT16 |
| Tensor wyjściowy | Wynik | Od 3 do 5 | FLOAT32, FLOAT16 |
| OutputPresentKeyTensor | Opcjonalne dane wyjściowe | Od 4 do 5 | FLOAT32, FLOAT16 |
| OutputPresentValueTensor | Opcjonalne dane wyjściowe | Od 4 do 5 | FLOAT32, FLOAT16 |