Packing Analysis:LLM 樣本 Padding 與 Packing 的對(duì)比
一、背景
我們之前已經(jīng)分享過(guò)幾篇關(guān)于 Sample Packing 相關(guān)的文章,也提到了其中的性能優(yōu)化問(wèn)題。最近今天又看到一篇新的論文,這里進(jìn)行簡(jiǎn)單介紹。
對(duì)應(yīng)的論文為:[2410.08081] Packing Analysis: Packing Is More Appropriate for Large Models or Datasets in Supervised Fine-tuning
相關(guān)工作可以參考我們之前的文章:
- Sample Packing:長(zhǎng)序列 LLM 訓(xùn)練的 Attention 問(wèn)題及優(yōu)化
- Sample Packing 綜述:LLM 效果與效率的 Tradeoff
- Binary Block Masking:加快稀疏 Attention 的一種新方法?
二、摘要
Sample Packing 技術(shù)最初應(yīng)用于大模型預(yù)訓(xùn)練階段,旨在通過(guò)合并不同的訓(xùn)練樣本來(lái)適應(yīng)模型的最大輸入長(zhǎng)度,從而最大化硬件利用率。盡管在預(yù)訓(xùn)練中已展示了有效性,但對(duì)監(jiān)督微調(diào)(SFT)階段還缺乏全面分析:
- Packing 能否在保持性能的同時(shí)有效提升訓(xùn)練效率。
- 適合采用 Packing 技術(shù)進(jìn)行微調(diào)的模型和數(shù)據(jù)集的規(guī)模。
- Packing 無(wú)關(guān)或者相關(guān)的訓(xùn)練樣本是否可能導(dǎo)致模型過(guò)度忽略或依賴上下文。
本文中,作者對(duì)使用 Padding 和 Packing 的 SFT 方案進(jìn)行了對(duì)比,涵蓋從 69K 到 1.2M 的 SFT 數(shù)據(jù)集,以及 8B 和 70B 規(guī)模的模型。作者首次提供了關(guān)于 Padding 和 Packing 優(yōu)缺點(diǎn)的全面分析,以及在各種訓(xùn)練場(chǎng)景中實(shí)施 Packing 的考量。作者的分析涉及多個(gè)基準(zhǔn),包括知識(shí)、推理和編碼,以及基于 GPT 的評(píng)估、訓(xùn)練效率等。此外,作者還開(kāi)源了相應(yīng)微調(diào)和評(píng)估代碼,并提供了在不同規(guī)模數(shù)據(jù)集上微調(diào)的 Checkpoint,旨在推動(dòng)未來(lái) Packing 技術(shù)的研究。
PS:個(gè)人感覺(jué)這篇文章還有很多可以改善的地方,比如說(shuō):
- 沒(méi)有考慮 Document Level Mask 的問(wèn)題。
- 沒(méi)有考慮長(zhǎng)序列場(chǎng)景。
- 可以提供更多的實(shí)驗(yàn)證明其觀點(diǎn):“特殊 Token [EOS] 可以有效地幫助模型區(qū)分兩個(gè)相鄰的訓(xùn)練樣本”。
三、方法
3.1 方法概述
如下圖 Figure 1 所示為對(duì)應(yīng)的 Padding 和 Packing 方案,其中 SFT 數(shù)據(jù)集包含單輪對(duì)話(一個(gè)樣本只包含一個(gè)輸入和對(duì)應(yīng)的一個(gè)輸出)和多輪對(duì)話(包含多個(gè)輸入-輸出對(duì))。
- Padding:
每個(gè)序列中只包含一個(gè)樣本,如果不超過(guò) Max Sequence Length 則補(bǔ)充[PAD] 占位 Token,到滿足 Max Sequence Length。
如果是多輪對(duì)話,每個(gè)輸入-輸出對(duì)之后也要添加[EOS] 結(jié)束 Token。
- Greedy Packing:
- 首先,將多輪對(duì)話的多個(gè)輸入-輸出對(duì)合并成單個(gè)樣本,用 [EOS] 間隔。
- 然后,將所有的數(shù)據(jù)按照長(zhǎng)度排序。
- 最后,從最長(zhǎng)的樣本開(kāi)始 Packing,將連續(xù)的幾個(gè)樣本打包,如果加上某個(gè)樣本后總長(zhǎng)度超過(guò) Max Sequence Length,則放棄這個(gè)樣本,補(bǔ)充 [PAD] Token 并開(kāi)始一個(gè)新的序列。
- Random Packing:
- 首先,將所有訓(xùn)練樣本拼接為一個(gè)單一的序列,同樣會(huì)使用 [EOS] Token 間隔。
- 然后,按照 Max Sequence Length 將序列截?cái)唷?
3.2 優(yōu)劣
Padding 方案的優(yōu)勢(shì)和劣勢(shì):
- 優(yōu)勢(shì):
實(shí)現(xiàn)簡(jiǎn)單,任何框架都比較容易實(shí)現(xiàn)。
簡(jiǎn)單的 Padding 和截?cái)嗫梢员苊庾冮L(zhǎng)序列引申出的各種計(jì)算錯(cuò)誤或性能問(wèn)題。
- 劣勢(shì):
- 如果 Padding 太多,會(huì)導(dǎo)致計(jì)算量明顯增加,并且對(duì)訓(xùn)練沒(méi)有任何幫助。(PS:其實(shí)很多框架都支持變長(zhǎng)計(jì)算,比如 FlashAttention,識(shí)別出 Padding 的 Token 可以不參與計(jì)算)
Random Packing 方案的優(yōu)勢(shì)和劣勢(shì):
- 優(yōu)勢(shì):
可以最大限度減少未使用的空間(Token),從而提升計(jì)算效率。
可以提供更廣泛的上下文組合,從而提供更多元化的場(chǎng)景,有可能幫助提升模型的泛化能力。(也就是說(shuō)不會(huì)使用 Document Level 的 Mask?)
- 劣勢(shì):
- 可能導(dǎo)致兩個(gè)不同或相似的樣本串聯(lián),可能導(dǎo)致模型過(guò)度忽略或依賴上下文。不過(guò)作者提到這并不會(huì)導(dǎo)致模型過(guò)度關(guān)注 Packing 的上下文,主要是兩個(gè)原因:
Random Packing 導(dǎo)致兩個(gè)相似訓(xùn)練樣本打包在一起的概率非常低。
特殊 Token [EOS] 可以有效地幫助模型區(qū)分兩個(gè)相鄰的訓(xùn)練樣本。(PS:是否可以通過(guò)驗(yàn)證 Attention Score 來(lái)判斷是否真的如此?)
- 這種方法也可能導(dǎo)致單個(gè)對(duì)話中的不同輪次被劃分到了不同的子序列中,比如 Figure 1 中的 (Instruction 1 + Answer 1) 和 (Instruction 2 + Answer 2) 被劃分到不同序列中
Greedy Packing 方案的優(yōu)勢(shì)和劣勢(shì):
- 優(yōu)勢(shì):
可以降低將一個(gè)多輪對(duì)話樣本劃分到不同序列的風(fēng)險(xiǎn)。
- 劣勢(shì):
- 需要對(duì)整個(gè)樣本排序,會(huì)打亂樣本分布的隨機(jī)性,也會(huì)影響一個(gè) Batch 中樣本的多樣性。
PS:上述 Greedy Packing 方案也有可以改進(jìn)的地方,作者的 Packing 方法中會(huì)優(yōu)先使用當(dāng)前更長(zhǎng)的序列來(lái)拼接,如果超過(guò) Max Sequence Length 就直接結(jié)束,這也就導(dǎo)致更多的短上下文樣本無(wú)法利用這一部分空間。比如說(shuō),Max Sequence Length 為 2048,當(dāng)前已拼接的序列長(zhǎng)度為 1800,需要 Padding 248 個(gè) Token,假設(shè)下一個(gè)樣本的長(zhǎng)度為 300,則會(huì)直接結(jié)束;然而,當(dāng)前還有大量長(zhǎng)度小于 248 的 Token 可以被拼接。
四、實(shí)驗(yàn)
4.1 實(shí)驗(yàn)配置
包含 4 個(gè) SFT 數(shù)據(jù)集:
- WildChat(GPT-4):WildChat 是用戶訪問(wèn) ChatGPT 或者 GPT-4 生成的數(shù)據(jù)。這里作者只選擇了 GPT-4 相關(guān)數(shù)據(jù),包含 69K 個(gè)真實(shí)世界的數(shù)據(jù)。
- TULU:包含 326K 個(gè)對(duì)話數(shù)據(jù)集,也是來(lái)自真實(shí)世界。
- WildChat(Full):來(lái)自 WildChat 的全量 652K 數(shù)據(jù)。
- Open-Source 1M:總共包含 1.2M 對(duì)話數(shù)據(jù),來(lái)自多個(gè)數(shù)據(jù)源。如下圖 Table 1 所示。?
訓(xùn)練配置如下圖 Table 2 所示,主要是基于 LLaMA-3-8B 和 LLaMA-3-70B 微調(diào),訓(xùn)練是在 4 臺(tái)機(jī)器,每臺(tái)集群 8 個(gè) A800 GPU:
4.2 實(shí)驗(yàn)結(jié)果
如下圖 Table 3 和 Table 4 所示,作者使用各種模型和數(shù)據(jù)集驗(yàn)證,Packing 的平均性能會(huì)比 Padding 的更好。比如 LLaMA-3-70B 上微調(diào) WildChat(GPT-4)數(shù)據(jù)集,Padding 對(duì)應(yīng)平均性能為 61.96,而 Packing 對(duì)應(yīng)為 65.97(Random Packing)。
PS:上述的結(jié)論有點(diǎn)奇怪,智譜 AI 在 [2401.18058] LongAlign: A Recipe for Long Context Alignment of Large Language Models 中的實(shí)驗(yàn)表明,短序列任務(wù)上的差異并不明顯,而在長(zhǎng)序列上甚至 Packing 會(huì)導(dǎo)致指標(biāo)下降。當(dāng)然,LongAlign 使用了 Document Level 的 Mask,實(shí)際上 Meta LLaMA 等論文也建議在微調(diào)時(shí)使用 Document Level Mask。
如下圖 Table 5 所示,使用 Packing 的方案確實(shí)可以有效提升訓(xùn)練速度,可以實(shí)現(xiàn) 3x 左右的加速,主要是 Packing 后 Padding 少了很多,訓(xùn)練的 Step 數(shù)少了很多:
上述結(jié)論也與智譜 AI 在 [2401.18058] LongAlign: A Recipe for Long Context Alignment of Large Language Models 中的結(jié)論類似,如下圖 Figure 5 所示:
五、參考鏈接
- https://arxiv.org/abs/2410.08081
- https://arxiv.org/abs/2401.18058
本文轉(zhuǎn)載自 ??AI閑談??,作者: AI閑談
