QuantizeLinear¶
QuantizeLinear - 25¶
版本¶
域:
mainsince_version:
25函数:
False支持级别:
SupportType.COMMON形状推断:
True
此版本的操作符已在版本 25 及之后可用。
摘要¶
线性量化运算符使用高精度张量、比例因子和零点来计算低精度/量化张量。比例因子和零点必须具有相同的形状,这决定了量化粒度。量化公式为 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]
uint2: [0, 3]
int2: [-2, 1]
对于 (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),axis=i和块大小B:y_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_dtype和y_zero_point都未提供,则输出数据类型为 uint8。如果output_dtype和y_zero_point都已指定,则output_dtype必须是T3。precision - INT (默认值为
'0')(可选)
x和y_scale之间除法运算的精度。如果未提供,则与y_scale的类型相同。saturate - 整型 (默认为
'1')该参数定义了如果输入值超出目标类型范围,转换的行为方式。它仅适用于浮点 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下为 true。所有情况都在操作符描述中的两个表格中完整描述。
输入¶
2 到 3 个输入之间。
x (异构) - T1
要量化的 N 维全精度输入张量。
y_scale (异构) - T2
用于执行量化以获取
y的比例因子。对于逐张量/逐层量化,比例因子是一个标量;对于逐轴量化,它是一个一维张量;对于分块量化,它与输入的形状相同,除了一个执行分块的维度。y_zero_point (可选,异构) - T3
用于执行量化以获取
y的零点。形状必须与y_scale匹配。如果未指定,默认值为零点为 0 的 uint8。
输出¶
y (异构) - T3
N 维量化输出张量。它与输入
x具有相同的形状。
类型约束¶
T1 在 (
tensor(bfloat16),tensor(float),tensor(float16),tensor(int32))输入 'x' 的类型。
T2 在 (
tensor(bfloat16),tensor(float),tensor(float16),tensor(float8e8m0),tensor(int32))输入 'y_scale' 的类型。
T3 在 (
tensor(float4e2m1),tensor(float8e4m3fn),tensor(float8e4m3fnuz),tensor(float8e5m2),tensor(float8e5m2fnuz),tensor(int16),tensor(int2),tensor(int4),tensor(int8),tensor(uint16),tensor(uint2),tensor(uint4),tensor(uint8))输入
y_zero_point和输出y的类型。
QuantizeLinear - 24¶
版本¶
域:
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_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),axis=i和块大小B:y_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_dtype和y_zero_point都未提供,则输出数据类型为 uint8。如果output_dtype和y_zero_point都已指定,则output_dtype必须是T3。precision - INT (默认值为
'0')(可选)
x和y_scale之间除法运算的精度。如果未提供,则与y_scale的类型相同。saturate - 整型 (默认为
'1')该参数定义了如果输入值超出目标类型范围,转换的行为方式。它仅适用于浮点 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下为 true。所有情况都在操作符描述中的两个表格中完整描述。
输入¶
2 到 3 个输入之间。
x (异构) - T1
要量化的 N 维全精度输入张量。
y_scale (异构) - T2
用于执行量化以获取
y的比例因子。对于逐张量/逐层量化,比例因子是一个标量;对于逐轴量化,它是一个一维张量;对于分块量化,它与输入的形状相同,除了一个执行分块的维度。y_zero_point (可选,异构) - T3
用于执行量化以获取
y的零点。形状必须与y_scale匹配。如果未指定,默认值为零点为 0 的 uint8。
输出¶
y (异构) - T3
N 维量化输出张量。它与输入
x具有相同的形状。
类型约束¶
T1 在 (
tensor(bfloat16),tensor(float),tensor(float16),tensor(int32))输入 'x' 的类型。
T2 在 (
tensor(bfloat16),tensor(float),tensor(float16),tensor(float8e8m0),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 - 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),axis=i和块大小B:y_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_dtype和y_zero_point都未提供,则输出数据类型为 uint8。如果output_dtype和y_zero_point都已指定,则output_dtype必须是T3。precision - INT (默认值为
'0')(可选)
x和y_scale之间除法运算的精度。如果未提供,则与y_scale的类型相同。saturate - 整型 (默认为
'1')该参数定义了如果输入值超出目标类型范围,转换的行为方式。它仅适用于浮点 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下为 true。所有情况都在操作符描述中的两个表格中完整描述。
输入¶
2 到 3 个输入之间。
x (异构) - T1
要量化的 N 维全精度输入张量。
y_scale (异构) - T2
用于执行量化以获取
y的比例因子。对于逐张量/逐层量化,比例因子是一个标量;对于逐轴量化,它是一个一维张量;对于分块量化,它与输入的形状相同,除了一个执行分块的维度。y_zero_point (可选,异构) - T3
用于执行量化以获取
y的零点。形状必须与y_scale匹配。如果未指定,默认值为零点为 0 的 uint8。
输出¶
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¶
版本¶
域:
mainsince_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/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),axis=i和块大小B:y_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_dtype和y_zero_point都未提供,则输出数据类型为 uint8。如果output_dtype和y_zero_point都已指定,则output_dtype必须是T2。saturate - 整型 (默认为
'1')该参数定义了如果输入值超出目标类型范围,转换的行为方式。它仅适用于浮点 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下为 true。所有情况都在操作符描述中的两个表格中完整描述。
输入¶
2 到 3 个输入之间。
x (异构) - T1
要量化的 N 维全精度输入张量。
y_scale (异构) - T1
用于执行量化以获取
y的比例因子。对于逐张量/逐层量化,比例因子是一个标量;对于逐轴量化,它是一个一维张量;对于分块量化,它与输入的形状相同,除了一个执行分块的维度。y_zero_point (可选,异构) - T2
用于执行量化以获取
y的零点。形状必须与y_scale匹配。如果未指定,默认值为零点为 0 的 uint8。
输出¶
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¶
版本¶
域:
mainsince_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' 的类型仍决定量化类型。
属性¶
轴 - INT(默认值为
'1')(可选)输入张量量化维度的轴。对于逐张量量化,此项被忽略。负值表示从后往前计数维度。接受的范围是 [-r, r-1],其中 r = rank(input)。
saturate - 整型 (默认为
'1')该参数定义了如果输入值超出目标类型范围,转换的行为方式。它仅适用于浮点 8 量化 (float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz)。默认情况下为 true。所有情况都在操作符描述中的两个表格中完整描述。
输入¶
2 到 3 个输入之间。
x (异构) - T1
要量化的 N 维全精度输入张量。
y_scale (异构) - T1
用于执行量化以获取 'y' 的比例因子。它可以是标量(表示逐张量/逐层量化),或一维张量(表示逐轴量化)。
y_zero_point (可选,异构) - T2
用于执行量化以获取 'y' 的零点。形状必须与 y_scale 匹配。如果未指定,默认值为零点为 0 的 uint8。
输出¶
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' 必须具有相同的类型。
属性¶
轴 - 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 在 (
tensor(float),tensor(int32))将 'x' 约束为 float 或 int32 张量。
T2 在 (
tensor(int8),tensor(uint8)) 中将 'y_zero_point' 和 'y' 约束为 8 位整数张量。
QuantizeLinear - 10¶
版本¶
域:
mainsince_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 在 (
tensor(float),tensor(int32))将 'x' 约束为 float 或 int32 张量。
T2 在 (
tensor(int8),tensor(uint8)) 中将 'y_zero_point' 和 'y' 约束为 8 位整数张量。