>在筆記本電腦上運行自己的chatgpt:llm量化指南
>>曾經夢想直接在筆記本電腦上運行自己的chatgpt? 得益於大語言模型(LLMS)的進步,這已成為現實。 關鍵是量化 - 一種技術,它縮小了這些龐大的模型,以適合消費者硬件,而性能損失最少(完成正確!)。本指南解釋了量化,其方法,並向您展示瞭如何使用擁抱Face的Quanto庫以兩個簡單的步驟來量化模型。 使用DataCamp Datalab。
> LLMS的不斷增長
LLM的複雜性爆炸了。 GPT-1(2018)有910億個參數; GPT-2(2019),15億; GPT-3(2020),高達1750億; GPT-4擁有超過1萬億。這種巨大的增長會產生記憶瓶頸,阻礙訓練和推理,並限制可及性。 量化通過降低模型的大小而在保留性能的同時解決這一問題。
量化是一種模型壓縮技術,可降低模型的權重和激活的精度。 這涉及將數據從較高精確的類型(例如32位浮點)轉換為較低精確的類型(例如8位整數)。 較少的位意味著一個較小的模型,消耗較少的內存,存儲和能量。
考慮圖像壓縮:高分辨率圖像被壓縮以供網絡使用,減少大小和加載時間以一些細節為代價。 同樣,量化LLM可以減少計算需求,從而使其能夠在功能較低的硬件上運行。
>更快的Web加載的圖像壓縮。
量化引入了噪聲(量化誤差),但研究重點是最大程度地減少以維持性能。 。
>
>示例:重量矩陣(左)及其量化版本(右)。
原始矩陣和量化矩陣之間的差異是量化誤差。
量化誤差矩陣。
在實踐中,量化涉及更改數據類型(降低)。 例如,從float32(每個參數4個字節)轉換為INT8(每個參數1個字節)可顯著降低內存使用量。
>>大腦浮點(BF16)和降低
由Google開發的BF16> BF16在Float32的動態範圍和Float16的效率之間提供了平衡。降低(從較高精確到較低精確的數據類型)降低速度,但會導致數據丟失和錯誤傳播,尤其是數據類型較小。
量化類型存在幾種量化類型:
>
示例:權重矩陣的線性量化。
>去量化和量化誤差。
塊量化:在較小的塊中量化權重,更有效地處理非均勻分佈。
> 權重與激活量化:量化可以應用於權重(靜態)和激活(動態)。 激活量化更為複雜。
>培訓後量化(PTQ)與量化感知訓練(QAT):
某些方法需要校準 - 對數據集的推斷以優化量化參數。 技術包括百分比校準和平均/標準偏差校準。 諸如Qlora之類的方法避免校準。
量化的工具
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "EleutherAI/pythia-410m" model = AutoModelForCausalLM.from_pretrained(model_name, low_cpu_mem_usage=True) tokenizer = AutoTokenizer.from_pretrained(model_name)
quantize()
轉換模型。 from quanto import quantize, freeze quantize(model, weights=torch.int8, activations=None)
freeze()
將量化應用於權重。 freeze(model)
compute_module_sizes()
是一個自定義函數;有關實現的Datacamp Datalab)。
結論
量化使LLMS更容易訪問和高效。 通過了解其技術並使用擁抱Face Quanto之類的工具,您可以在功能較小的硬件上運行強大的模型。 對於較大的模型,請考慮升級您的資源。
>llm量化常見問題解答
quantize()
>
calibration()
model_name
以上是大型語言模型(LLMS)的量化:有效降低AI模型大小的詳細內容。更多資訊請關注PHP中文網其他相關文章!