隻要兩行代碼 +11 個小時微調,就能把大模型 4k 的窗口長度提高到 32k。
規模上,最長可以擴展到 10 萬 token,一口氣就能讀完一本小說。
賈佳亞韓松聯合團隊提出的這個基于 LoRA 的全新大模型微調方法,登上了 GitHub 熱榜。
這種方式叫做 LongLoRA,由來自香港中文大學和 MIT 的全華人團隊聯合出品。
在一台 8 個 A100 組成的單機上,增大窗口長度的速度比全量微調快十到二十倍。
網友看了之後不禁表示,這個效率實在是令人印象深刻:
那麽,用 LongLoRA 微調之後,模型會有什麽樣的變化呢?
一口氣讀完一部小說
研究團隊的實驗當中使用的模型是 Llama 2。
經過 LongLoRA 方法微調之後,Llama 2-7B 的窗口長度最高可提升到 10 萬 token。
實測發現,微調後的模型可以一口氣讀完一部小說,然後回答各種問題。
比如總結一下大劉在《三體》第三部中體現的中心思想,比總結内容還高出了一個層次。
模型給出的答案是與外星文明首次接觸的危險性、星際旅行之困難與人類文明之脆弱,以及團結協作的重要性等内容。
的确每條在原著中都有所體現,而且也比較全面了。
除了對整部作品進行概括提煉,局部内容當然也可以詢問。
小說中的角色也能對答如流,比如《西遊記》中孫悟空是怎麽開花成長的。
模型告訴我們,孫悟空很有智慧,但又有一顆頑皮的心,在伴随唐僧取經的過程中走向了成熟。
這次的總結依舊是很到位。
而且不僅是單個角色,不同人物之間複雜的關系也能了如指掌。
提問的方式可以簡單粗暴些,直接要求描述這本書(《哈利波特》)中的人物關系。
模型以哈利 · 波特爲中心,介紹了他的朋友韋斯萊、赫敏,敵人馬爾福,以及鄧布利多教授等人物。
除了看小說,LongLoRA 微調後的 Llama 還可以讀論文,生産力一下子就提高了(喜)。
無論是整體概括還是局部詢問,微調後的模型都能準确地給出答案:
△中文部分爲谷歌機翻
爲了從宏觀上把握模型的表現,研究團隊用了如下數據集進行了測試:
PG19:來自書籍的長篇文檔數據集,用來測試語言建模效果。
Proof-pile:來自 arXiv 的數學論文數據集,用來測試語言建模效果。
LongQA:作者自行構建的長序列問答數據集,用于有監督的微調。
LongChat:第三方構建的長對話理解數據集,用來測試長序列叙述理解效果。
結果顯示,LongLoRA 在 PG19 和 Proof-pile 上的困惑度與全量微調接近。
在問答數據集上,LongLoRA 微調出的模型表現也很優異,長文本理解方面更是達到了 SOTA 水平。
當然,LongLoRA 的意義不僅在于提高了窗口長度,關鍵在于用更少的消耗提高了窗口長度。
以 7B 參數量的 Llama-2 爲例,如果使用全量微調,從 4k 提升到 32k,在一台 8 個 A100 的單機上需要五天。
而改用 LongLoRA 方式,則隻用 11.3 小時就能完成,連半天都不到,效率提升近十倍。
如果提升到 65k,全量微調所需時間将超過 1000 小時,LongLoRA 卻隻用 52.4 小時。
那麽 LongLoRA 又是怎麽做到的呢?
" 大而化小 " 降低計算量
LongLoRA 建立在 LoRA 的基礎之上,引入了一種稱爲 " 移位短注意力 "(shift short attention)的機制。
這種機制隻需要兩行代碼就能實現:
Transformer 架構的核心是自注意力(Self-attention)計算。
短注意力就是将訓練文本劃分爲多個組,使自注意力計算在每個組内分别進行,從而達到降低運算量的目的。
而在這一過程中注意力頭也被進行了分組,通過注意力頭的位移,就實現了組間的信息交互。
劃分出的每個組之間有重疊部分,确保了數據可以在全文中流通。
這樣一來,每次計算都隻需要對組内的 token 進行操作,運算量大大降低。
除了對輸入進行分割之外,LongLoRA 相比于 Lora 還可以微調 embedding 層和 normalization 層。
這兩項内容占的參數量很小,以 Llama 2-7B 爲例,embedding 層隻占 1.94%,normalization 層更是不到十萬分之四。
消融實驗結果表明,除了核心的 Attention 層,這兩個占比很小的部分也起到了重要作用。
除了核心的短注意力機制,研究團隊引入了 DeepSpeed 和 FlashAttention 方式,進一步降低了訓練消耗。
目前,LongLoRA 微調過後不同參數量和窗口長度的 Llama 2 已經開源,感興趣的話可以到 GitHub 頁面中查看。
論文地址:
https://arxiv.org/abs/2309.12307
GitHub 項目頁:
https://github.com/dvlab-research/LongLoRA