QuantizeLinear

QuantizeLinear - 23

版本

  • 名稱: QuantizeLinear (GitHub)

  • 網域: 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_pointy 必須具有相同的類型。y_zero_point 通常不使用於量化為 float8 類型,但為了保持一致性,量化公式保持不變,且屬性 y_zero_point 的類型仍然決定量化類型。

支援三種量化粒度,由 y_scale 的形狀決定。在所有情況下,y_zero_point 必須具有與 y_scale 相同的形狀。

  • 每個張量(每層)量化:y_scale 是一個純量。

  • 每軸量化:比例必須是 1-D 張量,其長度為量化軸的長度。對於輸入形狀 (D0, ..., Di, ..., Dn)axis=iy_scale 是長度為 Di 的 1-D 張量。

  • 區塊量化:比例的形狀與輸入的形狀相同,但一個維度除外,在該維度中執行區塊化。給定 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_dtypey_zero_point,則輸出資料類型為 uint8。如果同時指定了 output_dtypey_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

版本

  • 名稱: QuantizeLinear (GitHub)

  • 網域: 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/Roundingy_zero_pointy 必須具有相同的類型。y_zero_point 通常不用於量化為 float8 類型,但為了保持一致性,量化公式保持不變,並且屬性 y_zero_point 的類型仍然決定了量化類型。支援三種量化粒度,由 y_scale 的形狀決定。在所有情況下,y_zero_point 的形狀必須與 y_scale 相同。

  • 每個張量(每層)量化:y_scale 是一個純量。

  • 每軸量化:比例必須是 1-D 張量,其長度為量化軸的長度。對於輸入形狀 (D0, ..., Di, ..., Dn)axis=iy_scale 是長度為 Di 的 1-D 張量。

  • 區塊量化:比例的形狀與輸入的形狀相同,但一個維度除外,在該維度中執行區塊化。給定 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_dtypey_zero_point,則輸出資料類型為 uint8。如果同時指定了 output_dtypey_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

版本

  • 名稱: QuantizeLinear (GitHub)

  • 網域: 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

版本

  • 名稱: QuantizeLinear (GitHub)

  • 網域: 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

版本

  • 名稱: QuantizeLinear (GitHub)

  • 網域: 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 位元整數張量。