今天小編分享的科學經驗:復旦邱錫鵬新作:單機微調650億參數大模型,業内人士:對大模型普及意義重大,歡迎閱讀。
單台機器,就能微調全參數羊駝大模型!
這一令開源黨狂喜的最新成果,來自復旦邱錫鵬團隊。
具體而言,研究人員提出了名為LOMO(低内存優化)的新優化器,并在配備 8 卡 RTX 3090(24GB 内存)的單台伺服器上,成功微調 65B LLaMA。
論文一經發布,就引發了不少讨論——
在 GPT-4 掀起狂潮之後,人們在驚嘆于大語言模型能力的同時,正在越來越多地思考模型控制權的問題。
有業内人士對此感到十分興奮:
對于大模型普及來說,單機微調 LLaMA 65B 具有非常重要的意義!
我曾夢想每個人都至少可以微調 Chinchilla(700 億參數,DeepMind 出品)這種規模和質量的模型,現在復旦做到了這一點。
論文的主要貢獻 LOMO(Low-Memory Optimization)優化器,想要解決的是有限資源條件下,大模型全參數微調的難題。
研究人員指出,在訓練大語言模型的過程中,優化器狀态占用了大部分内存。比如 Adam,就會把中間狀态存儲下來,而這些狀态的大小能達到參數大小的 2 倍。
因此,復旦團隊的優化思路是這樣的:
第一步,從算法角度重新思考優化器的功能。 由于 SGD(随機梯度下降)不存儲任何中間狀态,因此這是一個很好的替代方案。問題在于,SGD 中梯度計算和參數更新是分開執行的,仍可能會導致梯度張量過大,内存使用率高。
于是,研究人員提出了 LOMO,将梯度計算和參數更新合二為一,避免存儲任何梯度張量,以減少内存占用量。
為了穩定 LOMO 的混合精度訓練,研究人員還采取了以下步驟。
梯度歸一化:将梯度應用于模型參數之前,對梯度進行歸一化。
損失縮放:在計算梯度之前,用損失函數乘以縮放系數。
在訓練期間将某些計算轉換為全精度
研究人員分析了使用不同優化器的訓練過程中,模型狀态和激活的内存使用情況。
可以看到,與 AdamW 相比,LOMO 的内存占用從 102.20GB 降低到了 14.58GB。
吞吐量測試的結果則顯示,在配備 8 塊 RTX 3090 顯卡的伺服器上,LOMO 可以 hold 得住 LLaMA 65B 的訓練。
研究人員提到,使用這樣的伺服器配置和 LOMO,在 1000 個樣本上進行訓練,每個樣本包含 512 個 token,訓練時間大約為 3.6 小時。
研究人員還在 SuperGLUE 基準測試上,比較了 LOMO 與 Zero-shot、LoRA 的下遊任務性能。
結果顯示,在 6 個數據集和不同大小模型中,LOMO 的表現均好于 Zero-shot。在大部分實驗中,LOMO 的表現優于 LoRA。
當然啦,盡管在大模型訓練中,8 塊 3090 并不是高配,但對于普通人來說,還是有點不親民。
有不少網友就吐槽說:8 塊 3090 還能叫資源有限嗎?
不過,也有人認為,這仍然是個好消息。
雖然不太可能擁有這樣的伺服器配置,但租這個配置的機器也不算貴。
另一邊,研究人員也坦承了論文的局限性,并表示将進一步降低訓練大語言模型的資源門檻。
目前,使用 LOMO 訓練時,大部分内存被參數占用。因此,一個有前景的方向是探索參數量化技術,這可能會大大減少内存使用。
LOMO 一作呂凱,是論文通訊作者、復旦大學計算機科學技術學院邱錫鵬教授門下的碩士生。本科同樣畢業于復旦大學。
此前,復旦開源的MOSS大模型,正是來自邱錫鵬團隊。
論文地址:
https://arxiv.org/abs/2306.09782
項目地址:
https://github.com/OpenLMLab/LOMO