QLinearMatMul

QLinearMatMul - 21

版本

  • 名称: QLinearMatMul (GitHub)

  • 域名: main

  • since_version: 21

  • 函数: False

  • support_level: 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] 的2D张量,则零点和比例张量可能是每行量化的M元素向量 [v_1, v_2, …, v_M] 和每列量化的K元素向量 [v_1, v_2, …, v_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

  • since_version: 10

  • 函数: False

  • support_level: 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] 的2D张量,则零点和比例张量可能是每行量化的M元素向量 [v_1, v_2, …, v_M] 和每列量化的K元素向量 [v_1, v_2, …, v_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 位整数张量。