共用方式為


DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC 結構 (directml.h)

在量化數據上執行矩陣乘法函數。 此運算符在數學上相當於將輸入量化,然後執行矩陣乘法,然後量化輸出。

此運算子需要矩陣將輸入張量乘以 4D,其格式為 { BatchCount, ChannelCount, Height, Width }。 矩陣乘法運算符會執行獨立矩陣乘法的 BatchCount * ChannelCount 數目。

例如,如果 ATensor的大小為{ BatchCount, ChannelCount, M, K },而 BTensor的大小為{ BatchCount, ChannelCount, K, N },而 OutputTensor的大小{ BatchCount, ChannelCount, M, N }為 ,則矩陣乘法運算符會執行維度 {M,K} x {K,N} = {M,N} 的 BatchCount * ChannelCount 獨立矩陣乘法。

Dequantize 函式

f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale

Quantize 函式

f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)

語法

struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC {
  const DML_TENSOR_DESC *ATensor;
  const DML_TENSOR_DESC *AScaleTensor;
  const DML_TENSOR_DESC *AZeroPointTensor;
  const DML_TENSOR_DESC *BTensor;
  const DML_TENSOR_DESC *BScaleTensor;
  const DML_TENSOR_DESC *BZeroPointTensor;
  const DML_TENSOR_DESC *OutputScaleTensor;
  const DML_TENSOR_DESC *OutputZeroPointTensor;
  const DML_TENSOR_DESC *OutputTensor;
};

成員

ATensor

類型: const DML_TENSOR_DESC*

包含 A 數據的張量。 這個張量維度應該是 { BatchCount, ChannelCount, M, K }

AScaleTensor

類型: const DML_TENSOR_DESC*

包含 ATensor 縮放數據的張量。 的預期維度 AScaleTensor{ 1, 1, 1, 1 } 如果需要每個張量仲裁,或是 { 1, 1, M, 1 } 需要每個數據列的量化。 這些小數位數值用於將 A 值量化。

AZeroPointTensor

類型:_Maybenull_ const DML_TENSOR_DESC*

選擇性張量,包含 ATensor 零點數據。 AZeroPointTensor 的預期維度是 { 1, 1, 1, 1 } 如果需要每個張量仲裁,或 { 1, 1, M, 1 } 如果需要每個數據列的量化。 這些零點值用於將 ATensor 值取消量化。

BTensor

類型: const DML_TENSOR_DESC*

包含 B 數據的張量。 這個張量維度應該是 { BatchCount, ChannelCount, K, N }

BScaleTensor

類型: const DML_TENSOR_DESC*

包含 BTensor 縮放數據的張量。 的預期維度 BScaleTensor{ 1, 1, 1, 1 } 如果需要每個張量仲裁,或 { 1, 1, 1, N } 如果需要每個數據行的量化。 這些小數字數值用於將 BTensor 值取消量化。

BZeroPointTensor

類型:_Maybenull_ const DML_TENSOR_DESC*

選擇性的張量,包含 BTensor 零點數據。 的預期維度 BZeroPointTensor{ 1, 1, 1, 1 } 如果需要每個張量仲裁,或 { 1, 1, 1, N } 如果需要每個數據行的量化。 這些零點值用於取消量化 BTensor 值。

OutputScaleTensor

類型: const DML_TENSOR_DESC*

包含 OutputTensor 縮放數據的張量。 的預期維度 OutputScaleTensor{ 1, 1, 1, 1 } 如果需要每張量仲裁,或是 { 1, 1, M, 1 } 需要每個數據列的量化。 此小數字數值用於將 OutputTensor 值量化。

OutputZeroPointTensor

類型:_Maybenull_ const DML_TENSOR_DESC*

選擇性張量 ,其中包含 OutputTensor 零點數據。 的預期維度 OutputZeroPointTensor{ 1, 1, 1, 1 } 如果需要每張量仲裁,或是 { 1, 1, M, 1 } 需要每個數據列的量化。 這個零點值用於將 OutputTensor 值量化。

OutputTensor

類型: const DML_TENSOR_DESC*

要寫入結果的張量。 此張量維度為 { BatchCount, ChannelCount, M, N }

可用性

這個運算子是在 中 DML_FEATURE_LEVEL_2_1引進。

Tensor 條件約束

  • AScaleTensorAZeroPointTensorBScaleTensorBZeroPointTensorOutputScaleTensorOutputZeroPointTensor 必須具有相同的 DimensionCount
  • ATensorBTensorOutputTensor 必須具有相同的 DimensionCount
  • BTensorBZeroPointTensor 必須具有相同 的 DataType
  • OutputTensorOutputZeroPointTensor 必須具有相同 的 DataType
  • AScaleTensorAZeroPointTensorBScaleTensorBZeroPointTensorOutputScaleTensorOutputZeroPointTensor 必須具有相同的 DimensionCount
  • ATensorAZeroPointTensor 必須具有相同 的 DataType

Tensor 支援

DML_FEATURE_LEVEL_4_0和更新版本

種類 支援的維度計數 支援的資料類型
ATensor 輸入 2 到 4 INT8、UINT8
AScaleTensor 輸入 1 到 4 FLOAT32
AZeroPointTensor 選擇性輸入 1 到 4 INT8、UINT8
BTensor 輸入 2 到 4 INT8、UINT8
BScaleTensor 輸入 1 到 4 FLOAT32
BZeroPointTensor 選擇性輸入 1 到 4 INT8、UINT8
OutputScaleTensor 輸入 1 到 4 FLOAT32
OutputZeroPointTensor 選擇性輸入 1 到 4 INT8、UINT8
OutputTensor 輸出 2 到 4 INT8、UINT8

DML_FEATURE_LEVEL_2_1和更新版本

種類 支援的維度計數 支援的資料類型
ATensor 輸入 4 INT8、UINT8
AScaleTensor 輸入 4 FLOAT32
AZeroPointTensor 選擇性輸入 4 INT8、UINT8
BTensor 輸入 4 INT8、UINT8
BScaleTensor 輸入 4 FLOAT32
BZeroPointTensor 選擇性輸入 4 INT8、UINT8
OutputScaleTensor 輸入 4 FLOAT32
OutputZeroPointTensor 選擇性輸入 4 INT8、UINT8
OutputTensor 輸出 4 INT8、UINT8

規格需求

   
最低支援的用戶端 Windows 10 組建 20348
最低支援的伺服器 Windows 10 組建 20348
標頭 directml.h