天天看點

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

作者:量子位

夢晨 發自 凹非寺

量子位 | 公衆号 QbitAI

堂堂開源之王Llama 3,原版上下文視窗居然隻有……8k,讓到嘴邊的一句“真香”又咽回去了。

在32k起步,100k尋常的今天,這是故意要給開源社群留做貢獻的空間嗎?

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

開源社群當然不會放過這個機會:

現在隻需58行代碼,任何Llama 3 70b的微調版本都能自動擴充到1048k(一百萬)上下文。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

背後是一個LoRA,從擴充好上下文的Llama 3 70B Instruct微調版本中提取出來,檔案隻有800mb。

接下來使用Mergekit,就可以與其他同架構模型一起運作或直接合并到模型中。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

所使用的1048k上下文微調版本,剛剛在流行的大海撈針測試中達到全綠(100%準确率)的成績。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

不得不說,開源的進步速度是指數級的。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

1048k上下文LoRA怎麼煉成的

首先1048k上下文版Llama 3微調模型來自Gradient AI,一個企業AI解決方案初創公司。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

而對應的LoRA來自開發者Eric Hartford,通過比較微調模型與原版的差異,提取出參數的變化。

他先制作了524k上下文版,随後又更新了1048k版本。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

首先,Gradient團隊先在原版Llama 3 70B Instruct的基礎上繼續訓練,得到Llama-3-70B-Instruct-Gradient-1048k。

具體方法如下:

  • 調整位置編碼:用NTK-aware插值初始化RoPE theta的最佳排程,進行優化,防止擴充長度後丢失高頻資訊
  • 漸進式訓練:使用UC伯克利Pieter Abbeel團隊提出的Blockwise RingAttention方法擴充模型的上下文長度

值得注意的是,團隊通過自定義網絡拓撲在Ring Attention之上分層并行化,更好地利用大型GPU叢集來應對裝置之間傳遞許多KV blocks帶來的網絡瓶頸。

最終使模型的訓練速度提高了33倍。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

長文字檢索性能評估中,隻在最難的版本中,當“針”藏在文本中間部分時容易出錯。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用
58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

有了擴充好上下文的微調模型之後,使用開源工具Mergekit比較微調模型和基礎模型,提取參數的差異成為LoRA。

同樣使用Mergekit,就可以把提取好的LoRA合并到其他同架構模型中了。

合并代碼也由Eric Hartford開源在GitHub上,隻有58行。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

目前尚不清楚這種LoRA合并是否适用于在中文上微調的Llama 3。

不過可以看到,中文開發者社群已經關注到了這一進展。

58行代碼把Llama 3擴充到100萬上下文,任何微調版都适用

524k版本LoRA:

https://huggingface.co/cognitivecomputations/Llama-3-70B-Gradient-524k-adapter

1048k版本LoRA:

https://huggingface.co/cognitivecomputations/Llama-3-70B-Gradient-1048k-adapter

合并代碼:

https://gist.github.com/ehartford/731e3f7079db234fa1b79a01e09859ac

參考連結:

[1]https://twitter.com/erhartford/status/1786887884211138784

— 完 —

量子位 QbitAI · 頭條号簽約

關注我們,第一時間獲知前沿科技動态

繼續閱讀