次の方法で共有


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

クオンタイズ関数

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導入されました。

テンソル制約

  • AScaleTensorAZeroPointTensorBScaleTensorBZeroPointTensorOutputScaleTensorおよび OutputZeroPointTensor は、同じ DimensionCount を持つ必要があります。
  • ATensorBTensorおよび OutputTensor には、同じ DimensionCount が必要です。
  • BTensorBZeroPointTensor には、同じ DataType が必要です。
  • OutputTensorOutputZeroPointTensor には、同じ DataType が必要です。
  • AScaleTensorAZeroPointTensorBScaleTensorBZeroPointTensorOutputScaleTensorおよび OutputZeroPointTensor は、同じ 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
Header directml.h