介紹 Tinyllama,乙個開源的小型語言模型。 發布所有相關資訊,包括預訓練、所有中間模型檢查點以及資料處理步驟的詳細資訊。 憑藉其緊湊的架構和令人滿意的效能,Tinyllama 支援移動裝置上的終端使用者應用程式,並作為測試與語言模型相關的各種創新想法的輕量級平台。 **借鑑從這個開放式實時階段專案中獲得的豐富經驗,目的是開發 Tinyllama 的改進版本,使其具有各種能力,以提高其在各種任務中的效能和多功能性。 **進一步的調查結果和詳細結果將記錄在今後的報告中。
在大規模文字語料庫上預先訓練的大型語言模型 (LLM) 已在各種任務中證明了它們的有效性。 一些實驗研究已經證明了 LLM 中的湧現能力,這些能力可能僅在具有足夠大參數量的模型中才明顯,例如少樣本提示和邏輯鏈推理。 其他研究則側重於對LLM的縮放行為進行建模。 Hoffmann 等人(2022 年)表明,為了訓練計算最優模型,模型大小和訓練資料量應以相同的速度增加。 這為選擇模型大小和分配具有固定計算預算的訓練資料量提供了指導。
儘管這些努力有利於大型模型,但在較大的資料集上訓練較小模型的潛力仍未得到探索。 Touvron et al. (2023a) 強調了推理預算的重要性,而不是僅僅關注訓練計算優化的語言模型。 針對特定推理約束的推理優化語言模型旨在實現最佳效能。 這是通過使用比縮放定律建議的更多令牌來訓練模型來實現的。 Touvron 等人(2023a)證明,在更多資料上訓練的較小模型可以匹配甚至優於較大的模型。 此外,Thaddée (2023) 認為,當較小的模型訓練較長時間時,現有的縮放定律可能不準確。
受到這些新發現的啟發,本文著眼於探索代幣數量何時遠遠超過縮放定律 ()。scaling law) 在較小模型表現良好時建議。具體來說,使用大約 3 萬億個代幣,乙個使用者擁有 11b引數Transformer解碼器模型。 這是第一次嘗試使用如此大量的資料來訓練具有 1b 引數的模型。 遵循與 Llama 2 相同的架構和分詞器,該模型被命名為 Tinylama。
以下是預訓練 tinyllama 的方法。 首先,詳細介紹了預訓練的語料庫和資料抽樣方法。 接下來,詳細闡述了預訓練過程中使用的模型架構和超引數。
預訓練資料
主要目標是使預訓練過程高效且可重複。 自然語言資料和資料的混合用於預訓練tinyllama,其中自然語言資料用於slimpajama,資料用於starcoderdata。 Llama Tokenizer 用於處理資料。
SlimPajama:乙個用於訓練語言模型的大型開源語料庫,基於 RedPajama。 原始的 RedPajama 語料庫是一項開源研究工作,旨在複製超過 1 個2 萬億個 LLAMA 預訓練資料代幣。 Slimpajama 是通過清潔和重複資料刪除從 redpajama 衍生而來的。 StarCoderData:收集此資料集是為了訓練 StarCoder,這是乙個強大的開源大型語言模型。 它包含 86 種程式語言的約 2500 億個代幣。 除了 **,它還包括 github 問題和涉及自然語言的文字 - **對。 為了避免資料重複,刪除了 SlimPajama 中的 GitHub 子集,並且僅從 StarCoderData 中取樣了 ** 資料。 將這兩個語料庫組合在一起後,總共有近似值950 億個代幣用於預訓練。Tinyllama 在這些標記物上接受了大約 3 次訓練時代正如 Muennighoff 等人(2023 年)所觀察到的那樣,與使用唯一資料相比,在相同資料上訓練多達 4 個 epoch 的效能幾乎沒有下降。 在訓練過程中,對自然語言資料進行取樣以實現:自然語言資料和 ** 資料之間的比例為 7:3
建築
表 1:模型架構詳細資訊。
它採用了與 Llama 2 類似的模型架構。 所使用的 Transformer 架構的具體細節如下:
位置嵌入:使用繩索(旋轉位置嵌入將位置資訊注入模型。 ROPE是最近被許多主流大語言模型廣泛採用的方法,如PALM、LLAMA、QWEN等。 rmsnorm:在預歸一化中,輸入在每個 Transformer 子層之前歸一化,以實現更穩定的訓練。 此外,RMSNORM作為歸一化技術,可以提高訓練效率。 Swiglu:它沒有使用傳統的 Relu 非線性,而是遵循 Llama 2,將 Swish 和門控線性單元(稱為 Swiglu)組合在一起,作為 Tinyllama 中的啟用函式。 分組查詢注意力:為了減少記憶體頻寬開銷並加速推理,在模型中使用了分組查詢注意力。 有 32 個查詢注意頭,並使用 4 個鍵值注意頭組。 使用此技巧,模型可以在多個標頭之間共享鍵和值表示形式,而不會損失太多效能。 速度優化
完全分段資料並行性 (FSDP):在訓練期間,該庫整合了 FSDP1,以有效利用多 GPU 和多節點設定。 這種整合對於跨多個計算節點擴充套件訓練過程至關重要,從而顯著提高了訓練速度和效率。 Flash Attention:另乙個關鍵改進是整合了 Flash Attention 2,這是一種優化的注意力機制。 該倉庫還提供收斂層歸一化、收斂交叉熵損失和收斂旋轉位置嵌入,它們在提高計算吞吐量方面發揮著關鍵作用。 Xformers:將 Xformers 倉庫中的融合 Swiglu 模組替換為原有的 Swiglu 模組,進一步提公升了 ** 庫的效率。 借助這些功能,可以減少記憶體占用,並使 11 億引數模型適合 40GB GPU RAM。 效能分析及與其他機型的比較
這些元素的組合將每個 A100-40G GPU 的訓練吞吐量提高到每秒 24,000 個令牌。 與其他模型(如 pythia-10 億和 mpt-13 億)相比,該庫表現出卓越的訓練速度。 例如,Tinyllama-11 億引數模型只需 3,456 個 A100 GPU 小時即可獲得 300 億個標記,而 Pythia 需要 4,830 小時,MPT 需要 7,920 小時。 這顯示了優化的有效性,以及在大規模模型訓練中節省大量時間和資源的潛力。
圖 1:庫與 Pythia 和 MPT 的訓練速度比較。
在 lit-gpt3 上構建框架。 在LLAMA 2之後,在預訓練階段採用了自動回歸語言建模目標。 與 Llama 2 的設定一致,使用 ADAMW 優化器。 此外,使用余弦學習率計畫。 使用 2,000 個步驟來促進優化學習。 將批處理大小設定為 2,000,000 個令牌。 將權重衰減設定為 01、使用10 梯度剪裁閾值來調整梯度值。 Tinyllama 在專案中接受了 16 個 A100-40G GPU 的預訓練。
Tinyllama 的效能優於現有類似規模的開源語言模型。 具體來說,Tinyllama 在各種下游任務中的表現優於 OP-13B 和 Pythia 14B。 Tinyllama 是開源的,旨在提高語言模型研究人員的可訪問性。
Tinyllama 在各種常識推理和解決問題的任務上進行了評估,並與幾個具有相似模型引數的現有開源語言模型進行了比較。
基線模型
主要關注的是具有約 10 億個引數的解碼器架構的語言模型。 具體來說,將 Tinyllama 與 OPT-13B、Pythia-10 億和 Pythia-14 億進行比較。
常識推理任務
要了解 Tinylama 的常識推理能力,請考慮以下任務:Hellaswag、OpenBookQA、WinoGrande、Arc-Easy 和 Arc-Challenge、BoolQ 和 Piqa。 採用語言模型評估工具來評估這些模型。 按照以前的實踐,這些模型以零樣本方式在這些任務上進行了評估。 結果如表2所示。 值得注意的是,tinyllama 在許多任務上的表現優於基準模型,並取得了最高的平均分。
表 2:常識推理任務的零樣本表現。
訓練期間的表現演變
它在 Common Sense Inference 基準測試中的準確性是在 Tinyllama 的預訓練過程中跟蹤的,如圖 2 所示。 總體而言,隨著計算資源的增加,Tinyllama 的效能有所提高,在大多數基準測試中都優於 Pythia 的 -14 億精度。
圖 2:預訓練期間常識推理基準效能的演變。 Pythia-1 也包含在圖中4b的效能用於比較。
問題解決評估
Tinyllama 解決問題的能力也使用 Instructeval 基準進行了評估。 基準測試包括以下任務:
大規模多工語言理解 (MMLU):此任務用於衡量模型對世界的了解和在各種主題上解決問題的能力。 我們在 5 個樣本的設定中評估了這些模型。 BIG-Bench Hard (BBH):這是 BIG-Bench 基準測試(Srivast**a 等人,2022 年)中 23 個困難任務的子集,旨在衡量語言模型遵循複雜指令的能力。 這些模型在 3 個樣本的設定中進行評估。 段落離散推理(下降):此閱讀理解任務用於衡量模型的數學推理能力。 我們在 3 樣本設定中評估了這些模型。 humaneval:此任務用於衡量模型的程式設計能力。 這些模型在零樣本的基礎上進行評估。 評估結果如表3所示。 據觀察,與現有模型相比,Tinyllama 表現出更好的解決問題的能力。
表 3:Instructeval 基準測試中解決問題任務的效能。
*標題:Tinyllama:開源小型語言模型* 鏈結: