QLinearMatMul

QLinearMatMul - 21

版本

  • 名称: QLinearMatMul (GitHub)

  • : main

  • 自版本: 21

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的算子自版本 21 起可用。

摘要

矩阵乘积,其行为类似于 numpy.matmul。它接受两个量化的输入张量、它们的尺度和零点、输出的尺度和零点,然后计算量化后的输出。量化公式为 y = saturate((x / y_scale) + y_zero_point)。对于 (x / y_scale),它采用四舍五入(向偶数舍入)。详情请参阅 https://en.wikipedia.org/wiki/Rounding。尺度和零点必须具有相同的形状。它们必须是标量(逐张量)或 N 维张量('a' 逐行,'b' 逐列)。标量指逐张量量化,而 N 维指逐行或逐列量化。如果输入是形状为 [M, K] 的二维张量,则零点和尺度张量对于逐行量化可以是包含 M 个元素的向量 [v_1, v_2, …, v_M],对于逐列量化可以是形状为 [v_1, v_2, …, v_K] 的 K 个元素的向量。如果输入是形状为 [D1, D2, M, K] 的 N 维张量,则零点和尺度张量对于逐行量化可以具有形状 [D1, D2, M, 1],对于逐列量化可以具有形状 [D1, D2, 1, K]。乘法绝不能溢出,而累加仅在 32 位时可能溢出。

输入

  • a (异构) - T1

    N 维量化矩阵 a

  • a_scale (异构) - TS

    量化输入 a 的尺度

  • a_zero_point (异构) - T1

    量化输入 a 的零点

  • b (异构) - T2

    N 维量化矩阵 b

  • b_scale (异构) - TS

    量化输入 b 的尺度

  • b_zero_point (异构) - T2

    量化输入 b 的零点

  • y_scale (异构) - TS

    量化输出 y 的尺度

  • y_zero_point (异构) - T3

    量化输出 y 的零点

输出

  • y (异构) - T3

    由 a * b 得到的量化矩阵乘法结果

类型约束

  • TS 在 ( tensor(bfloat16), tensor(float), tensor(float16) )

    约束尺度类型。

  • T1 在 ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int8), tensor(uint8) )

    输入 a 及其零点的类型。

  • T2 在 ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int8), tensor(uint8) )

    输入 b 及其零点的类型。

  • T3 在 ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int8), tensor(uint8) )

    输出及其零点的类型。

QLinearMatMul - 10

版本

  • 名称: QLinearMatMul (GitHub)

  • : main

  • 自版本: 10

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的算子自版本 10 起可用。

摘要

矩阵乘积,其行为类似于 numpy.matmul。它接受两个量化的输入张量、它们的尺度和零点、输出的尺度和零点,然后计算量化后的输出。量化公式为 y = saturate((x / y_scale) + y_zero_point)。对于 (x / y_scale),它采用四舍五入(向偶数舍入)。详情请参阅 https://en.wikipedia.org/wiki/Rounding。尺度和零点必须具有相同的形状。它们必须是标量(逐张量)或 N 维张量('a' 逐行,'b' 逐列)。标量指逐张量量化,而 N 维指逐行或逐列量化。如果输入是形状为 [M, K] 的二维张量,则零点和尺度张量对于逐行量化可以是包含 M 个元素的向量 [v_1, v_2, …, v_M],对于逐列量化可以是形状为 [v_1, v_2, …, v_K] 的 K 个元素的向量。如果输入是形状为 [D1, D2, M, K] 的 N 维张量,则零点和尺度张量对于逐行量化可以具有形状 [D1, D2, M, 1],对于逐列量化可以具有形状 [D1, D2, 1, K]。乘法绝不能溢出,而累加仅在 32 位时可能溢出。

输入

  • a (异构) - T1

    N 维量化矩阵 a

  • a_scale (异构) - tensor(float)

    量化输入 a 的尺度

  • a_zero_point (异构) - T1

    量化输入 a 的零点

  • b (异构) - T2

    N 维量化矩阵 b

  • b_scale (异构) - tensor(float)

    量化输入 b 的尺度

  • b_zero_point (异构) - T2

    量化输入 b 的零点

  • y_scale (异构) - tensor(float)

    量化输出 y 的尺度

  • y_zero_point (异构) - T3

    量化输出 y 的零点

输出

  • y (异构) - T3

    由 a * b 得到的量化矩阵乘法结果

类型约束

  • T1 在 ( tensor(int8), tensor(uint8) )

    约束输入 a 及其零点的数据类型为 8 位整数张量。

  • T2 在 ( tensor(int8), tensor(uint8) )

    约束输入 b 及其零点的数据类型为 8 位整数张量。

  • T3 在 ( tensor(int8), tensor(uint8) )

    约束输出 y 及其零点的数据类型为 8 位整数张量。