Как я могу матрично умножить два квантованных тензора PyTorch? - PullRequest
6 голосов
/ 20 февраля 2020

Я новичок в тензорном квантовании и попытался сделать что-то столь же простое, как

import torch
x = torch.rand(10, 3)
y = torch.rand(10, 3)

x@y.T

с PyTorch квантованными тензорами, работающими на процессоре. Таким образом, я попытался

scale, zero_point = 1e-4, 2
dtype = torch.qint32
qx = torch.quantize_per_tensor(x, scale, zero_point, dtype)
qy = torch.quantize_per_tensor(y, scale, zero_point, dtype)

qx@qy.T # I tried...

.. и получил ошибку

RuntimeError: Не удалось запустить 'aten :: mm' с аргументами из бэкэнда 'QuantizedCPUTensorId'. 'aten :: mm' доступен только для следующих бэкэндов: [CUDATensorId, SparseCPUTensorId, VariableTensorId, CPUTensorId, SparseCUDATensorId].

Умножение матриц просто не поддерживается или я что-то не так делаю?

1 Ответ

4 голосов
/ 24 февраля 2020

Непросто реализовать умножение матриц для квантованных матриц. Поэтому «обычное» умножение матриц (@) не поддерживает его (как следует из вашего сообщения об ошибке).

Вам следует посмотреть на квантованные операции, например, torch.nn.quantized.functional.linear:

torch.nn.quantized.functional.linear(qx[None,...], qy.T)
...