陳丹琦團隊新作:Llama-2上下文擴展至128k,10倍吞吐量僅需1/6內存
陳丹琦團隊剛剛發布了一種新的LLM上下文窗口擴展方法:
它僅用8k大小的token文檔進行訓練,就能將Llama-2窗口擴展至128k。
最重要的是,在這個過程中,只需要原來1/6的內存,模型就獲得了10倍吞吐量。
除此之外,它還能大大降低訓練成本:
用該方法對7B大小的羊駝2進行改造,只需要一塊A100就能搞定。
團隊表示:
希望這個方法有用、好用,為未來的LLM們提供廉價又有效的長上下文能力。
目前,模型和代碼都已在HuggingFace和GitHub上發布。
只需添加兩個組件
這個方法名叫CEPE,全稱“并行編碼上下文擴展(Context Expansion with Parallel Encoding)”。
作為輕量級框架,它可用于擴展任何預訓練和指令微調模型的上下文窗口。
對于任何預訓練的僅解碼器語言模型,CEPE通過添加兩個小組件來實現擴展:
一個是小型編碼器,用于對長上下文進行塊編碼;
一個是交叉注意力模塊,插入到解碼器的每一層,用于關注編碼器表示。
完整架構如下:
在這個示意圖中,編碼器模型并行編碼上下文的3個額外塊,并與最終隱藏表示進行連接,然后作為解碼器交叉注意力層的輸入。
在此,交叉注意力層主要關注解碼器模型中自注意力層和前饋層之間的編碼器表示。
通過仔細選擇無需標記的訓練數據,CEPE就幫助模型具備了長上下文能力,并且也擅長文檔檢索。
作者介紹,這樣的CEPE主要包含3大優勢:
(1)長度可泛化
因為它不受位置編碼的約束,相反,它的上下文是分段編碼的,每一段都有自己的位置編碼。
(2)效率高
使用小型編碼器和并行編碼來處理上下文可以降低計算成本。
同時,由于交叉注意力僅關注編碼器最后一層的表示,而僅使用解碼器的語言模型則需要緩存每個層每個token的鍵-值對,所以對比起來,CEPE需要的內存大大減少。
(3)降低訓練成本
與完全微調方法不同,CEPE只調整編碼器和交叉注意力,同時保持大型解碼器模型凍結。
作者介紹,通過將7B解碼器擴充為具有400M編碼器和交叉注意力層的模型(總計14億參數),用一塊80GB的A100 GPU就可以完成。
困惑度持續降低
團隊將CEPE應用于Llama-2,并在200億 token的RedPajama過濾版本上進行訓練(僅為Llama-2預訓練預算的1%)。
首先,與LLAMA2-32K和YARN-64K這兩種完全微調的模型相比,CEPE在所有數據集上都實現了更低或相當的困惑度,同時具有更低的內存使用率和更高的吞吐量。
在將上下文提升到128k時(遠超其8k訓練長度),CEPE的困惑度更是持續保持降低,同時保持低內存狀態。
相比之下,Llama-2-32K和YARN-64K不僅不能推廣到其訓練長度之外,還伴隨著內存成本顯著增加。
其次,檢索能力增強。
如下表所示:
通過使用檢索到的上下文,CEPE可以有效改善模型困惑度,性能優于RePlug。
值得注意的是,即使讓段落k=50 (訓練是60),CEPE仍會繼續改善困惑度。
這表明CEPE可以很好地轉移到檢索增強設置,而全上下文解碼器模型在這個能力上卻退化了。
第三,開放域問答能力顯著超越。
如下圖所示,CEPE在所有數據集和段落k參數上都大幅優于其他模型,且不像別的模型那樣,k值越來越大之后性能明顯下降。
這也表明,CEPE對大量冗余或不相關的段落并不敏感。
所以總結一下就是,與大多數其他解決辦法相比,CEPE在上述所有任務上都能以低得多的內存和計算成本勝出。
最后,作者在這些基礎上,提出了專門用于指令調優模型的CEPE-Distilled (CEPED)。
它僅使用未標記的數據來擴展模型的上下文窗口,通過輔助KL散度損失將原始指令調整模型的行為提煉為新架構,由此無需管理昂貴的長上下文指令跟蹤數據。
最終,CEPED可以在保留指令理解能力的同時,擴展Llama-2的上下文窗口,提高模型長文本性能。
團隊介紹
CEPE一共3位作者。
一作為顏和光(Howard Yen),普林斯頓大學計算機科學專業碩士生在讀。
二作為高天宇,同校博士生在讀,清華本科畢業。
他們都是通訊作者陳丹琦的學生。
論文原文:https://arxiv.org/abs/2402.16617
參考鏈接:https://twitter.com/HowardYen1/status/1762474556101661158