QuantizeLinear¶
QuantizeLinear - 23¶
版本¶
域:
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_point
和 y
必须具有相同的类型。y_zero_point
通常不用于 float8 和 4 位类型的量化,但为了保持一致性,量化公式保持不变,并且属性 y_zero_point
的类型仍然决定了量化类型。x
和 y_scale
可以具有不同的类型。y_scale
的类型决定了 x
和 y_scale
之间除法运算的精度,除非指定了 precision
属性。
支持三种量化粒度,由 y_scale
的形状决定。在所有情况下,y_zero_point
都必须与 y_scale
具有相同的形状。
逐张量(逐层)量化:
y_scale
是一个标量。逐轴量化:缩放因子必须是一个一维张量,其长度与量化轴的维度相同。对于输入形状
(D0, ..., Di, ..., Dn)
和axis=i
,y_scale
是一个长度为Di
的一维张量。分块量化:缩放因子的形状与输入形状相同,除了一个维度进行分块。给定
x
形状(D0, ..., Di, ..., Dn)
,y_scale
形状(S0, ... Si, ...Sn)
和axis=i
,可接受的范围是[ceil(Di/Si), ceil(Di/(Si-1))-1]
属性¶
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
数据类型 (T3
) 推断。如果output_dtype
和y_zero_point
都未提供,输出数据类型为 uint8。如果同时指定了output_dtype
和y_zero_point
,则output_dtype
必须是T3
。precision - INT (默认为
'0'
)(可选)
x
和y_scale
之间除法运算的精度。如果未提供,将与y_scale
的类型相同。saturate - INT (默认为
'1'
)该参数定义了当输入值超出目标类型范围时的转换行为。它仅适用于 float 8 量化(float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认值为 true。所有情况都已在算子描述中的两个表格中详细说明。
输入¶
2 到 3 个输入。
x (异构) - T1
待量化的 N 维全精度输入张量。
y_scale (异构) - T2
用于量化以获得
y
的缩放因子。对于逐张量/逐层量化,缩放因子是一个标量;对于逐轴量化,它是一个一维张量;对于分块量化,其形状与输入相同,除了其中一个维度进行分块。y_zero_point (可选, 异构) - T3
用于量化以获得
y
的零点。形状必须与y_scale
匹配。如果未指定,默认值为 uint8 类型且零点为 0。
输出¶
y (异构) - T3
N 维量化输出张量。其形状与输入
x
相同。
类型约束¶
T1 在 (
tensor(bfloat16)
,tensor(float)
,tensor(float16)
,tensor(int32)
)输入 ‘x’ 的类型。
T2 在 (
tensor(bfloat16)
,tensor(float)
,tensor(float16)
,tensor(int32)
)输入 ‘y_scale’ 的类型。
T3 在 (
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¶
版本¶
域:
main
起始版本:
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/Rounding。y_zero_point
和y
必须具有相同的类型。y_zero_point
通常不用于 float8 类型的量化,但为了保持一致性,量化公式保持不变,并且属性y_zero_point
的类型仍然决定了量化类型。支持三种量化粒度,由y_scale
的形状决定。在所有情况下,y_zero_point
都必须与y_scale
具有相同的形状。逐张量(逐层)量化:
y_scale
是一个标量。逐轴量化:缩放因子必须是一个一维张量,其长度与量化轴的维度相同。对于输入形状
(D0, ..., Di, ..., Dn)
和axis=i
,y_scale
是一个长度为Di
的一维张量。分块量化:缩放因子的形状与输入形状相同,除了一个维度进行分块。给定
x
形状(D0, ..., Di, ..., Dn)
,y_scale
形状(S0, ... Si, ...Sn)
和axis=i
,可接受的范围是[ceil(Di/Si), ceil(Di/(Si-1))-1]
属性¶
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_dtype
和y_zero_point
,则output_dtype
必须是T2
。saturate - INT (默认为
'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 在 (
tensor(bfloat16)
,tensor(float)
,tensor(float16)
,tensor(int32)
)输入 ‘x’ 的类型。
T2 在 (
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¶
版本¶
域:
main
起始版本:
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'
)该参数定义了当输入值超出目标类型范围时的转换行为。它仅适用于 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 在 (
tensor(bfloat16)
,tensor(float)
,tensor(float16)
,tensor(int32)
)约束 ‘x’ 为 float, float16, bfloat16 或 int32 张量。
T2 在 (
tensor(float8e4m3fn)
,tensor(float8e4m3fnuz)
,tensor(float8e5m2)
,tensor(float8e5m2fnuz)
,tensor(int8)
,tensor(uint8)
)约束 ‘y_zero_point’ 和 ‘y’ 为 8 位整数/浮点张量。
QuantizeLinear - 13¶
版本¶
域:
main
起始版本:
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 匹配。如果未指定,默认值为 uint8 类型且零点为 0。
输出¶
y (异构) - T2
N 维量化输出张量。其形状与输入 ‘x’ 相同。
类型约束¶
T1 在 (
tensor(float)
,tensor(int32)
)约束 ‘x’ 为 float 或 int32 张量。
T2 在 (
tensor(int8)
,tensor(uint8)
)约束 ‘y_zero_point’ 和 ‘y’ 为 8 位整数张量。
QuantizeLinear - 10¶
版本¶
域:
main
起始版本:
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 在 (
tensor(float)
,tensor(int32)
)约束 ‘x’ 为 float 或 int32 张量。
T2 在 (
tensor(int8)
,tensor(uint8)
)约束 ‘y_zero_point’ 和 ‘y’ 为 8 位整数张量。