共用方式為


DML_MULTIHEAD_ATTENTION1_OPERATOR_DESC結構 (directml.h)

待定

這很重要

此 API 可作為 DirectML 獨立可轉散發套件的一部分(請參閱 Microsoft.AI.DirectML 1.15.0 版和更新版本。 另請參閱 DirectML 版本歷程記錄。

語法

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;
};

成員

QueryTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

使用圖形 [batchSize, sequenceLength, hiddenSize]查詢 ,其中 hiddenSize = headCount * headSize。 這個張量與 StackedQueryKeyTensorStackedQueryKeyValueTensor 互斥。 只要前置維度為 1,張量也可以有 4 或 5 個維度。

KeyTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

具有圖形 [batchSize, keyValueSequenceLength, hiddenSize]的索引鍵,其中 hiddenSize = headCount * headSize。 這個張量與 StackedQueryKeyTensorStackedKeyValueTensorStackedQueryKeyValueTensor 互斥。 只要前置維度為 1,張量也可以有 4 或 5 個維度。

ValueTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

具有圖形 [batchSize, keyValueSequenceLength, valueHiddenSize]的值,其中 valueHiddenSize = headCount * valueHeadSize。 這個張量與 StackedKeyValueTensorStackedQueryKeyValueTensor 互斥。 只要前置維度為 1,張量也可以有 4 或 5 個維度。

StackedQueryKeyTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

具有圖形 [batchSize, sequenceLength, headCount, 2, headSize]的堆疊查詢和索引鍵。 這個張量與 QueryTensorKeyTensorStackedKeyValueTensorStackedQueryKeyValueTensor 互斥。

StackedQueryKeyTensor 版面配置

StackedKeyValueTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

具有圖形 [batchSize, keyValueSequenceLength, headCount, 2, headSize]的堆疊索引鍵和值。 這個張量與 KeyTensorValueTensorStackedQueryKeyTensor 和 StackedQueryKeyValueTensor 互斥。

StackedKeyValueTensor 版面配置

StackedQueryKeyValueTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

具有圖形 [batchSize, sequenceLength, headCount, 3, headSize]的堆疊查詢、索引鍵和值。 這個張量與 QueryTensor、KeyTensorValueTensorStackedQueryKeyTensor 和 StackedKeyValueTensor 互斥。

StackedQueryKeyValueTensor 版面配置

BiasTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

這是圖形 [hiddenSize + hiddenSize + valueHiddenSize]的偏差,其會在第一個 GEMM 作業之前新增至 查詢/索引鍵/ 。 只要前置維度為 1,此張量也可以有 2、3、4 或 5 個維度。

MaskTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

這是遮罩,可決定哪些元素在 QxK GEMM 作業之後將其值設定為 MaskFilterValue 。 此遮罩的行為取決於 MaskType 的值,並在 RelativePositionBiasTensor 之後套用,或在 RelativePositionBiasTensor 為 Null 時套用第一個 GEMM 作業之後。 如需詳細資訊,請參閱 MaskType 的定義。

RelativePositionBiasTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

這是新增至第一個 GEMM 作業結果的偏差。

PastKeyTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

上一個反覆項目的索引鍵張量與圖形 [batchSize, headCount, pastSequenceLength, headSize]。 當這個張量不是 Null 時,它會與索引鍵張量串連,這會產生圖形 [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize]的張量。

PastValueTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

使用圖形 [batchSize, headCount, pastSequenceLength, headSize]的上一個反覆專案值張量。 當這個張量不是 Null 時,它會與 ValueDesc 串連,這會產生圖形 [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize]的張量。

PastSequenceLengthsTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

待定

OutputTensor

類型: const DML_TENSOR_DESC*

圖形 [batchSize, sequenceLength, valueHiddenSize]的輸出。

OutputPresentKeyTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

交叉注意索引鍵的目前狀態,具有圖形 [batchSize, headCount, keyValueSequenceLength, headSize] 或目前狀態,可透過圖形 [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize]進行自我注意。 它包含索引鍵張量的內容,或串連 的PastKey + 金鑰 張量的內容,以傳遞至下一個反覆專案。

OutputPresentValueTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

交叉注意值的目前狀態,具有圖形 [batchSize, headCount, keyValueSequenceLength, headSize] 或目前狀態,以使用圖形 [batchSize, headCount, pastSequenceLength + keyValueSequenceLength, headSize]進行自我注意。 它包含值張量的內容,或串連 的PastValue + 張量的內容,以傳遞至下一個反覆專案。

Scale

類型: FLOAT

縮放以將 QxK GEMM 作業的結果乘以,但在 Softmax 作業之前。 這個值通常是 1/sqrt(headSize)

MaskFilterValue

類型: FLOAT

值,這個值會新增至 QxK GEMM 作業結果中定義為填補元素的遮罩位置。 此值應該是非常大的負數(通常是 -10000.0f)。

QueryHeadCount

類型: UINT

待定

KeyValueHeadCount

類型: UINT

待定

MaskType

類型: DML_MULTIHEAD_ATTENTION_MASK_TYPE

描述 MaskTensor的行為。

DML_MULTIHEAD_ATTENTION_MASK_TYPE_BOOLEAN。 當遮罩包含 0 的值時, 就會新增 MaskFilterValue ;但是,當它包含1的值時,不會新增任何專案。

DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_LENGTH。 圖形 [1, batchSize]的遮罩包含每個批次未加上板區域的順序長度,而序列長度之後的所有元素都會將其值設定為 MaskFilterValue

DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_END_START。 圖形 [2, batchSize]的遮罩包含已取消控制區域的結尾(獨佔)和開始(內含)索引,而區域外部的所有元素都會將其值設定為 MaskFilterValue

DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_QUERY_SEQUENCE_LENGTH_START_END。 圖形 [batchSize * 3 + 2]的遮罩具有下列值: [keyLength[0], ..., keyLength[batchSize - 1], queryStart[0], ..., queryStart[batchSize - 1], queryEnd[batchSize - 1], keyStart[0], ..., keyStart[batchSize - 1], keyEnd[batchSize - 1]]

可用性

此運算子是在 DML_FEATURE_LEVEL_6_3 中引進的。

Tensor 條件約束

BiasTensor、KeyTensorOutputPresentKeyTensorOutputPresentValueTensorOutputTensorPastKeyTensorPastSequenceLengthsTensorPastValueTensorRelativePositionBiasTensorStackedKeyValueTensorStackedQueryKeyTensor、StackedQueryKeyValueTensorValueTensor 必須具有相同的 DataType

Tensor 支援

張量 仁慈 (if context refers to kindness) 支援的維度計數 支援的數據類型
QueryTensor 的 選擇性輸入 3 到 5 FLOAT32,FLOAT16
KeyTensor 的 選擇性輸入 3 到 5 FLOAT32,FLOAT16
ValueTensor 選擇性輸入 3 到 5 FLOAT32,FLOAT16
StackedQueryKeyTensor 選擇性輸入 5 FLOAT32,FLOAT16
StackedKeyValueTensor 選擇性輸入 5 FLOAT32,FLOAT16
StackedQueryKeyValueTensor 選擇性輸入 5 FLOAT32,FLOAT16
BiasTensor 選擇性輸入 1 到 5 FLOAT32,FLOAT16
MaskTensor 的 選擇性輸入 1 到 5 INT32
RelativePositionBiasTensor 選擇性輸入 4 到 5 FLOAT32,FLOAT16
PastKeyTensor 選擇性輸入 4 到 5 FLOAT32,FLOAT16
PastValueTensor 選擇性輸入 4 到 5 FLOAT32,FLOAT16
PastSequenceLengthsTensor 選擇性輸入 1 到 5 FLOAT32,FLOAT16
OutputTensor 輸出 3 到 5 FLOAT32,FLOAT16
輸出PresentKeyTensor 選擇性輸出 4 到 5 FLOAT32,FLOAT16
輸出PresentValueTensor 選擇性輸出 4 到 5 FLOAT32,FLOAT16