QuantizeLinear¶
QuantizeLinear - 23¶
版本¶
網域:
main
since_version:
23
function:
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 類型,但為了保持一致性,量化公式保持不變,且屬性 y_zero_point
的類型仍然決定量化類型。
支援三種量化粒度,由 y_scale
的形狀決定。在所有情況下,y_zero_point
必須具有與 y_scale
相同的形狀。
每個張量(每層)量化:
y_scale
是一個純量。每軸量化:比例必須是 1-D 張量,其長度為量化軸的長度。對於輸入形狀
(D0, ..., Di, ..., Dn)
和axis=i
,y_scale
是長度為Di
的 1-D 張量。區塊量化:比例的形狀與輸入的形狀相同,但一個維度除外,在該維度中執行區塊化。給定
x
形狀(D0, ..., Di, ..., Dn)
,axis=i
,以及區塊大小B
:y_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_dtype
和y_zero_point
,則output_dtype
必須為T2
。saturate - INT(預設為
'1'
)此參數定義當輸入值超出目標類型的範圍時轉換的行為。它僅適用於浮點 8 量化 (float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。預設為 true。所有情況都在運算子說明中插入的兩個表格中完整描述。
輸入¶
介於 2 到 3 個輸入之間。
x (異質) - T1
要量化的 N-D 全精度輸入張量。
y_scale (異質) - T1
用於執行量化以取得
y
的比例。對於每個張量/圖層量化,比例為純量;對於每個軸的量化,比例為 1-D 張量;對於區塊量化,比例具有與輸入相同的形狀,但執行區塊化的維度除外。y_zero_point (選用,異質) - T2
用於執行量化以取得
y
的零點。形狀必須與y_scale
相符。如果未指定,則預設為零點為 0 的 uint8。
輸出¶
y (異質) - T2
N-D 量化輸出張量。它具有與輸入
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¶
版本¶
網域:
main
since_version:
21
function:
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
是一個純量。每軸量化:比例必須是 1-D 張量,其長度為量化軸的長度。對於輸入形狀
(D0, ..., Di, ..., Dn)
和axis=i
,y_scale
是長度為Di
的 1-D 張量。區塊量化:比例的形狀與輸入的形狀相同,但一個維度除外,在該維度中執行區塊化。給定
x
形狀(D0, ..., Di, ..., Dn)
,axis=i
,以及區塊大小B
:y_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_dtype
和y_zero_point
,則output_dtype
必須為T2
。saturate - INT(預設為
'1'
)此參數定義當輸入值超出目標類型的範圍時轉換的行為。它僅適用於浮點 8 量化 (float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。預設為 true。所有情況都在運算子說明中插入的兩個表格中完整描述。
輸入¶
介於 2 到 3 個輸入之間。
x (異質) - T1
要量化的 N-D 全精度輸入張量。
y_scale (異質) - T1
用於執行量化以取得
y
的比例。對於每個張量/圖層量化,比例為純量;對於每個軸的量化,比例為 1-D 張量;對於區塊量化,比例具有與輸入相同的形狀,但執行區塊化的維度除外。y_zero_point (選用,異質) - T2
用於執行量化以取得
y
的零點。形狀必須與y_scale
相符。如果未指定,則預設為零點為 0 的 uint8。
輸出¶
y (異質) - T2
N-D 量化輸出張量。它具有與輸入
x
相同的形狀。
類型約束¶
T1 in (
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
since_version:
19
function:
False
支援等級:
SupportType.COMMON
形狀推斷:
True
此版本的運算子自版本 19 起可用。
摘要¶
線性量化運算子。它會接收一個高精度張量、一個縮放比例和一個零點,以計算低精度/量化張量。縮放比例因子和零點必須具有相同的形狀,並且可以是每個張量/每個層量化的純量,也可以是每個軸量化的 1 維張量。量化公式為 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(輸入)。
saturate - INT(預設為
'1'
)此參數定義當輸入值超出目標類型的範圍時轉換的行為。它僅適用於浮點 8 量化 (float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。預設為 true。所有情況都在運算子說明中插入的兩個表格中完整描述。
輸入¶
介於 2 到 3 個輸入之間。
x (異質) - T1
要量化的 N-D 全精度輸入張量。
y_scale (異質) - T1
用於進行量化以取得 'y' 的縮放比例。它可以是一個純量,表示每個張量/層量化,或是一個 1 維張量,表示每個軸的量化。
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 屬於 (
tensor(float8e4m3fn)
,tensor(float8e4m3fnuz)
,tensor(float8e5m2)
,tensor(float8e5m2fnuz)
,tensor(int8)
,tensor(uint8)
)將 'y_zero_point' 和 'y' 限制為 8 位元整數/浮點數張量。
QuantizeLinear - 13¶
版本¶
網域:
main
since_version:
13
function:
False
支援等級:
SupportType.COMMON
形狀推斷:
True
此版本的運算子自版本 13 起可用。
摘要¶
線性量化運算子。它會接收一個高精度張量、一個縮放比例和一個零點,以計算低精度/量化張量。縮放比例因子和零點必須具有相同的形狀,並且可以是每個張量/每個層量化的純量,也可以是每個軸量化的 1 維張量。量化公式為 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(輸入)。
輸入¶
介於 2 到 3 個輸入之間。
x (異質) - T1
要量化的 N-D 全精度輸入張量。
y_scale (異質) - tensor(float)
用於進行量化以取得 'y' 的縮放比例。它可以是一個純量,表示每個張量/層量化,或是一個 1 維張量,表示每個軸的量化。
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¶
版本¶
網域:
main
since_version:
10
function:
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-D 全精度輸入張量。
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 位元整數張量。