QuantizeLinear

QuantizeLinear - 24

版本

  • 名称: QuantizeLinear (GitHub)

  • : main

  • 起始版本24

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的操作符已可用于版本 24 及以上

摘要

线性量化算子消耗一个高精度张量、一个比例因子和一个零点来计算低精度/量化张量。比例因子和零点的形状必须相同,它们决定了量化的粒度。量化公式为 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 和 4 位类型,但为保持一致性,量化公式保持不变,且属性 y_zero_point 的类型仍然决定量化类型。xy_scale 可以具有不同的类型。y_scale 的类型决定了 xy_scale 之间除法运算的精度,除非指定了 precision 属性。

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

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

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

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

属性

  • 轴 - 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 的数据类型 (T3) 推断。如果 output_dtypey_zero_point 都未提供,则输出数据类型为 uint8。如果同时指定了 output_dtypey_zero_point,则 output_dtype 必须是 T3

  • precision - INT (默认为 '0')

    (可选) xy_scale 之间除法运算的精度。如果未提供,则与 y_scale 的类型相同。

  • saturate - 整型 (默认为 '1')

    该参数定义了当输入值超出目标类型的范围时,转换的行为方式。它仅适用于 float 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下它是 true。所有情况都在插入到算子描述中的两个表中完全描述。

输入

2 到 3 个输入之间。

  • x (异构) - T1

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

  • y_scale (异构) - T2

    用于进行量化以获得 y 的比例因子。对于按张量/层量化,比例因子是标量;对于按轴量化,它是 1D 张量;对于分块量化,它的形状与输入相同,除了一个用于分块的维度。

  • y_zero_point (可选, 异构) - T3

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

输出

  • y (异构) - T3

    N 维量化输出张量。其形状与输入 x 相同。

类型约束

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

    输入 ‘x’ 的类型。

  • T2 in ( tensor(bfloat16), tensor(float), tensor(float16), tensor(float8e8m0), tensor(int32) )

    输入 ‘y_scale’ 的类型。

  • T3 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 - 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 和 4 位类型,但为保持一致性,量化公式保持不变,且属性 y_zero_point 的类型仍然决定量化类型。xy_scale 可以具有不同的类型。y_scale 的类型决定了 xy_scale 之间除法运算的精度,除非指定了 precision 属性。

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

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

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

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

属性

  • 轴 - 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 的数据类型 (T3) 推断。如果 output_dtypey_zero_point 都未提供,则输出数据类型为 uint8。如果同时指定了 output_dtypey_zero_point,则 output_dtype 必须是 T3

  • precision - INT (默认为 '0')

    (可选) xy_scale 之间除法运算的精度。如果未提供,则与 y_scale 的类型相同。

  • saturate - 整型 (默认为 '1')

    该参数定义了当输入值超出目标类型的范围时,转换的行为方式。它仅适用于 float 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下它是 true。所有情况都在插入到算子描述中的两个表中完全描述。

输入

2 到 3 个输入之间。

  • x (异构) - T1

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

  • y_scale (异构) - T2

    用于进行量化以获得 y 的比例因子。对于按张量/层量化,比例因子是标量;对于按轴量化,它是 1D 张量;对于分块量化,它的形状与输入相同,除了一个用于分块的维度。

  • y_zero_point (可选, 异构) - T3

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

输出

  • y (异构) - T3

    N 维量化输出张量。其形状与输入 x 相同。

类型约束

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

    输入 ‘x’ 的类型。

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

    输入 ‘y_scale’ 的类型。

  • T3 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 是一个标量。

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

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

属性

  • 轴 - 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_dtypey_zero_point 都未提供,则输出数据类型为 uint8。如果同时指定了 output_dtypey_zero_point,则 output_dtype 必须是 T2

  • saturate - 整型 (默认为 '1')

    该参数定义了当输入值超出目标类型的范围时,转换的行为方式。它仅适用于 float 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下它是 true。所有情况都在插入到算子描述中的两个表中完全描述。

输入

2 到 3 个输入之间。

  • x (异构) - T1

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

  • y_scale (异构) - T1

    用于进行量化以获得 y 的比例因子。对于按张量/层量化,比例因子是标量;对于按轴量化,它是 1D 张量;对于分块量化,它的形状与输入相同,除了一个用于分块的维度。

  • y_zero_point (可选, 异构) - T2

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

输出

  • 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 起可用。

摘要

线性量化算子。它消耗一个高精度张量、一个比例因子和一个零点来计算低精度/量化张量。比例因子和零点的形状必须相同,并且对于按张量/层量化可以是标量,对于按轴量化可以是 1D 张量。量化公式为 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’ 的类型仍然决定量化类型。

属性

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

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

  • saturate - 整型 (默认为 '1')

    该参数定义了当输入值超出目标类型的范围时,转换的行为方式。它仅适用于 float 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下它是 true。所有情况都在插入到算子描述中的两个表中完全描述。

输入

2 到 3 个输入之间。

  • x (异构) - T1

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

  • y_scale (异构) - T1

    用于进行量化以获得 ‘y’ 的比例因子。它可以是标量,表示按张量/层量化,或者是一维张量,表示按轴量化。

  • y_zero_point (可选, 异构) - T2

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

输出

  • 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

  • 起始版本: 13

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

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

摘要

线性量化算子。它消耗一个高精度张量、一个比例因子和一个零点来计算低精度/量化张量。比例因子和零点的形状必须相同,并且对于按张量/层量化可以是标量,对于按轴量化可以是 1D 张量。量化公式为 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’ 的类型必须相同。

属性

  • 轴 - 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 匹配。如果未指定,则默认为 uint8 零点为 0。

输出

  • y (异构) - T2

    N 维量化输出张量。其形状与输入 ‘x’ 相同。

类型约束

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

    将 ‘x’ 约束为 float 或 int32 张量。

  • T2 在 ( 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’ 约束为 float 或 int32 张量。

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

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