🚀 8位權重量化的EleutherAI/gpt - j - 6b模型
本項目提供了一個修改後的EleutherAI的GPT - J模型(具有60億參數)版本,讓你能夠在Colab或等效的桌面GPU(如單張1080Ti)上進行模型生成和微調。
🚀 快速開始
注意:此模型已被Younes Belkada和Tim Dettmers開發的transformers
中的load_in_8bit=True
功能所取代。請參考此使用示例。
這個舊版模型是為transformers v4.15.0和PyTorch 1.11構建的。更高版本可能可以運行,但不提供支持。
運行模型的方法: 
✨ 主要特性
-
量化優勢:原始的[GPT - J](https://huggingface.co/EleutherAI/gpt - j - 6B/tree/main)僅32位浮點參數就需要22GB以上的內存,還未考慮梯度和優化器的內存佔用。即使將所有參數轉換為16位,大多數單GPU設置(除了A6000和A100)仍然無法容納。而本項目通過以下技術,讓GPT - J能夠在約11GB內存的單GPU上使用和微調:
- 大權重張量使用動態8位量化,並在乘法時即時反量化。
- 使用梯度檢查點,每層僅存儲一個激活值,以30%的訓練速度為代價顯著減少內存使用。
- 結合LoRA和8位Adam進行可擴展的微調。
也就是說,所有大權重矩陣都以8位凍結,只訓練小的適配器和可選的一維張量(層歸一化尺度、偏置)。
-
模型質量:從技術上講,8位量化會影響模型質量,但在實際應用中影響可以忽略不計。[此筆記本測量了維基文本測試困惑度](https://nbviewer.org/urls/huggingface.co/hivemind/gpt - j - 6B - 8bit/raw/main/check_perplexity.ipynb),結果與原始GPT - J幾乎無差異。量化模型甚至略好一些,但不具有統計學意義。
-
計算方式:本項目代碼與其他8位方法的不同之處在於,僅使用8位進行存儲,所有計算都在16位浮點或32位浮點下進行。因此,可以利用適合每個權重分佈的非線性量化,雖然這種非線性量化不會加速推理,但可以顯著降低誤差。
-
性能表現:檢查點和反量化會帶來一些開銷,但令人驚訝的是,這些開銷是可以接受的。根據GPU和批量大小,量化模型在使用梯度檢查點的基礎上,比原始模型慢1 - 10%(梯度檢查點本身會帶來30%的開銷)。這主要是因為bitsandbytes
的分塊量化在GPU上速度非常快。

📚 詳細文檔
如何微調模型?
建議從LoRA論文中的原始超參數開始。此外,還有一個技巧:反量化權重的開銷與批量大小無關。因此,批量大小越大,訓練效率越高。
在哪裡可以免費訓練模型?
可以在Colab上進行訓練,但如果分配到K80 GPU,最好切換到其他免費的GPU提供商,如 [Kaggle](https://towardsdatascience.com/amazon - sagemaker - studio - lab - a - great - alternative - to - google - colab - 7194de6ef69a)、[AWS SageMaker](https://towardsdatascience.com/amazon - sagemaker - studio - lab - a - great - alternative - to - google - colab - 7194de6ef69a) 或 [Paperspace](https://docs.paperspace.com/gradient/more/instance - types/free - instances)。例如,[這個筆記本在Kaggle上運行](https://www.kaggle.com/justheuristic/dmazur - converted),使用了更強大的P100實例。
能否將此技術應用於其他模型?
該模型是使用[此筆記本](https://nbviewer.org/urls/huggingface.co/hivemind/gpt - j - 6B - 8bit/raw/main/convert - gpt - j.ipynb)進行轉換的,也可以將其改編用於其他模型類型。但請記住,一些模型會用自定義的替代層替換線性層和嵌入層,這些層需要自己的BNBWhateverWithAdapters
。
📄 許可證
本項目採用Apache 2.0許可證。
屬性 |
詳情 |
模型類型 |
8位權重量化的因果語言模型(Causal LM) |
訓練數據 |
The Pile |
框架標籤 |
PyTorch |