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 值。
注意
小数位数值为 0 会导致未定义的行为。
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 值。
注意
小数位数值为 0 会导致未定义的行为。
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 值的量化。
注意
小数位数值为 0 会导致未定义的行为。
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 约束
- AScaleTensor、AZeroPointTensor、BScaleTensor、BZeroPointTensor、OutputScaleTensor和 OutputZeroPointTensor 必须具有相同 的 dimensionCount。
- ATensor、BTensor,OutputTensor 必须具有相同 DimensionCount。
- BTensor 和 BZeroPointTensor 必须具有相同的 DataType。
- OutputTensor 和 OutputZeroPointTensor 必须具有相同的 DataType。
- AScaleTensor、AZeroPointTensor、BScaleTensor、BZeroPointTensor、OutputScaleTensor和 OutputZeroPointTensor 必须具有相同 的 dimensionCount。
- ATensor 和 AZeroPointTensor 必须具有相同的 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 |