QuantizeLinear

QuantizeLinear - 23

版本

  • 名称: QuantizeLinear (GitHub)

  • : main

  • 自版本: 23

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本 23起可用。

摘要

线性量化运算符使用高精度张量、比例因子和零点来计算低精度/量化张量。比例因子和零点必须具有相同的形状,以确定量化粒度。量化公式为 y = saturate((x / y_scale) + y_zero_point)

饱和度根据以下规则进行:

  • uint16: [0, 65535]

  • int16: [-32768, 32767]

  • uint8: [0, 255]

  • int8: [-128, 127]

  • uint4: [0, 15]

  • int4: [-8, 7]

对于 (x / y_scale),它四舍五入到最近的偶数。有关详细信息,请参阅 https://en.wikipedia.org/wiki/Rounding

y_zero_pointy 必须具有相同的类型。y_zero_point 通常不用于量化到 float8 类型,但为了保持一致性,量化公式保持不变,并且属性 y_zero_point 的类型仍然决定量化类型。

有三种支持的量化粒度,由 y_scale 的形状决定。在所有情况下,y_zero_point 必须与 y_scale 具有相同的形状。

  • 每张量(每层)量化:y_scale 是一个标量。

  • 每轴量化:比例因子必须是一个一维张量,其长度为量化轴的长度。对于输入形状 (D0, ..., Di, ..., Dn)axis=iy_scale 是长度为 Di 的一维张量。

  • 块量化:比例因子的形状与输入的形状相同,除了一个维度,在这个维度上执行分块。给定 x 形状 (D0, ..., Di, ..., Dn)axis=i 和块大小 By_scale 形状为 (D0, ..., ceil(Di/B), ..., Dn)

属性

  • axis - INT(默认值为 '1'

    (可选)输入张量的去量化维度的轴。仅用于每轴和块量化。负值表示从后向前计数维度。接受的范围是 [-r, r-1],其中 r = rank(input)。当输入的秩为 1 时,将应用每张量量化,在这种情况下,轴将变得不必要。

  • block_size - INT(默认值为 '0'

    (可选)量化块的大小(每个比例因子复制的次数)。仅用于块量化。块大小为正整数。给定 x 形状 (D0, ..., Di, ..., Dn)y_scale 形状 (S0, ... Si, ...Sn)axis=i,接受的范围是 [ceil(Di/Si), ceil(Di/(Si-1))-1]

  • output_dtype - INT(默认值为 '0'

    (可选) 输出数据类型。如果未提供,则从y_zero_point数据类型(T2)推断输出数据类型。如果既未提供output_dtype也未提供y_zero_point,则输出数据类型为uint8。如果同时指定了output_dtypey_zero_point,则output_dtype必须为T2

  • saturate - INT(默认值为'1'

    此参数定义当输入值超出目标类型的范围时转换的行为方式。它仅适用于浮点数8量化(float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。默认情况下为真。所有情况都在运算符描述中插入的两张表中进行了完整描述。

输入

2到3个输入。

  • x(异构) - T1

    要量化的N维全精度输入张量。

  • y_scale(异构) - T1

    用于进行量化以获取y的比例因子。对于每张量/层量化,比例因子为标量;对于每轴量化,它是一维张量;对于块量化,它与输入具有相同的形状,除了执行块操作的一个维度。

  • y_zero_point(可选,异构) - T2

    用于进行量化以获取y的零点。形状必须与y_scale匹配。如果未指定,则默认为零点为0的uint8。

输出

  • y(异构) - T2

    N维量化输出张量。它与输入x具有相同的形状。

类型约束

  • T1 in ( tensor(bfloat16), tensor(float), tensor(float16), tensor(int32) )

    输入“x”的类型。

  • T2 in ( tensor(float4e2m1), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int4), tensor(int8), tensor(uint16), tensor(uint4), tensor(uint8) )

    输入y_zero_point和输出y的类型。

QuantizeLinear - 21

版本

  • 名称: QuantizeLinear (GitHub)

  • : main

  • since_version: 21

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本21起可用。

摘要

线性量化运算符使用高精度张量、比例因子和零点来计算低精度/量化张量。比例因子和零点必须具有相同的形状,以确定量化粒度。量化公式为y = saturate((x / y_scale) + y_zero_point)。饱和度根据以下规则进行

  • uint16: [0, 65535]

  • int16: [-32768, 32767]

  • uint8: [0, 255]

  • int8: [-128, 127]

  • uint4: [0, 15]

  • int4:[-8, 7] 对于(x / y_scale),它四舍五入到最接近的偶数。有关详细信息,请参阅https://en.wikipedia.org/wiki/Roundingy_zero_pointy必须具有相同的类型。y_zero_point通常不用于量化到float8类型,但为了保持一致性,量化公式保持不变,并且属性y_zero_point的类型仍然决定量化类型。有三种受支持的量化粒度,由y_scale的形状决定。在所有情况下,y_zero_point必须与y_scale具有相同的形状。

  • 每张量(每层)量化:y_scale 是一个标量。

  • 每轴量化:比例因子必须是一个一维张量,其长度为量化轴的长度。对于输入形状 (D0, ..., Di, ..., Dn)axis=iy_scale 是长度为 Di 的一维张量。

  • 块量化:比例因子的形状与输入的形状相同,除了一个维度,在这个维度上执行分块。给定 x 形状 (D0, ..., Di, ..., Dn)axis=i 和块大小 By_scale 形状为 (D0, ..., ceil(Di/B), ..., Dn)

属性

  • axis - INT(默认值为 '1'

    (可选)输入张量的去量化维度的轴。仅用于每轴和块量化。负值表示从后向前计数维度。接受的范围是 [-r, r-1],其中 r = rank(input)。当输入的秩为 1 时,将应用每张量量化,在这种情况下,轴将变得不必要。

  • block_size - INT(默认值为 '0'

    (可选)量化块的大小(每个比例因子复制的次数)。仅用于块量化。块大小为正整数。给定 x 形状 (D0, ..., Di, ..., Dn)y_scale 形状 (S0, ... Si, ...Sn)axis=i,接受的范围是 [ceil(Di/Si), ceil(Di/(Si-1))-1]

  • output_dtype - INT(默认值为 '0'

    (可选) 输出数据类型。如果未提供,则从y_zero_point数据类型(T2)推断输出数据类型。如果既未提供output_dtype也未提供y_zero_point,则输出数据类型为uint8。如果同时指定了output_dtypey_zero_point,则output_dtype必须为T2

  • saturate - INT(默认值为'1'

    此参数定义当输入值超出目标类型的范围时转换的行为方式。它仅适用于浮点数8量化(float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。默认情况下为真。所有情况都在运算符描述中插入的两张表中进行了完整描述。

输入

2到3个输入。

  • x(异构) - T1

    要量化的N维全精度输入张量。

  • y_scale(异构) - T1

    用于进行量化以获取y的比例因子。对于每张量/层量化,比例因子为标量;对于每轴量化,它是一维张量;对于块量化,它与输入具有相同的形状,除了执行块操作的一个维度。

  • y_zero_point(可选,异构) - T2

    用于进行量化以获取y的零点。形状必须与y_scale匹配。如果未指定,则默认为零点为0的uint8。

输出

  • y(异构) - T2

    N维量化输出张量。它与输入x具有相同的形状。

类型约束

  • T1 in ( tensor(bfloat16), tensor(float), tensor(float16), tensor(int32) )

    输入“x”的类型。

  • T2 in ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int4), tensor(int8), tensor(uint16), tensor(uint4), tensor(uint8) )

    输入y_zero_point和输出y的类型。

QuantizeLinear - 19

版本

  • 名称: QuantizeLinear (GitHub)

  • : main

  • since_version: 19

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本19起可用。

摘要

线性量化运算符。它使用高精度张量、比例因子和零点来计算低精度/量化张量。比例因子和零点必须具有相同的形状,并且可以是标量(用于每张量/层量化)或一维张量(用于每轴量化)。量化公式为y = saturate ((x / y_scale) + y_zero_point)。对于饱和度,如果为uint8,则饱和到[0, 255],如果为int8,则饱和到[-128, 127]。对于(x / y_scale),它四舍五入到最接近的偶数。有关详细信息,请参阅https://en.wikipedia.org/wiki/Rounding。“y_zero_point”和“y”必须具有相同的类型。“y_zero_point”通常不用于量化到float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz,但为了保持一致性,量化公式保持不变,并且属性“y_zero_point”的类型仍然决定量化类型。

属性

  • axis - INT(默认值为 '1'

    (可选) 输入张量的量化维度的轴。对于每张量量化,忽略此参数。负值表示从后向前计数维度。接受的范围是[-r, r-1],其中r = rank(input)。

  • saturate - INT(默认值为'1'

    此参数定义当输入值超出目标类型的范围时转换的行为方式。它仅适用于浮点数8量化(float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。默认情况下为真。所有情况都在运算符描述中插入的两张表中进行了完整描述。

输入

2到3个输入。

  • x(异构) - T1

    要量化的N维全精度输入张量。

  • y_scale(异构) - T1

    用于进行量化以获取“y”的比例因子。它可以是标量(表示每张量/层量化)或一维张量(表示每轴量化)。

  • y_zero_point(可选,异构) - T2

    用于进行量化以获取“y”的零点。形状必须与y_scale匹配。如果未指定,则默认为零点为0的uint8。

输出

  • y(异构) - T2

    N维量化输出张量。它与输入“x”具有相同的形状。

类型约束

  • T1 in ( tensor(bfloat16), tensor(float), tensor(float16), tensor(int32) )

    将“x”约束为float、float16、bfloat16或int32张量。

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

    将“y_zero_point”和“y”约束为8位整数/浮点数张量。

QuantizeLinear - 13

版本

  • 名称: QuantizeLinear (GitHub)

  • : main

  • since_version: 13

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本13起可用。

摘要

线性量化运算符。它使用高精度张量、比例因子和零点来计算低精度/量化张量。比例因子和零点必须具有相同的形状,并且可以是标量(用于每张量/层量化)或一维张量(用于每轴量化)。量化公式为y = saturate ((x / y_scale) + y_zero_point)。对于饱和度,如果为uint8,则饱和到[0, 255],如果为int8,则饱和到[-128, 127]。对于(x / y_scale),它四舍五入到最接近的偶数。有关详细信息,请参阅https://en.wikipedia.org/wiki/Rounding。“y_zero_point”和“y”必须具有相同的类型。

属性

  • axis - INT(默认值为 '1'

    (可选) 输入张量的量化维度的轴。对于每张量量化,忽略此参数。负值表示从后向前计数维度。接受的范围是[-r, r-1],其中r = rank(input)。

输入

2到3个输入。

  • x(异构) - T1

    要量化的N维全精度输入张量。

  • y_scale(异构) - tensor(float)

    用于进行量化以获取“y”的比例因子。它可以是标量(表示每张量/层量化)或一维张量(表示每轴量化)。

  • y_zero_point(可选,异构) - T2

    用于进行量化以获取“y”的零点。形状必须与y_scale匹配。如果未指定,则默认为零点为0的uint8。

输出

  • y(异构) - T2

    N维量化输出张量。它与输入“x”具有相同的形状。

类型约束

  • T1 in ( tensor(float), tensor(int32) )

    将‘x’约束为浮点数或int32张量。

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

    将‘y_zero_point’和‘y’约束为8位整数张量。

QuantizeLinear - 10

版本

  • 名称: QuantizeLinear (GitHub)

  • : main

  • since_version: 10

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

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

摘要

线性每张量/层量化算子。它接收一个高精度张量、一个比例因子和一个零点来计算低精度/量化张量。量化公式为 y = saturate ((x / y_scale) + y_zero_point)。对于饱和,如果它是uint8,则饱和到[0, 255],如果它是int8,则饱和到[-128, 127]。对于(x / y_scale),它四舍五入到最接近的偶数。有关详细信息,请参阅https://en.wikipedia.org/wiki/Rounding。‘y_zero_point’和‘y’必须具有相同的类型。

输入

2到3个输入。

  • x(异构) - T1

    要量化的N维全精度输入张量。

  • y_scale(异构) - tensor(float)

    用于进行量化以获得‘y’的比例因子。它是一个标量,表示每张量/层量化。

  • y_zero_point(可选,异构) - T2

    用于进行量化以获得‘y’的零点。它是一个标量,表示每张量/层量化。如果未指定,则默认值为uint8类型的0。

输出

  • y(异构) - T2

    N维量化输出张量。它与输入“x”具有相同的形状。

类型约束

  • T1 in ( tensor(float), tensor(int32) )

    将‘x’约束为浮点数或int32张量。

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

    将‘y_zero_point’和‘y’约束为8位整数张量。