大語言模型的生產部署存在兩個主要的挑戰,一個是需要大量的參數,一個是需要處理非常長的用于表示上下文信息的輸入序列。Hugging Face 基于他們提供大模型服務的經驗分享了一些克服這些障礙的技術。
Patrick von Platen 在文中介紹的 Hugging Face 研究的三種技術是降低數值精度、使用一種叫作 Flash Attention 的注意力算法,以及使用專門的推理架構。
大語言模型需要大量的 VRAM 來加載,從幾十 (bigcode/starcoder) 到數百 GB (Llama、Bloom、GPT3)。第一個優化手段是從 float32 切換到 bfloat16 精度:
現在幾乎所有的模型都是基于 bfloat16 訓練的,如果你的 GPU 支持 bfloat16,就沒有理由基于全 float32 精度運行模型。float32 不會給出比訓練模型所使用的精度更好的推理結果。
這可以使總體內存消耗減少一半,但可惜的是,在許多情況下仍然需要很大的內存。一種更激進的方法是將模型權重量化為 8 位或 4 位,這已經被證明不會導致顯著的性能下降。
量化對于文本生成來說特別有效,因為我們所關心的是選擇最有可能的下一個標記集合,而不是下一個標記 Logit 分布的確切值。
這將進一步減少所需的內存,使得在只有 16GB VRAM 的 GPU 上運行較小的模型成為可能,盡管代價是推理時間稍長。
von Platen 寫道,使用 Flash Attention 是另一相關鍵的優化,它是大語言模型用來理解輸入標記上下文關系的自注意力層的一種算法,有可能打破輸入標記數量的二次增長。
因為該算法太過復雜,無法在這里描述,但可以這么說,它利用了 softmax 規范化統計數據和一些數學手段,在只需要隨輸入標記線性增長的內存的情況下提供相同的輸出。推理性能也得益于算法使用了更快的 SRAM 而不是更慢的 GPU VRAM。
在實踐中,目前絕對沒有理由不使用 Flash Attention。該算法在數學層面給出了相同的輸出,并且速度更快,內存效率更高。
Here recent research can help to make the right choice with two components that quickly become bottlenecks, says von Platen,positional embeddingsand thekey-value cache.
在生產環境中部署大語言模型的第三項優化措施是選擇正確的架構,讓它們能夠有效地處理長文本輸入。von Platen 寫道,最近的研究有助于我們如何對兩個很快成為瓶頸的組件做出選擇——一個是 _ 位置嵌入 (positional embeddings)_,一個是 _ 鍵值緩存 _。
位置嵌入通過將每個標記的位置編碼為數字表示來幫助語言大模型理解序列順序。對于需要處理大型文本輸入任務的大語言模型,應該使用 RoPE 和 ALiBi 等相對位置嵌入技術進行訓練。
RoPE 和 ALiBi 位置編碼都可以外推到訓練期間未遇到過的輸入長度,而事實證明,與 RoPE 相比,外推對于開箱即用的 ALiBi 的效果要好得多。
目前的許多大語言模型中已經在使用這兩種算法。
鍵值緩存可以作為對對話上下文進行編碼的一種方法。鍵值緩存在發生每個新交互時增加一個元素,這比為每個請求編碼 / 解碼上下文的方法要有效得多。von Platen 詳細介紹了兩類鍵值緩存,即 Multi-Query-Attention (MQA) 和 Grouped-Query-Attention(GQA) 。
von Platen 的文章所涵蓋的內容不只有本文所概述的這些,他的文章中還提供了實際的例子來證明他的觀點,所以請不要錯過他的文章。
-
gpu
+關注
關注
28文章
4753瀏覽量
129057 -
語言模型
+關注
關注
0文章
530瀏覽量
10297 -
大模型
+關注
關注
2文章
2488瀏覽量
2855
原文標題:Hugging Face 大語言模型優化技術
文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論