大模型的量化

lightsong發表於2024-07-16

大模型的量化

https://developer.baidu.com/article/details/3211764

一、大模型量化的基本概念

大模型量化,簡單來說,就是將深度學習模型的浮點運算轉換為整型運算的過程。在預設情況下,模型使用32位浮點數進行所有預測計算,這使得模型變得非常大。透過量化技術,我們可以將這些浮點數轉換為更低精度的整數,從而顯著減少模型的儲存空間和計算時間。需要注意的是,量化過程中可能會損失一定的精度,但通常這種損失在可接受範圍內。

二、大模型量化的技術原理

大模型量化的核心思想是利用數學變換和編碼技術,將浮點數的儲存和運算轉換為整數的儲存和運算。具體來說,量化過程包括兩個主要步驟:前向量化和反向量化。

前向量化是將浮點數轉換為整數的過程。在這個過程中,我們將浮點數的範圍對映到一個整數範圍內,並將浮點數轉換為對應的整數。這個對映過程通常是透過一個縮放因子和一個偏移量來實現的。縮放因子用於調整整數的範圍,使其能夠覆蓋浮點數的範圍;偏移量則用於將浮點數的零點對映到整數的零點。

反向量化是將整數轉換回浮點數的過程。這個過程是前向量化的逆操作,用於在推理過程中將整數還原為浮點數,以便進行後續的運算。

三、大模型量化的實際應用

大模型量化技術在實際應用中具有廣泛的用途。首先,它可以顯著減少模型的儲存需求,使得在資源有限的裝置上部署大型模型成為可能。例如,在手機、嵌入式裝置等資源受限的環境中,透過量化技術可以使得深度學習模型的應用變得更加容易和高效。

其次,大模型量化技術還可以加快模型的推理速度。由於整型運算比浮點運算更快,因此量化後的模型在推理過程中可以獲得更高的執行速度。這對於實時性要求較高的應用來說非常重要,如語音識別影像識別等。

https://github.com/yuanzhoulvpi2017/zero_nlp/wiki/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%9A%84%E9%87%8F%E5%8C%96%E4%B9%8B%E8%B7%AF%E2%80%94%E2%80%94transformers%E6%98%AF%E5%A6%82%E4%BD%95%E7%BB%99%E6%A8%A1%E5%9E%8B%E6%B7%BB%E5%8A%A0%E4%B8%8A%E9%87%8F%E5%8C%96%E5%8A%9F%E8%83%BD%E7%9A%84%E3%80%90transformers%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E3%80%91

背景

  1. 現在 nlp 模型,動不動就 7b、13b 的,有的甚至更大,如果直接使用 bfloat16 載入推理、訓練,需要太大的視訊記憶體了。
  2. 於是現在大家都在用 int4、int8 對這種 100b 以上的模型、對 60b 以上的模型做量化。量化之後的模型,雖然效果會變差,但是好像效果還不錯。
  3. 有的人,甚至結合 lora,做了 qlora。比如這個專案https://github.com/artidoro/qlora,現在很火~
  4. 現在,在最新的 transformers 包裡面,已經整合了相關的方法,你可以使用 int4、int8 對任何 transformers 家族的模型做量化。而且就傳遞幾個引數即可。很簡單。
  5. 現在的 int4、int8 方法實現,包括 transformers 整合的量化方法,基本上都是基於 bitsandbytes 包的。

問題

  1. 我就是很好奇,transformers 包,到底怎麼做的,就加個引數,就可以量化模型了。
  2. 這個量化,到底是怎麼量化的。懶得看論文了,就看程式碼吧。

相關文章