蘋果捲開源大模型,公開程式碼、權重、資料集、訓練全過程,OpenELM亮相

机器之心發表於2024-04-25

蘋果釋出基於開源訓練和推理框架的高效語言模型族 OpenELM。

要說 ChatGPT 拉開了大模型競賽的序幕,那麼 Meta 開源 Llama 系列模型則掀起了開源領域的熱潮。在這當中,蘋果似乎掀起的水花不是很大。

不過,蘋果最新放出的論文,我們看到其在開源領域做出的貢獻。

近日,蘋果釋出了 OpenELM,共四種變體(引數量分別為 270M、450M、1.1B 和 3B),這是一系列基於公開資料集進行預訓練和微調的模型。OpenELM 的核心在於逐層縮放,即 OpenELM 中的每個 Transformer 層都有不同的配置(例如,頭數和前饋網路維度),導致模型每層的引數數量不同,從而實現了更有效的跨層引數分配。

值得一提的是,蘋果這次釋出了完整的框架,包括資料準備、訓練、微調和評估程式,以及多個預訓練的 checkpoint 和訓練日誌,以促進開源研究。

圖片

  • 論文地址:https://arxiv.org/pdf/2404.14619.pdf

  • 專案地址:https://github.com/apple/corenet

  • 論文標題:OpenELM: An Efficient Language Model Family with Open-source Training and Inference Framework

結果顯示,OpenELM 的效能優於使用公開資料集進行預訓練的現有開源 LLM(表 1)。例如,具有 11 億個引數的 OpenELM 效能優於 OLMo。

圖片

方法介紹

OpenELM 架構

OpenELM 採用只有解碼器的 transformer 架構,並遵循以下方式:

(1)不在任何全連線(也稱為線性)層中使用可學習的偏差引數

(2)使用 RMSNorm 進行預標準化,旋轉位置嵌入(ROPE)用於編碼位置資訊;

(3)使用分組查詢注意力(GQA)代替多頭注意力(MHA);

(4)用 SwiGLU FFN 替換前饋網路(FFN);

(5) 使用 flash 注意力來計算可縮放的點積注意力;

(6) 使用與 LLama 相同的分詞器(tokenizer)。

一般來講,LLM 中每個 transformer 層使用相同的配置,從而實現跨層引數的統一分配。與這些模型不同的是,OpenELM 中的每個 Transformer 層都有不同的配置(例如,頭數和前饋網路維度),導致模型每層的引數數量不同。這使得 OpenELM 能夠更好地利用可用的引數預算來實現更高的精度。蘋果使用逐層縮放(layer-wise scaling)來實現跨層引數的非均勻分配。

逐層縮放:標準 Transformer 層由多頭注意力(MHA)和前饋網路(FFN)組成。針對 Transformer 層引數分配不均勻的問題,蘋果對各個 Transformer 層的注意力頭數和 FFN 乘法器進行了調整。

蘋果是這樣做的。設引數分配均勻的標準 Transformer 模型有 N 層 transformer,假設每層輸入的維數為 d_model。MHA 有 n_h 個頭,每個頭的維度為圖片,FFN 的隱藏維度為:

圖片

蘋果引入引數 α 和 β 兩個超引數來分別縮放每層注意力頭的數量 n_h 和 m。對於第 i 層,n_h 和 m 計算為:

預訓練資料

對於預訓練,蘋果使用公共資料集。具體來說,他們的預訓練資料集包含 RefinedWeb、deduplicated PILE、RedPajama 的子集和 Dolma v1.6 的子集,總計約 1.8 萬億個 token 。如下表所示。

圖片

訓練細節

蘋果使用自家開源的 CoreNet 庫(以前稱為 CVNets ,專門用於訓練深度神經網路)訓練 OpenELM 變體,訓練過程迭代了 35 萬次。最終訓練出了 OpenELM 四種變體(引數量為 270M、450M、1.1B 和 3B)。

實驗

本文評估了 OpenELM 在零樣本和少樣本設定下的效能,如表 3 所示。研究者將 OpenELM 與公開的 LLM 進行了比較,其中包括 PyThia 、Cerebras-GPT 、TinyLlama 、OpenLM 、MobiLlama 和 OLMo 。與本文工作較為相關的是 MobiLlama 和 OLMo。這些模型都是在類似的資料集上訓練的,具有相似或更多的預訓練 token。

圖片

圖 1 繪製了 OpenELM 在 7 個標準零樣本任務上隨訓練迭代次數的準確率。可以發現,在大多數任務中,隨著訓練持續時間的延長,準確率在總體上會有所提高。此外,透過平均最後五個檢查點(每 5000 次迭代收集一次)得到的檢查點,在準確率上與經過 350k 次迭代後得到的最終檢查點相當,或略有提高。這種改進很可能是由於權重平均降低了噪聲。因此,在表 4 的主要評估、表 5 的指令調優實驗和表 6 的引數效率調優實驗中,研究者使用了平均檢查點。

圖片

表 4 中的結果橫跨各種評估框架,突出了 OpenELM 相對於現有方法的有效性。表 4 中的結果跨越了不同的評估框架,凸顯了 OpenELM 相對於現有方法的有效性。例如,與擁有 12 億個引數的 OLMo 相比,擁有 11 億個引數的 OpenELM 變體的準確率分別提高了 1.28%(表 4a)、2.36%(表 4b)和 1.72%(表 4c)。值得注意的是,OpenELM 達成了這樣的準確率,但是使用的預訓練資料比 OLMo 少的多。

圖片

如圖 5 所示,在不同的評估框架中,指令微調始終能將 OpenELM 的平均準確率提高 1-2%。

圖片

引數高效微調(PEFT)結果。研究者使用常識推理的訓練和評估設定。這個設定為不同方法提供了 8 個多項選擇資料集的 170k 訓練樣本進行 PEFT 研究,包括 LoRA 和 DoRA。研究者將 OpenELM 與這些方法整合在一起,並使用 8 個 NVIDIA H100 GPU 對所生成的模型進行了三個訓練週期的微調。如表 6 所示,PEFT 方法可以應用於 OpenELM。在給定的 CommonSense 推理資料集上,LoRA 和 DoRA 的平均準確率相似。

圖片

表 7a 和 7b 分別展示了本項工作在 GPU 和 MacBook Pro 上的基準測試結果。儘管 OpenELM 在相似引數數量下準確度更高,但其速度比 OLMo 慢。雖然這項研究的主要關注點是可復現性而不是推理效能,但研究者還是進行了全面的效能分析來判斷工作的瓶頸所在。

分析表明,OpenELM 的處理時間的相當部分可歸因於研究者對 RMSNorm 的簡單實現(見表 8)。詳細來說,也就是簡單的 RMSNorm 實現導致許多單獨的核心啟動,每個都處理少量輸入,而不是像 LayerNorm 那樣啟動單個融合核心。透過用 Apex 的 RMSNorm 替換簡單的 RMSNorm,研究者發現 OpenELM 的吞吐量顯著提高。然而,與使用最佳化 LayerNorm 的模型相比,仍有顯著的效能差距,部分原因是(1)OpenELM 有 113 層 RMSNorm,而 OLMo 有 33 層 LayerNorm;(2)Apex 的 RMSNorm 沒有為小輸入最佳化。為了進一步說明由 RMSNorm 引起的效能下降,蘋果用 RMSNorm 替換了 OLMo 中的 LayerNorm,觀察到生成吞吐量顯著下降。在未來的工作中,研究者計劃探索最佳化策略以進一步提高 OpenELM 的推理效率。

圖片

圖片

更多詳細內容,請閱讀原論文。

相關文章