<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      探秘Transformer系列之(34)--- 量化基礎

      探秘Transformer系列之(34)--- 量化基礎

      0x00 概述

      雖然基于Transformer架構的LLMs已經取得了長足的發展,但由于LLMs的參數變得越來越多,部署基于Transformer的LLMs面臨著重大挑戰。例如,即使是中等規模的LLMs,如LLaMA13B,也需要大約26GB的內存來加載其所有參數的FP16格式。這樣的開銷不僅推高了使用成本,而且限制了它們的更廣泛應用。

      為了應對這些挑戰,人們提出了許多針對LLMs的專業壓縮方法,包括剪枝、知識傳遞、量化、緊湊的架構設計以及動態網絡等。這些方法有助于減少模型推理過程中的內存和計算成本,以便模型可以在各種資源受限的設備上運行。模型量化(Model Quantization,也叫網絡量化)則是模型壓縮中的一項重要方法。模型量化過程分為兩部分:將模型的單精度參數(一般 FP32-32位浮點參數)轉化為低精度參數(一般 INT8-8 位定點參數),以及模型推理過程中的浮點運算轉化為定點運算。模型量化技術可以降低模型的存儲空間、內存占用和計算資源需求,從而提高模型的推理速度。

      注:關于量化,一共有5篇,本文是第一篇。

      0x01 背景知識

      1.1 需求

      在大語言模型的實際運行過程中,資源效率問題主要體現在顯存壓力和計算效率兩個方面。這些問題隨著模型規模的擴大和應用場景的復雜化而愈發突出。

      • 顯存壓力:大語言模型在處理長文本時面臨著嚴重的顯存壓力。這種壓力體現在兩個方面:
        • 模型參數規模的增加。大型語言模型之所以得名,是因為它們包含的參數數量。這些模型通常擁有數十億個參數,存儲這些參數可能相當昂貴。在推理過程中,激活值是輸入和權重的乘積,同樣可能非常龐大,通常需要配備大量顯存的GPU來加速推理過程。
        • KV Cache的特性是隨著輸入序列長度的增加,所需顯存呈線性增長。例如,在處理一個32K長度的文本序列時,僅KV Cache就可能占用10-15GB顯存,這與模型本身的權重參數需要共享有限的顯存空間。這種顯存壓力直接限制了模型處理超長文本的能力,也影響了系統的整體擴展性。
      • 計算效率:顯存資源的限制進一步導致了計算效率的下降。具體表現在三個層面:
        • 批處理能力受限:由于顯存占用,系統難以同時處理多個大批量請求。
        • 響應延遲增加:特別是在處理長序列時,模型的推理時間顯著延長。
        • 系統吞吐量下降:受限于顯存容量,服務器能夠同時處理的請求數量大幅減少。

      另外,不同的應用場景也帶來了獨特的挑戰:

      • 邊緣計算環境下,需要在有限的計算資源中實現模型的高效運行。
      • 移動設備應用要求模型能夠適應嚴格的內存限制。
      • 實時交互場景對模型的響應延遲提出了更高要求。

      對于模型小型化,人們關注的是模型的平均推理時間和功耗, 平均推理時間可以用latency 或 throughput 來衡量, 而功耗則可以用參考生成token過程中所用到GPU的功耗。這兩個指標都與模型參數量緊密相關, 特別是LLMs的參數量巨大, 導致部署消耗GPU量大。

      綜上所述,在部署過程中如何使得模型變得更小更輕,且保持模型能力盡可能不下降就成了一個重要的研究話題。

      1.2 壓縮

      模型壓縮算法可以將一個龐大而復雜的預訓練模型轉化為一個精簡的小模型,減少對硬件的存儲、帶寬和計算需求,以達到加速模型推理和落地的目的。按照壓縮過程對網絡結構的破壞程度,有研究人員將模型壓縮技術分為“前端壓縮”和“后端壓縮”兩部分:

      • 前端壓縮,是指不改變原網絡結構的壓縮技術,主要包括知識蒸餾、輕量級網絡(緊湊的模型結構設計)以及濾波器(filter)層面的剪枝(結構化剪枝)等;
      • 后端壓縮,是指包括低秩近似、未加限制的剪枝(非結構化剪枝/稀疏)、參數量化以及二值網絡等,目標在于盡可能減少模型大小,會對原始網絡結構造成極大程度的改造。

      近年來主流的模型壓縮方法包括:數值量化(Data Quantization,也叫模型量化),模型稀疏化(Model sparsification,也叫模型剪枝 Model Pruning),知識蒸餾(Knowledge Distillation), 輕量化網絡設計(Lightweight Network Design)和 張量分解(Tensor Decomposition)。

      1.3 如何表示數值

      讓我們首先看看在計算機中如何表示數值。因為神經網絡的推理和訓練都是計算密集型的。所以,數值的有效表示就顯得尤為重要。

      在計算機科學中,一個給定的數值通常表示為浮點數(或稱為浮點),即帶有小數點的正數或負數。這種表達方式利用科學計數法來表達實數。即用一個尾數(Mantissa,尾數,它實際上是有效數字的非正式說法),一個基數(Base),一個指數(Exponent)以及一個表示正負的符號來表達實數。具體參見下圖。

      定點是另外一種數值的表示,它和浮點的區別在于,將整數(integer)部分和小數(fractional)部分分開的點在哪里。定點保留特定位數整數和小數,而浮點保留特定位數的有效數字(significand)和指數(exponent)。

      由上圖可知,尾數和指數由“位”或二進制數字表示,不同數據類型的尾數和指數不同,我們用越多的位來表示一個值,它通常就越精確。這些位的一個巧妙特性是,我們可以計算設備存儲給定值需要多少內存。由于一字節內存中有8位,我們可以為大多數形式的浮點表示創建一個基本公式。

      \[memory = \frac{number\_of\_bits}{8} \times number\_of\_params \]

      現在假設我們有一個模型,包含700億個參數。大多數模型默認使用32位浮點數(通常稱為全精度)表示,僅加載模型就需要280GB的內存。

      \[64\text{-}bits = \frac{64}{8} \times 70B \approx 560GB \\ 32\text{-}bits = \frac{32}{8} \times 70B \approx 280GB \\ 16\text{-}bits = \frac{16}{8} \times 70B \approx 140GB \\ \]

      模型參數的位數(包括在訓練期間)變得非常重要,因為其決定了模型占據的內存大小。但是隨著精度的降低,模型的準確性通常也會下降。所以我們希望在保持準確性的同時減少表示數值的位數。

      1.4 常見數據類型

      我們再來看看常見的數據類型以及使用它們替代32位(稱為全精度FP32)表示的影響。

      • 常規精度模型把模型權重數值格式表示為 FP32(32位浮點,單精度)。
      • 混合精度(Mixed precision)在模型中同時使用 FP32FP16 的權重數值格式。FP16 減少了一半的內存大小,但有些參數或操作符必須采用 FP32 格式才能保持準確度。
      • 低精度模型把模型權重數值格式表示為 FP16(半精度浮點)或者 INT8(8位的定點整數),目前業界正努力追求INT4和INT1的精度,而INT32或FP16的性能改進并不顯著,所以INT8的量化是主要的選擇。

      另外,當我們在特定數據類型(如 INT8)中進行計算時,我們需要另一種數據類型的結構來保存結果,以便處理溢出,這叫做。累加數據類型(accumulation data type),比如INT8的accumulation data type是INT32。累加數據類型指定了相關數據類型值的累加(加法、乘法等)結果的類型。 例如考慮兩個 int8 值 A = 127、B = 127,并將 C 定義為 A 和 B 的和:

      C = A + B
      

      這里的結果 C 遠大于 int8 的最大可表示值 127,因此,我們需要一種精度更高的數據類型,以避免巨大的精度損失。比如bfloat16的累加數據類型就是float32。

      下圖給出了不同數據類型對應的累加數據類型、數學操作和帶寬優化率。

      0x02 量化簡介

      量化的核心思想是:在可接受的精度損失范圍內,用更緊湊的數據格式來表示原始數據。

      量化概念源自數字信號處理領域,指將信號的連續取值(或者大量可能的離散取值)近似為有限多個(或者較少的)離散值的過程。神經科學中與神經網絡量化的研究表明,以連續形式存儲的信息將不可避免地受到噪聲的破壞,而且離散表示具有更高的泛化能力,以及在有限資源下具有更高的效率。所以人們普遍認為,人腦是以離散/量化形式存儲信息,而不是以連續形式存儲信息。

      在機器學習中,模型量化是指將神經網絡的浮點算法轉換為低精度的整數以節省計算開銷,比如使用 8 位整數(int8)等低精度數據類型來表示權重和激活度,而不是通常的 32 位浮點。減少比特數意味著生成的模型尺寸會減少、進而在推理時所需的內存存儲更少,能耗更低。而且矩陣乘法等運算可以用整數算術更快地完成。因此,量化是一種降低推理計算和內存成本的有效技術。

      神經網絡模型可以量化有幾點關鍵因素:

      • 首先,神經網絡的推理和訓練都是計算密集型的。因此,數值的有效表示就顯得尤為重要。
      • 其次,大多數當前的神經網絡模型都嚴重過度參數化,因此有足夠的機會在不影響精度的情況下降低比特精度。
      • 再次,神經網絡對激進量化和極端離散化非常魯棒。在量化模型與原始非量化模型之間具有較高的誤差/距離的同時,仍然可以獲得非常好的泛化性能。
      • 最后,神經網絡模型的分層結構提供了一個額外的維度來探索。神經網絡中不同的層對損失函數有不同的影響,這激發了混合精度量化方法。

      2.1 深度神經網絡的稀疏性

      根據深度學習模型中可以被稀疏化的對象,深度神經網絡中的稀疏性主要包括權重稀疏,激活稀疏和梯度稀疏。

      2.1.1 權重稀疏

      在大多數神經網絡中,通過對網絡層(卷積層或者全連接層)對權重數值進行直方圖統計,可以發現,權重數值分布很像正態分布(或者是多正態分布的混合),且越接近于 0,權重越多,這就是權重稀疏現象。有研究人員認為,權重數值的絕對值大小可以看做重要性的一種度量,權重數值越大對模型輸出貢獻也越大,反正則不重要,刪去后對模型精度的影響應該也比較小。

      2.1.2 激活稀疏

      激活函數會造成激活的稀疏性。我們以ReLU 激活函數為例,其定義為:\(ReLU(x)=max(0,x)\) ,該函數使得負半軸的輸入都產生 0 值的輸出,這可以認為激活函數給網絡帶了另一種類型的稀疏性。即無論網絡接收到什么輸入,大型網絡中很大一部分神經元的輸出大多為零。

      2.1.3 梯度稀疏

      大多數深度神經網絡模型參數的梯度其實也是高度稀疏的,論文“DEEP GRADIENT COMPRESSION: REDUCING THE COMMUNICATION BANDWIDTH FOR DISTRIBUTED TRAINING”發現,在分布式 SGD 算法中,99.9% 的梯度交換都是冗余的。

      2.2 量化機制

      我們接下來介紹一些量化相關知識點。

      量化原理如下圖所示。量化的主要目標是在盡可能保持原始參數的精度的同時,減少表示原始參數所需的位數。具體如下圖所示,[-R, R] 是量化前的數據范圍,[-127, 127] 是量化后的數據范圍。這樣就把模型權重等參數的精度從高位寬連續取值(通常為float32或者大量可能的離散值)降低到有限多個低位寬離散值(通常為int8)的過程。

      下圖給出了量化公式。其中 X 是浮點張量,Xˉ是量化后的整數張量,Δ 是縮放系數,??? 表示四舍五入函數,N 為量化位數(此處為 8 位)。這里假設張量圍繞 0 對稱。該量化方法基于浮點數絕對值最大值來計算縮放系數 Δ,這會保留激活中的異常值,而這些異常值對模型的準確性至關重要。我們可以基于部分校準樣本集的激活值離線計算縮放系數 Δ,這稱為靜態量化;也可以在模型運行時根據激活統計數據來動態計算縮放系數,這稱為動態量化。

      2.2.1 基本操作

      量化有兩個基本操作:

      • 量化(quantization):將數據轉換為較低精度,比如將一個實數轉換為一個量化的整數(float32 變成int8)。
      • 反量化( de-quantization):將數據轉換為較高精度。比如將一個數從一個量化的整數表示形式轉換為一個實數(int8變成float32)。

      具體如下圖所示。我們會在接下來進行細致分析。

      也可以進一步細化。下面(1)式是量化,(2)式是反量化。Q(·)表示量化操作,X代表輸入tensor,S即為scale,Z即為zero-point,b為量化比特,round(?)和clip(?)分別表示取整和截斷操作,\(q_{min}\)\(q_{max}\)是量化后的最小值和最大值。S和Z統稱為量化參數。多數的量化算法可以理解為就是為了找到更好的S和Z,使得量化模型的結果盡可能逼近原模型的結果.。

      \[Q(X) = clamp(\lfloor\frac{X}{S}\rceil + Z, 0, 2^b -1)\tag {1}\\ \]

      \[\hat X = (Q(X) - Z) \times S \tag{2} \]

      假設r表示量化前的浮點數,量化后的整數q可以表示為:

      \[q = clip(round(\frac{r}{s} + z), q_{min},q_{max}) \]

      2.2.2 范圍映射

      量化過程的核心就是找到一個合適的映射關系,將浮點數映射到整數空間。這個映射需要保證:

      • 能夠覆蓋原始數據的完整范圍。
      • 盡可能保持數值的相對關系。
      • 保證量化后的數值都落在某個表示范圍內,比如INT8是0-255。

      在范圍映射中,必須將范圍[A1, A2]的數據轉換為B位整數的范圍。具體而言,是將范圍[A1, A2]中的所有元素映射到目標范圍中,超出[A1, A2]范圍的元素將被剪切到最接近的邊界。比如,我們需要將FP32映射到int8范圍內,int8 只能表示 256 個值,而 float32 可以表示的值范圍更廣。而一般神經網絡層權重的值分布范圍很窄,但是在這值域中數值點數量卻很大。所以需要仔細調整范圍映射,才能更好地將float32值范圍 [a, b] 投射到 int8 空間。

      量化誤差

      大部分模型量化的使用者或者研究者,更關注的是量化模型的精度問題。模型量化將更高數值精度的浮點模型轉換為少數的離散定點,不可避免會引入誤差。而在神經網絡模型中,每一層的量化誤差傳遞放大,就會導致量化模型精度過低。一般定義量化操作為: \(\hat{X} = Round( clamp(\frac{X}{s}, Q_{min}, Q_{max}) )\),其中 Round 表示舍入操作,clamp 截斷超過量化域范圍 \(\left [ Q_{min}, Q_{max} \right ]\) 的異常值。Round 和 Clamp 操作都會導致數值精度的不可逆損失,簡單來說,一個tensor 的量化誤差可以表示為截斷誤差和舍入誤差之和。而這兩者又是相關聯的,s 表示縮放因子,定義為 \(s = \frac{X_{max} - X_{min} }{2^{bit}-1 }\) ,也就是說它是通過截斷的上下界來決定。綜合兩者可以得到一個經驗公式 \(\sigma ^{2} ~ \frac{s^{2} }{12}\),即量化誤差正比于 \(s^{2}\) 。

      校準

      為了計算 scalezero_point,我們需要知道 FP32 weight/activation 的實際動態范圍。校準就是選擇一個最優范圍的過程,即找到一個能包含盡可能多的值,同時又能最小化量化誤差的范圍。校準對有效的量化至關重要。對于推理過程來說,weight 是一個常量張量,動態范圍是固定的,activation 的動態范圍是變化的,它的實際動態范圍必須經過采樣獲?。〝祿剩?。如果量化過程中的每一個 FP32 數值都在這個實際動態范圍內,我們一般稱這種為不飽和狀態;反之如果出現某些 FP32 數值不在這個實際動態范圍之內我們稱之為飽和狀態。

      均勻量化 & 非均勻量化

      從范圍映射角度來看,根據量化數據表示的原始數據范圍是否均勻,可以將量化方法分為均勻量化&非均勻量化。實際的深度神經網絡的權重和激活值通常是不均勻的,因此理論上使用非線性量化導致的精度損失更小,但在實際推理中,非線性量化的計算復雜度較高,所以我們通常使用線性量化。

      • 非均勻量化(也稱為非線性量化)。非均勻量化定義如下圖所示,當實數 r 的值落在量化步長 \(\Delta_i\)\(\Delta_{i+1}\) 之間時,量化器Q將其投影到相應的量化級別\(X_i\),\(X_i\)\(\Delta_i\)的間距都是不均勻的。對于固定位寬,非均勻量化可以實現更高的精度,因為可以通過更多地關注重要值區域或找到適當的動態范圍來更好地捕獲分布。例如,許多非均勻量化方法是針對權重和激活的鐘形分布而設計的,這些分布通常涉及長尾。典型的基于規則的非均勻量化是使用對數分布,其中量化步長和級別呈指數增長而不是線性增長。

      • 均勻量化(也稱為線性量化)。線性量化采用均勻分布的聚類中心,原始浮點數據和量化后的整數存在一個簡單的線性變換關系。因為卷積、全連接等網絡層本身只是簡單的線性計算,因此線性量化中可以直接用量化后的數據進行直接計算。均勻量化將實數值范圍劃分為均勻的有限區間,然后,同一區間內的實數值被映射到相同的整數。其實,均勻量化得到的量化值(又稱量化級別)也是均勻的。

      下圖給出了均勻量化(左)和非均勻量化(右)之間的比較。連續域 r 中的實數值被映射到量化域Q中的離散、較低精度值,這些值用橙色點來標記。請注意,在均勻量化中,量化值(量化級別)之間的距離是相同的,而在非均勻量化中它們可以變化。

      神經網絡的權重通常不是均勻分布的,因此非均勻量化是可行的。一般來說,非均勻量化使我們能夠通過非均勻地分配比特和離散化參數范圍來更好地捕獲信號信息,可以提供更高的精度和更低的量化誤差。然而,非均勻量化方案可能會因為涉及耗時的查找操作而效率低下,通常難以在通用計算硬件(例如 GPU 和 CPU)上有效部署。因此,均勻量化由于其簡單性和到硬件的高效映射而成為目前事實上的標準方法。

      Af?ne Quantization & Scale Quantization

      均分量化即Uniform quantization分兩步:

      • 選擇要量化的數值(浮點)的范圍并截斷,截斷的意義是:大于數值范圍的就讓其為數值范圍的最大值,小于數值范圍的就變成數值范圍的最小值。

      • 將截斷后的數值映射到整數上,這一步有round的操作。

      \([\beta,\alpha]\)是為量化選擇的可表示實值的范圍,b是帶符號整數表示的位寬(bit-width)。均勻量化將輸入值\(x\in[\beta,\alpha]\)變換到\([-2^{b-1}, 2^{b-1}-1]\)內,其中范圍外的輸入被截斷到最近的邊界。

      由于我們只考慮均勻變換,因此根據量化前后浮點空間中的零的量化值是否依然是 0,可以將浮點數的線性量化分為兩類:對稱量化 Symmetric Quantization 和非對稱量化 Asymmetric Quantization。我們將這兩種選擇分別稱為scale和af?ne。對應變換函數也是兩種選擇:f(x) = s · x + z及其特例 f(x) = s · x。

      • Scale Quantization:變換函數是 f(x) = s · x, 即對稱量化,s 是縮放因子。Scale Quantization的特點如下:
        • 對稱量化就是將一個張量中的 [???????(∣??∣), ??????(∣??∣)] 內的 FP32 值分別映射到 8 bit 數據的 [?128,127] 的范圍內,中間值按照線性關系進行映射??梢钥闯觯瑢ΨQ量化的浮點值和量化值范圍都是相對于零對稱的,所以叫對稱量化。
        • 在對稱量化中,原始浮點值的范圍被映射到量化空間中以零為中心的對稱范圍。對于int8,那么int8的值域范圍就是[-127, 127],不適用128這個數值。對稱量化的一個很好的例子被稱為絕對最大值(absmax)量化。給定一系列值,我們取最大的絕對值(α)作為執行線性映射的范圍。
        • 對稱量化可以避免量化算子在推理中計算z相關的部分,降低推理時的計算復雜度;在解量化步驟中,對稱量化的計算效率更高,實現起來更簡單。
        • 對稱量化在量化權重的實踐中被廣泛采用,因為將零點歸零可以減少推理過程中的計算成本,并且使實現更加簡單。
        • 將對稱量化在用到激活上時有疑問,因為激活值常常為非負值。因為量化區間大多落在非負區間,浪費了量化范圍,增大了量化誤差。
        • 對權值和數據的量化可以歸結為尋找 ?????????? 的過程,量化方法的改進本質上是選擇最優 ?????????? 值的過程。
      • Af?ne Quantization:變換函數是 f(x) = s · x + z,即非對稱量化,s是縮放因子,z是零點。Af?ne Quantization的特點如下:
        • 非對稱量化的裁剪范圍不一定是相對于原點對稱的。它將浮點范圍中的最小值(β)和最大值(α)映射到量化范圍的最小值和最大值。這樣可以利用到整個量化范圍,但是計算更復雜。比如,對于int8,那么int8的值域范圍就是[0,255]。
        • 非對稱算法一般能夠較好地處理數據分布不均勻的情況。與對稱量化相比,非對稱量化通常導致更窄的裁剪范圍,這對激活可能嚴重失衡的神經網絡中的激活尤為重要。例如,ReLU之后的激活總是具有非負值,這個情況下還是用對稱量化就會浪費一個bit的表示能力,只能[0, 127]。非對稱量化可以根據實際數據的分布確定最小值和最小值,可以更加充分的利用量化數據信息,使得量化導致的損失更低。
        • 權重參數的非對稱量化算法可以分為兩個步驟:
          • 通過在權重張量中找到 min 和 max 值,從而確定縮放系數 s 和零點偏移值 z。
          • 將權重張量的每個值從 FP32 轉換為 INT8。

      具體參見下圖。round(?)和clip(?)分別表示取整和截斷操作,s是數據量化的間隔,z是表示數據偏移的偏置。

      下圖給出了對位寬(bit-width)為8的不同均勻量化的直觀解釋。s是縮放因子,z是零點。浮動點網格(?oating-point grid)為黑色,整數量化網格(integer quantized grid)為藍色。

      MinMax 量化 & 基于截斷的量化

      剪切范圍和校準是均勻量化中的一個重要因素,選擇合適的剪切范圍可以減少異常值的數量,但也會導致更大的尺度系數和量化誤差。根據實際值是否被截斷(clipped),均勻量化又可以分為兩類:保留所有值范圍的 MinMax 量化和基于截斷(clipping-based)的量化。

      MinMax量化雖然允許將向量值的完整范圍映射出來,但它帶來了一個主要的缺點:異常值。如果原始數據中一個值比其他所有值都大得多,該值可以被認為是一個異常值。如果我們要把異常值映射到這個完整范圍內,所有小的值都會被映射到相同或者相似的較低位表示,并且失去它們的差異信息。比如下圖,因為500這個異常值的存在,導致 -255~255 這些數被映射到更小的范圍內。

      所以我們可以選擇裁剪某些值,也就是定義一個自定義的動態范圍,把極端值排除在外。裁剪會設置原始值的不同動態范圍,任何超出這個范圍的值都會被“裁剪”,不管它實際有多大,都被映射到目標范圍的最大值或最小值。在下面的例子中,手動將動態范圍設置為[-255,255],那么所有超出該范圍的值將被映射到-127或127,無論它們的實際值如何。

      與 MinMax 量化相比,截斷異常值有助于提高精度并為中間值分配更多位,顯著降低了“非異常值”的量化誤差。但是會導致離群值的量化誤差增大。

      在現有截斷算法中, 截斷值往往基于一個給定的數值,缺乏對數據實際分布的學習能力。為此,可以采用可學習的截斷方式,即通過構建最小化單層量化MSE模型,求解得到截斷參數 t的最優值。

      2.2.3 量化比特

      計算機中不同數據類型的占用比特數及其表示的數據范圍各不相同。可以根據實際業務需求將原模型量化成不同比特數的模型,用來量化的比特數越少,量化后的模型壓縮率越高。工業界目前最常用的量化位數是8比特,低于8比特的量化被稱為低比特量化。1比特是模型壓縮的極限,可以將模型壓縮為1/32,在推理時也可以使用高效的XNOR和BitCount位運算來提升推理速度。下圖給出了量化原理以及1bit和2bit的公式。

      2.2.4 分類

      論文“LLMC: Benchmarking Large Language Model Quantization with a Versatile Compression Toolkit”從數學角度把量化算法做如下分類。"Trans."指示算法是否是等效變換。γ是比例因子。s和Q表示變換向量和矩陣。I是恒等矩陣。L是具有學習率η的損失函數。α和β表示剪切最小值和最大值。H是Hessian矩陣,E表示用H計算的量化誤差。λ是衰減系數。

      2.3 量化對象

      模型量化的對象主要包括以下幾個方面:

      • 權重(weight):weight的量化是最常規也是最常見的。量化weight可達到減少模型大小內存和占用空間。
      • 激活(activation):實際中activation往往是占內存使用的大頭,因此量化activation不僅可以大大減少內存占用。更重要的是,結合weight的量化可以充分利用整數計算來獲得性能提升。
      • 梯度(Gradients):在訓練深度學習模型時,梯度通常是浮點數,因此量化梯度的主要作用是在分布式計算中減少通信開銷,同時,也可以減少backward時的開銷。因為主要用于訓練,梯度量化相對上面兩者略微小眾一些,顧略過。
      • KV Cache:量化 KV Cache對于提高長序列生成的吞吐量至關重要。我們會在后續章節進行深入分析。

      2.3.1 權重(和偏置)

      權重量化僅量化模型的權重以壓縮模型的大小,在推理時將權重反量化為原始的float32數據,后續推理流程與普通的float32模型一致。權重量化的好處是在某些需求中可以不需要校準數據集,不需要實現量化算子,且模型的精度誤差較小。由于實際推理使用的仍然是float32算子,所以推理性能不會提高。由于偏置的數量(百萬級)遠少于權重(十億級),偏置通常保持較高的精度(如INT16),因此量化的主要工作集中在權重上。

      2.3.2 激活

      因為模型主要由權重和偏置組成,在運行模型之前就已知這些值,因此我們可以將LLM的權重和偏置視為靜態值。與權重不同,激活會隨著在推理過程中輸入模型的每個數據和層的不同而變化,這使得準確量化它們變得具有挑戰性。由于這些值在每個隱藏層之后更新,所以只有在輸入數據通過模型時才能知道它們在推理過程中的狀態。為了量化激活值,需要用戶提供一定數量的校準數據集用于統計每一層激活值的分布,并對量化后的算子做校準。校準數據集可以來自訓練數據集或者真實場景的輸入數據,需要數量通常非常小。

      2.3.3 校準

      可選擇范圍的校準技術主要包括:

      • max-min(最大最小值):這是使用最簡單也是較為常用的一種采樣方法?;舅枷胧侵苯訌?FP32 張量中選取最大值和最小值來確定實際的動態范圍。對 weights 而言,這種采樣方法是不飽和的,但是對于 activation 而言,如果采樣數據中出現離群點,則可能明顯擴大實際的動態范圍,比如實際計算時 99% 的數據都均勻分布在 [-100, 100] 之間,但是在采樣時有一個離群點的數值為 10000,這時候采樣獲得的動態范圍就變成 [-100, 10000]
      • 滑動平均最大最小值(MovingAverageMinMax):與 MinMax 算法直接替換不同,MovingAverageMinMax 會采用一個超參數 c (Pytorch 默認值為0.01)逐步更新動態范圍。這種方法獲得的動態范圍一般要小于實際的動態范圍。
      • KL散度(KL divergence):最小化原始值和量化值之間的分布差異(KL散度)。一般認為量化之后的數據分布與量化前的數據分布越相似,量化對原始數據信息的損失也就越小,即量化算法精度越高。KL 距離(也叫 KL 散度)一般被用來度量兩個分布之間的相似性。TensorRT 使用 KL 散度算法進行量化校準的過程:首先在校準集上運行 FP32 推理,然后對于網絡每一層執行以下步驟:
        1. 收集激活輸出的直方圖。
        2. 生成許多具有不同飽和度閾值的量化分布。
        3. 選擇最小化 KL_divergence(ref_distr, quant_distr) 的閾值 T,并確定 Scale。
      • 百分比(Percentile):手動選擇輸入范圍的百分位數,比如選取tensor的99%或者其他百分比的數值,其余的截斷。也就是說,不是使用最大/最小值,而是使用第i個最大/最小值作為β/α。
      • MSE:優化原始權重和量化權重之間的均方誤差。

      2.3.3 量化粒度

      量化方法的一個關鍵點是如何為權重計算所裁剪范圍[α, β]的粒度。所謂量化有不同的粒度其實是指基于不同的粒度去計算量化縮放系數,即多大數據共享同一個縮放因子。一般來說,更細的粒度可以減少量化誤差,但需要存儲更多的量化參數并引入更高的計算開銷。

      量化粒度對應于哪些權重/激活一起量化并共享量化參數。按照量化粒度,我們可以把模型的量化分為逐向量量化(per-tensor)、逐token量化、逐通道(per-channel)量化和逐組量化(per-group)等。

      逐張量量化

      逐張量量化(per-tensor)也叫做逐層量化,這是最簡單的一種方式,也是最粗粒度的量化方式。

      該方案以一層網絡為量化單位,每層網絡一組量化參數(S和Z),比如整個激活矩陣的張量 計算出一個統一的縮放因子(scale factor);整個權重矩陣也是如此。后將張量中的所有元素都使用這個縮放因子量化到低精度格式,例如 INT8。因此也叫逐層量化(Layerwise)。例如,一個 INT8 的 per-tensor 動態量化器會找到整個張量的最大絕對值,以此計算出一個縮放因子,然后將所有元素縮放到 INT8 的表示范圍內 [-127, +127] 并進行取整。

      在大多數計算機視覺任務中,層的激活輸入與許多不同的卷積過濾器進行卷積,如下圖所示。每個卷積濾波器都可以有不同的取值范圍。而逐層量化會對對屬于同一層的所有卷積濾波器使用相同的裁剪范圍。雖然這種方法很容易實現,但由于每個卷積濾波器的范圍可能變化很大,它通常會導致次優精度。例如,一個參數范圍相對較窄的卷積核(例如下圖中的Filter 1)可能會因為同一層中另一個范圍更大的核而失去其量化分辨率。

      逐通道量化 & 逐token量化

      逐張量量化是整個矩陣共用一個縮放系數,而逐 token 量化和逐通道量化則為每個 token 或權重的輸出通道設定不同的縮放系數。

      • per-channel(channel就是維度,類似于embedding的維度,或者hidden size)。逐通道量化如上面卷積示例圖最后一列所示。也就是說,以每一層網絡的每個量化通道為單位,給每個通道都分配了一組獨立的量化參數。逐通道量化由于量化粒度更細,能獲得更高的量化精度,但計算也更復雜。以LLM來說,逐通道量化通常是針對權重而言,每列(通常指 hidden dim 維度的一列)對應一組量化系數。
      • per-token與逐通道量化類似,但,是針對激活(token就是文字的token)而言,每行(每個token)對應一組獨立的量化參數。

      當進行矩陣乘法時,可以通過組合各種技巧,例如逐行或逐向量量化,來獲取更精確的結果。具體參見下圖。圖左側是對于激活X和權重W都進行逐向量量化,即用整個矩陣張量的最大絕對值對張量進行歸一化。右側則使用逐token量化和逐通道量化混合進行。找到 X 的每一行和 W 的每一列的最大絕對值,然后逐行或逐列歸一化 X 和 W 。最后將 X 和 W 相乘得到 C。最后,我們再計算與X 和 W 的最大絕對值向量的外積,并將此與 C 求哈達瑪積來反量化回 FP16。

      逐組量化

      per-channel 量化的一個粗粒度版本是為不同的通道組使用不同縮放系數。逐組量化以組為單位,每個group使用一組S和Z;它的粒度處于 per-tensor 和 per-channel 之間。K行(對應激活)或者K列(對應權重)共享一個量化系數。當 group=1 時,逐組量化與逐層量化等價;當 group=num_filters(如:dw(Depthwise)將卷積核變成單通道)時,逐組量化與逐通道量化等價。

      對于卷積示例圖來說,可以在一個層內分組多個不同的通道來計算裁剪范圍(激活或卷積核)。這對于參數在單個卷積/激活中的分布變化很大的情況很有幫助。然而,這種方法不可避免地帶來了考慮不同縮放因子的額外成本。

      下圖給出了per-token和group-wise的對比。

      我們再看看OpenPPL-LLM的方案和思考。

      OpenPPL-LLM引入兩種不同的量化技術,即Groupwise量化((通常為int4量化)與Channelwise量化(通常為INT8量化)。如下圖所示,對于一個4x4矩陣而言,Groupwise量化將相鄰的兩個元素視作一組(圖中顏色相同的元素為一組),組內元素共享量化參數。由于組內元素數量很少,這種量化方案具有較高量化精度,但將為系統帶來更大的計算負擔與訪存開銷。Channelwise量化將矩陣的每一列元素視作一組,每列元素共享量化參數,這種方案量化精度稍差,但其訪存模式利于tensor core的運算,可以充分利用GPU的低精度運算器加速運算。這兩種量化方式都可以起到壓縮顯存的作用。

      針對batchsize<16的推理場景,大語言模型中的所有計算任務都是訪存密集型的,系統的運行瓶頸不在于計算,參數訪存量遠遠超過激活訪存。因此非常適合使用Groupwise量化的方式單獨壓縮矩陣乘法的參數矩陣,其計算和輸入輸出仍然保持FP16精度。這種量化將提供更高的量化精度。groupwise量化所帶來的額外計算量也不會拖慢系統整體的運行效率。

      針對batchsize>16的推理場景,groupwise的量化方式無法起到加速作用,此時系統的計算負載將逐漸轉變為計算密集型的,我們必須利用GPU上具有更高算力的低精度運算器(int8 Tensorcore)加速網絡執行。Groupwise量化并不利于GPU TensorCore的運行,這種量化方式將導致嚴重的訪存不連續,因此性能很差。此時推薦以Channelwise量化的方式同時對矩陣乘法的輸入和參數矩陣進行量化。

      需要注意的是,Groupwise量化與Channelwise量化對應著不同的權重預處理過程,這兩種方案必須在服務啟動時加以確定,不能在模型運行時動態切換。因此我們需要在服務部署之初就確定量化模式的選擇。

      混合精度量化 (Hybrid Quantization)

      混合精度量化是一種更靈活的量化策略,它允許模型的不同部分使用不同的位寬進行量化。在大模型量化的過程中,不同的線性層對量化的敏感程度不同。基于此,混合精度量化對所有線性層進行敏感程度分類,將敏感層回退到更高精度計算,而對非敏感層做低精度量化計算。 在量化前,通過隨機采樣生成校準集,并采集所有線性層的激活值,計算“四分位比例”統 計量。

      2.3.4 術語

      我們接下來看看術語。

      以W1A16為例:W1A16指的是一種特定的量化設置,這里的 "W1" 和 "A16" 分別代表權重矩陣和激活值的量化比特寬度。

      • "W1" 表示權重矩陣被量化到1-bit。這意味著模型中的權重只使用兩個可能的值(通常是-1和+1),這極大地減少了模型的存儲需求和計算復雜性。但這種極端的量化會導致信息損失,需要特別的設計和技術來保持模型性能。
      • "A16" 表示激活值保持16-bit的精度。激活值是神經網絡中層與層之間傳遞的數據,保持16比特的精度有助于減少量化引入的誤差,并幫助模型保持一定的計算精度。

      2.4 量化工作流程

      我們在前面介紹了校準。實際上,在實踐中將浮點模型轉為量化模型的方法有以下三種方法:

      1. data free:不使用校準集,傳統的方法直接將浮點參數轉化成量化數,使用上非常簡單,但是一般會帶來很大的精度損失,但是高通最新的論文 DFQ 不使用校準集也得到了很高的精度。
      2. calibration:基于校準集方案,通過輸入少量真實數據進行統計分析。
      3. finetune:基于訓練 finetune 的方案,將量化誤差在訓練時仿真建模,調整權重使其更適合量化。好處是能帶來更大的精度提升,缺點是要修改模型訓練代碼,開發周期較長。

      按量化工作階段的不同(壓縮模型的階段或者說量化應用的時間)來分類,校準可以分為如下三種:

      • 訓練中量化(QAT, Quantization-Aware-Training)。QAT 在模型訓練過程中加入偽量化算子,讓量化目標無縫地集成到模型的訓練過程中,然后使用訓練數據進行微調,讓模型在量化值的約束下進行調整和學習,通過訓練時統計輸入輸出的數據范圍來提升量化后模型的精度,適用于對模型精度要求較高的場景。
      • 訓練后量化(PTQ, Post-Training-Quantization)。PTQ 在模型訓練完成后對其參數進行量化,只需要少量校準數據進行校準,以計算裁剪范圍和縮放因子。PTQ的主要優勢在于其簡單性和高效性,無需對LLM架構進行修改或進行重新訓練。適用于追求高易用性和缺乏訓練資源的場景。但PTQ可能會在量化過程中引入一定程度的精度損失。
      • 量化感知微調(Quantization-Aware Fine-tuning,QAF)。QAF 在預訓練模型的微調期間應用量化。主要目標是確保經過微調的LLM在量化為較低位寬后仍保持性能。通過將量化感知整合到微調中,以在模型壓縮和保持性能之間取得平衡。

      因為QAF比較小眾,所以我們重點介紹QAT和PTQ。

      下圖是QAT和PTQ之間的比較。在 QAT 中,對預訓練模型進行量化,然后使用訓練數據進行微調,以調整參數并恢復準確性下降。在 PTQ 中,使用校準數據(例如,訓練數據的一個小子集)來校準預訓練模型,以計算裁剪范圍和縮放因子。然后,根據校準結果對模型進行量化。本質上 PTQ 就是在校準過程中,研究不同的metric來更好地選擇截斷上下界。

      在實際應用中,更為常用的是PTQ的方法,大部分芯片廠商自己的編譯器,已經集成了基礎的PTQ方法,并與算子融合圖優化等組合使用,對絕大部分模型能獲得精度與速度都令人滿意的結果。PTQ 還有一個額外的優點,那就是它可以應用于數據有限或未標記的情況。然而,與 QAT 相比,這通常會以較低的精度為代價,特別是對于低精度量化。另外,PTQ還有一個缺點是,量化并不考慮實際的訓練過程。

      2.4.1 PTQ

      PTQ涉及在訓練模型之后對模型的參數(包括權重和激活)進行量化。

      權重的量化可以在推理之前使用對稱量化或非對稱量化來執行,因為在大多數情況下,在推理期間參數是固定的,裁剪范圍可以事先靜態確認。但是,激活的量化需要推斷模型以獲取它們的潛在分布,因為每個輸入樣本的激活映射是不同的,我們事先不知道它們的范圍。

      所以這里又引出了激活量化的兩種形式,即按照是否推理時使用可以分為靜態/動態量化。靜態量化是在推理前預先計算量化參數,通過校準樣本輸入離線找到典型的激活統計信息。動態量化是在運行時使用統計信息來動態計算量化參數,通常更準確但需要較高的開銷來計算所需的統計信息。

      從架構設計的角度來看,靜態量化通過預計算的方式實現了最優的推理性能,這種方案在延遲穩定性和資源效率方面表現出色,特別適合邊緣計算和大規模服務器部署場景。而動態量化則通過運行時自適應機制提供了更大的靈活性,能夠更好地處理數據分布變化劇烈的場景,這在自然語言處理等領域具有獨特優勢。

      動態量化

      動態量化是一種在模型運行時進行量化的技術。它只對權重進行預先量化,對于激活值,則是在運行時動態計算量化參數,即在運行的時候動態計算每個激活的范圍。具體流程是:

      • 數據通過隱藏層后,其激活值被收集。

      • 然后使用這些激活值的分布來計算量化輸出所需的零點(z)和比例因子(s)值。

      • 每次數據通過新層時都會重復此過程。每一層都有其自己的zs 值,因此具有不同的量化方案。

      動態量化每次計算范圍開銷很大,不如靜態量化快,而且在某些硬件上也沒法使用。但是這種方式簡單靈活且效果也很好(精度更高),特別適用于那些輸入數據分布變化較大的場景。

      靜態量化

      靜態量化是在模型推理之前完成的,因此稱為"靜態"量化。這種方法就是在量化前預先計算激活的范圍值(z和s),為了找到這些值,需要使用一個代表性數據(校準數據集),將其提供給模型以收集激活值的分布情況。實際操作步驟如下:

      • 模型訓練完成后,在激活函數上放置觀察器來記錄激活值。
      • 使用校準數據集進行若干次前向傳播(大約使用幾百個樣本就足夠了),執行推理流程后統計每層激活值的數據分布并且得到相應的量化參數。
      • 在收集了這些值之后,就可以計算推理過程中執行量化所需的sz 值,然后作為參數的一部分存儲下來。
      • 在進行實際推理時,sz 值不會重新計算,而是全局使用,量化所有激活。因為它在校準過程中只用了一組和值。如果在實際推理時激活值的分布變化很大,就可能導致更高的量化誤差。
      小結

      通常,動態量化由于僅嘗試計算每個隱藏層的sz 值,因此可能更準確。但是這會大大增加計算時間,因為需要計算這些值。靜態量化的精度雖然較低,但由于已經知道用于量化的sz 值,因此速度更快,所以一般都會使用靜態量化。

      2.4.2 QAT

      有時候,一個訓練好的模型數值分布較差,各種PTQ策略都不能獲得很好的效果的時候,就需要采用QAT的方法,在訓練或微調中引入量化誤差,約束數值分布從而獲得較好的量化結果?;蛘咴谏俨糠痔厥獾哪P徒Y構場景,更低bit量化的量化需求情況下,就得求助于QAT方法。

      與訓練后量化(PTQ)在模型訓練完成之后進行量化不同,QAT是在訓練過程中學習量化過程(模擬量化),其利用偽量化算子將量化帶來的精度損失計入訓練誤差,使得優化器能在訓練過程中盡量減少量化誤差,得到更高的模型精度。

      QAT通常比PTQ更精確,因為量化過程已在訓練中被考慮。其工作原理如下:

      • 初始化:設置權重和激活值的范圍\(q_{min}\)\(q_{max}\)的初始值;
      • 構建模擬量化網絡:在需要量化的權重和激活值后插入偽量化算子;這是一個首先將權重量化為例如INT4,然后再反量化回FP32的過程。這個過程允許模型在訓練、損失計算和權重更新過程中考慮量化過程。QAT試圖探索損失中的“”極小值以最小化量化誤差,因為“”極小值往往會導致較大的量化誤差。在一個“”極小值中選擇一個不同的更新權重,其量化誤差將大大降低。
      • 量化訓練:重復執行以下步驟直到網絡收斂,計算量化網絡層的權重和激活值的范圍\(q_{min}\)\(q_{max}\),并根據該范圍將量化損失帶入到前向推理和后向參數更新的過程中;
      • 導出量化網絡:獲取\(q_{min}\)\(q_{max}\),并計算量化參數s和z;將量化參數代入量化公式中,轉換網絡中的權重為量化整數值;刪除偽量化算子,在量化網絡層前后分別插入量化和反量化算子。

      所以盡管PTQ在高精度(例如FP32)中有更低的損失,但QAT在低精度(例如INT4)中會獲得更低的損失。

      2.4.3 推薦流程

      論文“INTEGER QUANTIZATION FOR DEEP LEARNING INFERENCE: PRINCIPLES AND EMPIRICAL EVALUATION”給出了一個推薦的量化工作流,具體參見下面圖。

      2.5 加速原因

      量化模型如何實現加速?其原因大約為以下幾個方面:訪存加速、向量化運算加速、量化算子優化。

      2.5.1 訪存加速

      量化模型的顯存占用與量化bit數呈倍性關系(忽略量化參數的額外顯存),這一點對于訪存瓶頸的模型來說有極大的好處。現代的高性能運算芯片,對于乘加等并行計算有很強的優化,內存的讀寫反而成為了瓶頸。通過量化操作將浮點模型轉換為低bit,可以顯著地降低訪存耗時。需要注意的是,某些方案中,量化只針對權重,所以在實際推理時,還需要執行反量化操作獲得浮點的權重,再進行計算,所以只看計算量反而是有所增加的。但憑借訪存部分的速度提升,便能獲得可觀的模型整體推理加速。這里其實也體現了模型量化的另一個顯著優勢點:節省顯存。

      2.5.2 向量化運算加速

      在高性能CPU或GPU tensor core中,為了大規模運算,一般都會設計高效的向量化運算指令來實現并行計算。當向量化運算與模型量化相配合會有很好的效果。舉個例子,一個512-bit寄存器,可以同時處理16個32-bit的float數,如果將其量化為8-bit定點數,則同樣的資源可以同時處理64個數。

      2.5.3 量化算子優化

      我們以Cutlass 的FPA_INTB GEMM算子為例來學習。該算子實現了高效的LLM weight-only 量化,被廣泛使用。常見的GEMM算子,都是同等精度的tensor進行矩陣乘法,但在大模型量化領域,受限于量化模型精度,weight-only的量化反而更加常見。這就帶來一個問題,如何實現量化后的INT4/8 類型權重與float類型的激活之間的GEMM計算。Cutlass 將DeQuant操作與GEMM操作融合進一個算子,同時設計了高效的位操作DeQuant實現,能夠實現 26x 的throughput 加速。具體可以參考論文 Who Says Elephants Can't Run: Bringing Large Scale MoE Models into Cloud Scale Production .

      0xFF 參考

      NeurIPS 2024 Oral:用 DuQuant 實現 SOTA 4bit 量化 青稞

      壓縮神經網絡的藝術: MIT 韓松教授的兩篇經典論文解析 Yixin

      從Training Dynamics到Outlier——LLM模型訓練過程中的數值特性分析 Reiase

      【讀點論文】A Survey of Quantization Methods for Efficient Neural Network Inference 羞兒

      A Survey of Quantization Methods for Efficient Neural Network Inference

      https://www.armcvai.cn/2023-03-05/model-quantization.html

      模型量化技術綜述:揭示大型語言模型壓縮的前沿技術 [DeepHub IMBA](javascript:void(0)??

      大模型性能優化(一):量化從半精度開始講,弄懂fp32、fp16、bf16

      便捷的post training quantization方案: GPTQ

      【AI不惑境】模型量化技術原理及其發展現狀和展望 龍鵬-筆名言有三

      AWQ, Activation-aware Weight Quantization

      LLM.int8()

      SqueezeLLM

      SmoothQuant

      GPTQ

      大模型量化感知訓練開山之作:LLM-QAT 吃果凍不吐果凍皮

      ZeroQuant系列(v1, v2)

      LLM-QAT: Data-Free Quantization Aware Training for Large Language Models

      https://link.zhihu.com/?target=https%3A//github.com/facebookresearch/LLM-QAT)

      關于大模型推理的量化算法總結 孫培欽

      、王文廣萬字長文揭秘大模型量化的GPTQ方法:從OBS經OBQ到GPTQ,海森矩陣的魔力

      王文廣萬字長文揭秘大模型量化技術:探究原理,理解大模型高效推理最重要的技術

      akaihaoshuai:從0開始實現LLM:6、模型量化理論+代碼實戰(LLM-QAT/GPTQ/BitNet 1.58Bits/OneBit)
      akaihaoshuai:從0開始實現LLM:6.1、模型量化(AWQ/SqueezeLLM/Marlin)

      https://zhuanlan.zhihu.com/p/703513611

      AI大模型高效推理的技術綜述! 花哥 [AI大模型前沿](javascript:void(0)??

      Zirui Liu, Jiayi Yuan, Hongye Jin, Shaochen Zhong, Zhaozhuo Xu, Braverman, V., Beidi Chen, & Hu, X. (2023). KIVI : Plug-and-play 2bit KV Cache Quantization with Streaming Asymmetric Quantization.

      Databricks 博文: LLM Inference Performance Engineering: Best Practices

      Coleman Hooper, Sehoon Kim, Hiva Mohammadzadeh, Michael W. Mahoney, Yakun Sophia Shao, Kurt Keutzer, & Amir Gholami. (2024). KVQuant: Towards 10 Million Context Length LLM Inference with KV Cache Quantization.

      T. Dettmers, M. Lewis, Y. Belkada, and L. Zettlemoyer, (2022). LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale.

      A. Gholami, S. Kim, Z. Dong, Z. Yao, M. W. Mahoney, and K. Keutzer, (2021). A Survey of Quantization Methods for Efficient Neural Network Inference.

      KIVI: A Tuning-Free Asymmetric 2bit Quantization for kv Cache :https://arxiv.org/abs/2402.02750

      Xiao, Guangxuan, et al. “Smoothquant: Accurate and efficient post-training quantization for large language models.” International Conference on Machine Learning. PMLR, 2023.

      [2] Ashkboos, Saleh, et al. "Quarot: Outlier-free 4-bit inference in rotated llms." arXiv preprint arXiv:2404.00456 (2024).

      Sun, Mingjie, et al. "Massive Activations in Large Language Models." arXiv preprint arXiv:2402.17762 (2024).

      Liu, Ruikang, et al. "IntactKV: Improving Large Language Model Quantization by Keeping Pivot Tokens Intact."arXiv preprint arXiv:2403.01241(2024).

      [5] Liu, Zechun, et al. "SpinQuant--LLM quantization with learned rotations."arXiv preprint arXiv:2405.16406(2024).

      A Comprehensive Evaluation of Quantized Instruction-Tuned Large Language Models: An Experimental Analysis up to 405B

      [2411.02355] "Give Me BF16 or Give Me Death"? Accuracy-Performance Trade-Offs in LLM Quantization [1]

      Integer Quantization for Deep Learning Inference Principles and Empirical Evaluation

      深度學習Int8的部署推理原理和經驗驗證

      Quantization and training of neural networks for effificient integer-arithmetic-only inference

      Quantizing deep convolutional networks for effificient inference: A whitepaper

      Discovering low-precision networks close to full-precision networks for effificient embedded inference

      Pact: Parameterized clipping activation for quantized neural networks

      TensorFlow 模型優化:模型量化-張益新

      干貨:深度學習模型量化(低精度推理)大總結

      The Super Weight in Large Language Models

      2w字解析量化技術,全網最全的大模型量化技術解析 柏企閱文

      白話版Scaling Laws for Precision 解讀 賈斯丁不姓丁

      Efficient Deep Learning-學習筆記-4-Model Quantization 回溯的貓

      LLMs量化系列|LLMs Quantization Need What ? 回溯的貓

      LLMs量化系列|MiLo:如何利用LoRA補償MoE模型的量化損失 回溯的貓

      LLMs量化系列|LLM量化方法小結 回溯的貓

      我做模型量化的那些年 星月野

      [LLM量化系列] VQ之路:從AQLM、GPTVQ到VPTQ 進擊的Killua

      [LLM量化系列] PTQ量化經典研究解析 進擊的Killua

      AttnSink相關論文分享 金琴

      decoupleQ 2bit 量化技術介紹 行云流水

      最新發現:大規模值,注意力機制的關鍵密碼。ICML2025 AI修貓Prompt

      Massive Values in Self-Attention Modules are the Key to Contextual Knowledge Understanding

      ICML25研究發現:RoPE又立大功了! 一只小茄墩

      Robust Quantization

      OptiQuant-昇騰親和的DeepSeek模型量化技術

      posted @ 2025-05-24 14:47  羅西的思考  閱讀(1252)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲乱妇老熟女爽到高潮的片| 东京热高清无码精品| 麻豆成人精品国产免费| 国产精品久久久久影院老司| 男女啪啪高清无遮挡免费| 四虎国产精品永久入口| 国产亚洲视频在线播放香蕉| 网友偷拍视频一区二区三区| 无码人妻精品一区二区三区下载| 天堂8中文在线最新版在线| 一级做a爰片在线播放| 亚洲天堂成人一区二区三区 | 一区二区三区av天堂| 久久精品色一情一乱一伦| 老熟妇欲乱一区二区三区| 亚洲中文字幕无码一久久区| 国产成人无码AV片在线观看不卡 | 亚洲V天堂V手机在线| 精品国产欧美一区二区三区在线| 日本无人区一区二区三区| 日本无遮挡吸乳呻吟视频| 人人妻人人妻人人片色av| 久久精品免视看国产成人| 亚洲精品香蕉一区二区| 免费观看日本污污ww网站69| 亚洲精品区午夜亚洲精品区| 久久毛片少妇高潮| 一本久久a久久精品综合| 久久久无码精品国产一区| 国产福利片无码区在线观看| 中文字幕无码视频手机免费看 | 一区二区福利在线视频| 干老熟女干老穴干老女人| 草草线在成年免费视频2| 成人国产亚洲精品一区二区| 国产精品特级毛片一区二区三区| 国产麻豆精品一区一区三区| 无码人妻精品一区二区三区下载 | 日本精品不卡一二三区| 国产超碰无码最新上传| 粉嫩国产av一区二区三区|