越小越好: Q8-Chat,在英特爾至強 CPU 上體驗高效的生成式 AI

大語言模型 (LLM) 正在席卷整個機器學(xué)習(xí)世界。得益于其?transformer?架構(gòu),LLM 擁有從大量非結(jié)構(gòu)化數(shù)據(jù) (如文本、圖像、視頻或音頻) 中學(xué)習(xí)的不可思議的能力。它們在?多種任務(wù)類型?上表現(xiàn)非常出色,無論是文本分類之類的抽取任務(wù) (extractive task) 還是文本摘要和文生圖像之類的生成任務(wù) (generative task)。
顧名思義,LLM 是?大?模型,其通常擁有超過 100 億個參數(shù),有些甚至擁有超過 1000 億個參數(shù),如 BLOOM 模型。LLM 需要大量的算力才能滿足某些場景 (如搜索、對話式應(yīng)用等) 的低延遲需求。而大算力通常只有高端 GPU 才能提供,不幸的是,對于很多組織而言,相關(guān)成本可能高得令人望而卻步,因此它們很難在其應(yīng)用場景中用上最先進(jìn)的 LLM。
在本文中,我們將討論有助于減少 LLM 尺寸和推理延遲的優(yōu)化技術(shù),以使得它們可以在英特爾 CPU 上高效運行。
量化入門
LLM 通常使用 16 位浮點參數(shù) (即 FP16 或 BF16) 進(jìn)行訓(xùn)練。因此,存儲一個權(quán)重值或激活值需要 2 個字節(jié)的內(nèi)存。此外,浮點運算比整型運算更復(fù)雜、更慢,且需要額外的計算能力。
量化是一種模型壓縮技術(shù),旨在通過減少模型參數(shù)的值域來解決上述兩個問題。舉個例子,你可以將模型量化為較低的精度,如 8 位整型 (INT8),以縮小它們的位寬并用更簡單、更快的整型運算代替復(fù)雜的浮點運算。
簡而言之,量化將模型參數(shù)縮放到一個更小的值域。一旦成功,它會將你的模型縮小至少 2 倍,而不會對模型精度產(chǎn)生任何影響。
你可以進(jìn)行訓(xùn)時量化,即量化感知訓(xùn)練 (QAT),這個方法通常精度更高。如果你需要對已經(jīng)訓(xùn)成的模型進(jìn)行量化,則可以使用訓(xùn)后量化 (PTQ),它會更快一些,需要的算力也更小。
市面上有不少量化工具。例如,PyTorch 內(nèi)置了對 量化 的支持。你還可以使用 Hugging Face Optimum-Intel 庫,其中包含面向開發(fā)人員的 QAT 和 PTQ API。
量化 LLM
最近,有研究 [1][2] 表明目前的量化技術(shù)不適用于 LLM。LLM 中有一個特別的現(xiàn)象,即在每層及每個詞向量中都能觀察到某些特定的激活通道的幅度異常,即某些通道的激活值的幅度比其他通道更大。舉個例子,下圖來自于 OPT-13B 模型,你可以看到在所有詞向量中,其中一個通道的激活值比其他所有通道的大得多。這種現(xiàn)象在每個 transformer 層中都存在。

圖源: SmoothQuant 論文
迄今為止,最好的激活量化技術(shù)是逐詞量化,而逐詞量化會導(dǎo)致要么離群值 (outlier) 被截斷或要么幅度小的激活值出現(xiàn)下溢,它們都會顯著降低模型質(zhì)量。而量化感知訓(xùn)練又需要額外的訓(xùn)練,由于缺乏計算資源和數(shù)據(jù),這在大多數(shù)情況下是不切實際的。
SmoothQuant [3][4] 作為一種新的量化技術(shù)可以解決這個問題。其通過對權(quán)重和激活進(jìn)行聯(lián)合數(shù)學(xué)變換,以增加權(quán)重中離群值和非離群值之間的比率為代價降低激活中離群值和非離群值之間的比率,從而行平滑之實。該變換使 transformer 模型的各層變得“量化友好”,并在不損害模型質(zhì)量的情況下使得 8 位量化重新成為可能。因此,SmoothQuant 可以幫助生成更小、更快的模型,而這些模型能夠在英特爾 CPU 平臺上運行良好。

圖源: SmoothQuant 論文
現(xiàn)在,我們看看 SmoothQuant 在流行的 LLM 上效果如何。
使用 SmoothQuant 量化 LLM
我們在英特爾的合作伙伴使用 SmoothQuant-O3 量化了幾個 LLM,分別是: OPT 2.7B、6.7B [5],LLaMA 7B [6],Alpaca 7B [7],Vicuna 7B [8],BloomZ 7.1B [9] 以及 MPT-7B-chat [10]。他們還使用 EleutherAI 的語言模型評估工具 對量化模型的準(zhǔn)確性進(jìn)行了評估。
下表總結(jié)了他們的發(fā)現(xiàn)。第二列展示了量化后性能反而得到提升的任務(wù)數(shù)。第三列展示了量化后各個任務(wù)平均性能退化的均值 (*?負(fù)值表示量化后模型的平均性能提高了)。你可以在文末找到詳細(xì)結(jié)果。

如你所見,OPT 模型非常適合 SmoothQuant 量化。模型比預(yù)訓(xùn)練的 16 位模型約小 2 倍。大多數(shù)指標(biāo)都會有所改善,而那些沒有改善的指標(biāo)僅有輕微的降低。
對于 LLaMA 7B 和 BloomZ 7.1B,情況則好壞參半。模型被壓縮了約 2 倍,大約一半的任務(wù)的指標(biāo)有所改進(jìn)。但同樣,另一半的指標(biāo)僅受到輕微影響,僅有一個任務(wù)的相對退化超過了 3%。
使用較小模型的明顯好處是推理延遲得到了顯著的降低。該 視頻 演示了在一個 32 核心的單路英特爾 Sapphire Rapids CPU 上使用 MPT-7B-chat 模型以 batch size 1 實時生成文本的效果。
在這個例子中,我們問模型: “?What is the role of Hugging Face in democratizing NLP??”。程序會向模型發(fā)送以下提示: “?A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user’s questions. USER: What is the role of Hugging Face in democratizing NLP? ASSISTANT:?”

這個例子展示了 8 位量化可以在第 4 代至強處理器上獲得額外的延遲增益,從而使每個詞的生成時間非常短。這種性能水平無疑使得在 CPU 平臺上運行 LLM 成為可能,從而為客戶提供比以往任何時候都更大的 IT 靈活性和更好的性價比。
在至強 CPU 上體驗聊天應(yīng)用
HuggingFace 的首席執(zhí)行官 Clement 最近表示: “專注于訓(xùn)練和運行成本更低的小尺寸、垂域模型,會使更多的公司會收益?!?Alpaca、BloomZ 以及 Vicuna 等小模型的興起,為企業(yè)在生產(chǎn)中降低微調(diào)和推理成本的創(chuàng)造了新機會。如上文我們展示的,高質(zhì)量的量化為英特爾 CPU 平臺帶來了高質(zhì)量的聊天體驗,而無需龐大的 LLM 和復(fù)雜的 AI 加速器。
我們與英特爾一起在 Spaces 中創(chuàng)建了一個很有意思的新應(yīng)用演示,名為 Q8-Chat (發(fā)音為?Cute chat
)。Q8-Chat 提供了類似于 ChatGPT 的聊天體驗,而僅需一個有 32 核心的單路英特爾 Sapphire Rapids CPU 即可 (batch size 為 1)。
Space 體驗地址:https://intel-q8-chat.hf.space
下一步
我們正致力于將 Intel Neural Compressor 集成入 Hugging Face Optimum Intel,從而使得 Optimum Intel 能夠利用這一新量化技術(shù)。一旦完成,你只需幾行代碼就可以復(fù)現(xiàn)我們的結(jié)果。
敬請關(guān)注。
未來屬于 8 比特!
本文保證純純不含 ChatGPT。
致謝
本文系與來自英特爾實驗室的 Ofir Zafrir、Igor Margulis、Guy Boudoukh 和 Moshe Wasserblat 共同完成。特別感謝他們的寶貴意見及合作。
附錄: 詳細(xì)結(jié)果
負(fù)值表示量化后性能有所提高。




英文原文:?https://hf.co/blog/generative-ai-models-on-intel-cpu
原文作者: Julien Simon
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向為 transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
審校/排版: zhongdongy (阿東)