Compartilhar via


DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC estrutura (directml.h)

Executa uma função de multiplicação de matriz em dados quantizados. Esse operador é matematicamente equivalente a desquantizar as entradas, executar a multiplicação de matriz e, em seguida, quantificar a saída.

Esse operador requer que os tensores de entrada de multiplicação de matriz sejam 4D formatados como { BatchCount, ChannelCount, Height, Width }. O operador de multiplicação de matriz executará BatchCount * Número ChannelCount de multiplicações de matriz independentes.

Por exemplo, se do ATensor tiver tamanhos de { BatchCount, ChannelCount, M, K }e do BTensor tiver tamanhos de { BatchCount, ChannelCount, K, N }e OutputTensor tem tamanhos de { BatchCount, ChannelCount, M, N }, em seguida, o operador de multiplicação de matriz executará multiplicações de matriz independente BatchCount * ChannelCount de dimensões {M,K} x {K,N} = {M,N}.

Desquantizar função

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

Função Quantize

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

Sintaxe

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

Membros

ATensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados A. As dimensões desse tensor devem ser { BatchCount, ChannelCount, M, K }.

AScaleTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados de escala do ATensor. As dimensões esperadas do AScaleTensor são { 1, 1, 1, 1 } se por quantização tensor for necessária ou { 1, 1, M, 1 } se a quantização por linha for necessária. Esses valores de escala são usados para desquantizar os valores A.

Nota

Um valor de escala de 0 resulta em um comportamento indefinido.

AZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Um tensor opcional que contém o ATensor dados de ponto zero. As dimensões esperadas do AZeroPointTensor são { 1, 1, 1, 1 } se a quantização por tensor for necessária ou { 1, 1, M, 1 } se a quantização por linha for necessária. Esses valores de ponto zero são usados para desquantizar os valores do ATensor.

BTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados B. As dimensões desse tensor devem ser { BatchCount, ChannelCount, K, N }.

BScaleTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados de escala BTensor. As dimensões esperadas do BScaleTensor são { 1, 1, 1, 1 } se por quantização tensor for necessária ou { 1, 1, 1, N } se a quantização por coluna for necessária. Esses valores de escala são usados para desquantizar os valores BTensor.

Nota

Um valor de escala de 0 resulta em um comportamento indefinido.

BZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Um tensor opcional que contém o BTensor dados de ponto zero. As dimensões esperadas do BZeroPointTensor são { 1, 1, 1, 1 } se por quantização tensor for necessária ou { 1, 1, 1, N } se a quantização por coluna for necessária. Esses valores de ponto zero são usados para desquantizar os valores de BTensor.

OutputScaleTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados de escala de OutputTensor. As dimensões esperadas do OutputScaleTensor serão { 1, 1, 1, 1 } se a quantização por tensor for necessária ou { 1, 1, M, 1 } se a quantização por linha for necessária. Esse valor de escala é usado para desquantizar os valores OutputTensor.

Nota

Um valor de escala de 0 resulta em um comportamento indefinido.

OutputZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Um tensor opcional que contém o OutputTensor dados de ponto zero. As dimensões esperadas do OutputZeroPointTensor serão { 1, 1, 1, 1 } se a quantização por tensor for necessária ou { 1, 1, M, 1 } se a quantização por linha for necessária. Esse valor de ponto zero é usado para desquantizar os valores OutputTensor.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Um tensor para o qual gravar os resultados. As dimensões desse tensor são { BatchCount, ChannelCount, M, N }.

Disponibilidade

Este operador foi introduzido no DML_FEATURE_LEVEL_2_1.

Restrições do Tensor

  • AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensore OutputZeroPointTensor devem ter o mesmo DimensionCount.
  • ATensor, BTensor e OutputTensor devem ter o mesmo DimensionCount.
  • BTensor e BZeroPointTensor devem ter o mesmo datatype.
  • OutputTensor e OutputZeroPointTensor deve ter o mesmo DataType.
  • AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensore OutputZeroPointTensor devem ter o mesmo DimensionCount.
  • ATensor e AZeroPointTensor devem ter o mesmo DataType.

Suporte ao Tensor

DML_FEATURE_LEVEL_4_0 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
ATensor Entrada 2 a 4 INT8, UINT8
AScaleTensor Entrada 1 a 4 FLOAT32
AZeroPointTensor Entrada opcional 1 a 4 INT8, UINT8
BTensor Entrada 2 a 4 INT8, UINT8
BScaleTensor Entrada 1 a 4 FLOAT32
BZeroPointTensor Entrada opcional 1 a 4 INT8, UINT8
OutputScaleTensor Entrada 1 a 4 FLOAT32
OutputZeroPointTensor Entrada opcional 1 a 4 INT8, UINT8
OutputTensor Saída 2 a 4 INT8, UINT8

DML_FEATURE_LEVEL_2_1 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
ATensor Entrada 4 INT8, UINT8
AScaleTensor Entrada 4 FLOAT32
AZeroPointTensor Entrada opcional 4 INT8, UINT8
BTensor Entrada 4 INT8, UINT8
BScaleTensor Entrada 4 FLOAT32
BZeroPointTensor Entrada opcional 4 INT8, UINT8
OutputScaleTensor Entrada 4 FLOAT32
OutputZeroPointTensor Entrada opcional 4 INT8, UINT8
OutputTensor Saída 4 INT8, UINT8

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 10 Build 20348
servidor com suporte mínimo Windows 10 Build 20348
cabeçalho directml.h