如何将两个PyTorch量化张量矩阵相乘?

时间:2020-02-20 17:53:59

标签: pytorch matrix-multiplication quantization

我是张量量化的新手,并尝试做一些简单的事情

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

x@y.T

使用在CPU上运行的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 个答案:

答案 0 :(得分:4)

对量化矩阵实施矩阵乘法并非直截了当。因此,“常规”矩阵乘法(@)不支持它(正如您的错误消息所提示的那样)。

您应该查看量化操作,例如torch.nn.quantized.functional.linear

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