Поделиться через


структура DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC (directml.h)

Выполняет функцию умножения матрицы для квантизованных данных. Этот оператор математически эквивалентен деквализовать входные данные, а затем умножить матрицу, а затем квалифицировать выходные данные.

Для этого оператора требуется, чтобы матрица умножала тензоры ввода 4D, которые форматируются как { BatchCount, ChannelCount, Height, Width }. Оператор умножения матрицы выполнит batchCount * ChannelCount число независимых умножений матрицы.

Например, если ATensor имеет размеров , а BTensor имеет размеров и OutputTensor имеет размеров , то оператор умножения матрицы будет выполнять batchCount * ChannelCount независимые умножения размеров {M,K} x {K,N} = {M,N}.

Декванциализация функции

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

Тип: _Возможноnull_ 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

Тип: _Возможноnull_ 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

Тип: _Возможноnull_ 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