QLinearMatMul

QLinearMatMul - 21

版本

  • 名稱: QLinearMatMul (GitHub)

  • 網域: main

  • since_version: 21

  • function: False

  • support_level: SupportType.COMMON

  • 形狀推斷: True

此版本的運算符自版本 21 起可用。

摘要

行為類似 numpy.matmul 的矩陣乘積。它會使用兩個量化輸入張量、它們的縮放和零點、輸出的縮放和零點,並計算量化輸出。量化公式為 y = saturate((x / y_scale) + y_zero_point)。對於 (x / y_scale),會四捨五入到最近的偶數。如需詳細資訊,請參閱 https://en.wikipedia.org/wiki/Rounding。縮放和零點必須具有相同的形狀。它們必須是純量 (每個張量) 或 N 維張量 (「a」的每一列和「b」的每一行)。純量是指每個張量量化,而 N 維是指每列或每行量化。如果輸入是形狀為 [M, K] 的 2D,則零點和縮放張量可以是 M 個元素的向量 [v_1, v_2, …, v_M],用於每列量化,而 K 個元素的向量 [v_1, v_2, …, v_K],用於每行量化。如果輸入是形狀為 [D1, D2, M, K] 的 N 維張量,則零點和縮放張量可以具有形狀 [D1, D2, M, 1],用於每列量化,以及形狀 [D1, D2, 1, K],用於每行量化。生產永遠不得溢位,且累計只有在 32 位元時才可能溢位。

輸入

  • a (異質) - T1

    N 維量化矩陣 a

  • a_scale (異質) - TS

    量化輸入 a 的縮放

  • a_zero_point (異質) - T1

    量化輸入 a 的零點

  • b (異質) - T2

    N 維量化矩陣 b

  • b_scale (異質) - TS

    量化輸入 b 的縮放

  • b_zero_point (異質) - T2

    量化輸入 b 的零點

  • y_scale (異質) - TS

    量化輸出 y 的縮放

  • y_zero_point (異質) - T3

    量化輸出 y 的零點

輸出

  • y (異質) - T3

    來自 a * b 的量化矩陣乘法結果

類型限制

  • TS in ( tensor(bfloat16), tensor(float), tensor(float16) )

    限制縮放。

  • T1 in ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int8), tensor(uint8) )

    輸入 a 及其零點的類型。

  • T2 in ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int8), tensor(uint8) )

    輸入 b 及其零點的類型。

  • T3 in ( tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int8), tensor(uint8) )

    輸出及其零點的類型。

QLinearMatMul - 10

版本

  • 名稱: QLinearMatMul (GitHub)

  • 網域: main

  • since_version: 10

  • function: False

  • support_level: SupportType.COMMON

  • 形狀推斷: True

此版本的運算符自版本 10 起可用。

摘要

行為類似 numpy.matmul 的矩陣乘積。它會使用兩個量化輸入張量、它們的縮放和零點、輸出的縮放和零點,並計算量化輸出。量化公式為 y = saturate((x / y_scale) + y_zero_point)。對於 (x / y_scale),會四捨五入到最近的偶數。如需詳細資訊,請參閱 https://en.wikipedia.org/wiki/Rounding。縮放和零點必須具有相同的形狀。它們必須是純量 (每個張量) 或 N 維張量 (「a」的每一列和「b」的每一行)。純量是指每個張量量化,而 N 維是指每列或每行量化。如果輸入是形狀為 [M, K] 的 2D,則零點和縮放張量可以是 M 個元素的向量 [v_1, v_2, …, v_M],用於每列量化,而 K 個元素的向量 [v_1, v_2, …, v_K],用於每行量化。如果輸入是形狀為 [D1, D2, M, K] 的 N 維張量,則零點和縮放張量可以具有形狀 [D1, D2, M, 1],用於每列量化,以及形狀 [D1, D2, 1, K],用於每行量化。生產永遠不得溢位,且累計只有在 32 位元時才可能溢位。

輸入

  • a (異質) - T1

    N 維量化矩陣 a

  • a_scale (異質) - tensor(float)

    量化輸入 a 的縮放

  • a_zero_point (異質) - T1

    量化輸入 a 的零點

  • b (異質) - T2

    N 維量化矩陣 b

  • b_scale (異質) - tensor(float)

    量化輸入 b 的縮放

  • b_zero_point (異質) - T2

    量化輸入 b 的零點

  • y_scale (異質) - tensor(float)

    量化輸出 y 的縮放

  • y_zero_point (異質) - T3

    量化輸出 y 的零點

輸出

  • y (異質) - T3

    來自 a * b 的量化矩陣乘法結果

類型限制

  • T1 in ( tensor(int8), tensor(uint8) )

    將輸入 a 及其零點資料類型限制為 8 位元整數張量。

  • T2 in ( tensor(int8), tensor(uint8) )

    將輸入 b 及其零點資料類型限制為 8 位元整數張量。

  • T3 in ( tensor(int8), tensor(uint8) )

    將輸出 y 及其零點資料類型限制為 8 位元整數張量。