怎么在自己做的網(wǎng)站上發(fā)視頻站長(zhǎng)工具星空傳媒
簡(jiǎn)介
Baichuan 2是多語(yǔ)言大模型,目前開(kāi)源了70億和130億參數(shù)規(guī)模的模型。在公開(kāi)基準(zhǔn)如MMLU、CMMLU、GSM8K和HumanEval上的評(píng)測(cè),Baichuan 2達(dá)到或超過(guò)了其他同類開(kāi)源模型,并在醫(yī)學(xué)和法律等垂直領(lǐng)域表現(xiàn)優(yōu)異。此外,官方還發(fā)布所有預(yù)訓(xùn)練模型的checkpoints,幫助研究社區(qū)更好地理解Baichuan 2的訓(xùn)練過(guò)程??偨Y(jié)下Baichuan 2特點(diǎn):
- 多語(yǔ)言支持:Baichuan 2專注于訓(xùn)練在多種語(yǔ)言中表現(xiàn)優(yōu)異的模型,包括不僅限于英文。這使得Baichuan 2在處理各種語(yǔ)言的任務(wù)時(shí)能夠取得顯著的性能提升。
- 廣泛的訓(xùn)練數(shù)據(jù):Baichuan 2 是從頭開(kāi)始訓(xùn)練的,訓(xùn)練數(shù)據(jù)約有2.6萬(wàn)億個(gè)token。相對(duì)于以往的模型,Baichuan 2 提供了更豐富的數(shù)據(jù)資源,從而能夠更好地支持多語(yǔ)言的開(kāi)發(fā)和應(yīng)用。
- 垂直領(lǐng)域優(yōu)化:Baichuan 2不僅在通用任務(wù)上表現(xiàn)出色,還在特定領(lǐng)域(如醫(yī)學(xué)和法律)的任務(wù)中展現(xiàn)了卓越的性能。這為特定領(lǐng)域的應(yīng)用提供了強(qiáng)有力的支持。
GitHub:
https://github.com/baichuan-inc/Baichuan2
技術(shù)報(bào)告:
https://cdn.baichuan-ai.com/paper/Baichuan2-technical-report.pdf
預(yù)訓(xùn)練
Baichuan 2 base模型(即基座模型)和其他模型的對(duì)比評(píng)測(cè)結(jié)果如下,可以看出多數(shù)評(píng)測(cè)數(shù)據(jù)上Baichuan 2遙遙領(lǐng)先!
預(yù)訓(xùn)練數(shù)據(jù)集
在構(gòu)建數(shù)據(jù)的時(shí)候,本著追求數(shù)據(jù)的全面性和代表性,從多個(gè)來(lái)源收集數(shù)據(jù),包括一般的互聯(lián)網(wǎng)網(wǎng)頁(yè),書(shū)籍,研究論文,代碼庫(kù)等。訓(xùn)練語(yǔ)料庫(kù)的組成如Figure 1所示:
可以看出,數(shù)據(jù)類型比較廣泛,Top3數(shù)據(jù)類型是科技、商業(yè)和娛樂(lè)。
數(shù)據(jù)處理:主要關(guān)注數(shù)據(jù)的數(shù)量和質(zhì)量。
- 數(shù)量:構(gòu)建了一個(gè)大規(guī)模的聚類和去重系統(tǒng),支持LSH(局部敏感哈希)類和embedding類形式的數(shù)據(jù)特征。該系統(tǒng)能夠在幾小時(shí)內(nèi)對(duì)萬(wàn)億級(jí)的數(shù)據(jù)進(jìn)行聚類和去重,從而保證數(shù)據(jù)的高效利用?;诰垲惣夹g(shù)對(duì)文檔、段落和句子進(jìn)行去重和評(píng)分。這些分?jǐn)?shù)用于后續(xù)預(yù)訓(xùn)練步驟的數(shù)據(jù)抽樣。不同數(shù)據(jù)處理階段的訓(xùn)練數(shù)據(jù)規(guī)模如Figure 2 所示:
- 質(zhì)量:句子級(jí)別質(zhì)量過(guò)濾,過(guò)濾暴力、色情、種族歧視、仇恨言論等有害內(nèi)容。
模型架構(gòu)
在模型架構(gòu)層面,主要還是基于Transformer,但是做了如下修改:
Tokenizer
分詞器Tokenizer需要平衡兩個(gè)關(guān)鍵因素:高壓縮率以實(shí)現(xiàn)高效推理,以及適當(dāng)大小的詞匯表以確保每個(gè)詞嵌入被充分訓(xùn)練。為此,Baichuan 2的詞匯表大小從 Baichuan 1的 64,000 擴(kuò)展到 125,696。
在Tokenizer方面使用來(lái)自 SentencePiece 的字節(jié)對(duì)編碼(BPE)。需要補(bǔ)充說(shuō)明的是,不對(duì)輸入文本使用任何規(guī)范化,也不像 Baichuan 1那樣添加虛擬前綴。此外,將數(shù)值分割成單個(gè)數(shù)字以更好地編碼數(shù)值數(shù)據(jù)。為了處理包含額外空格的代碼數(shù)據(jù),在Tokenizer中添加了僅包含空格的token。字符覆蓋率設(shè)置為0.9999,稀有字符回退到 UTF-8 字節(jié)。將token到最大長(zhǎng)度設(shè)置為32,以兼容較長(zhǎng)的中文短語(yǔ)。Baichuan 2 Tokenizer的訓(xùn)練數(shù)據(jù)來(lái)自 Baichuan 2 預(yù)訓(xùn)練語(yǔ)料庫(kù),為了提高覆蓋范圍采樣更多代碼示例和學(xué)術(shù)論文數(shù)據(jù)。Table 2展示了Baichuan 2分詞器與其他分詞器的詳細(xì)比較。
位置編碼。在 Baichuan 1 的基礎(chǔ)上,為 Baichuan 2-7B 采用 Rotary Positional Embedding(RoPE),為 Baichuan 2-13B 采用 ALiBi。ALiBi是一種較新的位置編碼技術(shù),可以改善外推性能。然而,大多數(shù)開(kāi)源模型使用 RoPE 作為位置embeddings,像 Flash Attention這樣的注意力機(jī)制優(yōu)化方法。這是因?yàn)镕lash Attention是基于乘法的,無(wú)需將?attention_mask
?傳遞給注意力操作,所以采用RoPE更合適。盡管如此,從初步實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),位置嵌入的選擇對(duì)模型性能影響不大。為了促進(jìn)關(guān)于bias-based 和 multiplication-based注意力機(jī)制的進(jìn)一步研究,在 Baichuan 2-7B 上應(yīng)用 RoPE,在 Baichuan 2-13B 上應(yīng)用 ALiBi(與Baichuan 1 保持一致)。
激活函數(shù)和歸一化
使用 SwiGLU 激活函數(shù),這是一種 switch-activated 的 GLU 變體。然而,SwiGLU有一個(gè)“雙線性”層,并包含三個(gè)參數(shù)矩陣,與 原始Transformer的前饋層有兩個(gè)矩陣不同,因此將隱層尺寸從 4 倍隱層尺寸減少到 8/3 隱層尺寸,并四舍五入為 128 的倍數(shù)。
對(duì)于 Baichuan 2 的注意力層,采用由 xFormers2 實(shí)現(xiàn)的內(nèi)存高效注意力。通過(guò)利用 xFormers 的優(yōu)化注意力和偏置能力,可以在降低內(nèi)存開(kāi)銷的同時(shí)有效地結(jié)合 ALiBi 的基于偏置的位置編碼。這為 Baichuan 2 的大規(guī)模訓(xùn)練提供了性能和效率優(yōu)勢(shì)。
在Transformer Block的輸入應(yīng)用層歸一化(Layer Normalization),這對(duì)于warm-up更具魯棒性。此外,使用 RMSNorm(均方根歸一化),這種方法只計(jì)算輸入特征的方差,效率更高。
優(yōu)化器
選用AdamW優(yōu)化器,β1 和 β2 分別設(shè)置為 0.9 和 0.95。使用 0.1 的權(quán)重衰減,并將梯度范數(shù)剪切到 0.5。模型先用 2,000 個(gè)線性縮放step進(jìn)行warmed up,達(dá)到最大學(xué)習(xí)率,然后應(yīng)用余弦衰減直到最小學(xué)習(xí)率。參數(shù)和學(xué)習(xí)率詳情見(jiàn)于Table 3:
混合精度:?模型訓(xùn)練使用 BFloat16 混合精度,在前向和反向計(jì)算中使用BFloat16,而在優(yōu)化器更新中使用Float32。與Float16相比,BFloat16 具有更好的動(dòng)態(tài)范圍,使其對(duì)訓(xùn)練大型語(yǔ)言模型中的大值更具魯棒性。然而,BFloat16 的低精度在某些設(shè)置中會(huì)引發(fā)一些問(wèn)題。例如,在一些 RoPE 和 ALibi 的實(shí)現(xiàn)中,當(dāng)整數(shù)超過(guò) 256 時(shí),torch.arange 操作會(huì)由于碰撞而失敗,導(dǎo)致無(wú)法區(qū)分附近位置。因此,對(duì)于一些對(duì)于值敏感的操作,如位置嵌入,使用完整精度。
NormHead:?為了穩(wěn)定訓(xùn)練并提高模型性能,對(duì)輸出嵌入(也稱為“head”)進(jìn)行歸一化。NormHead在實(shí)驗(yàn)中有兩個(gè)優(yōu)點(diǎn)。
- 穩(wěn)定訓(xùn)練。在實(shí)驗(yàn)中發(fā)現(xiàn)head的范數(shù)容易不穩(wěn)定,訓(xùn)練過(guò)程中稀有token嵌入的范數(shù)變小,會(huì)擾亂訓(xùn)練動(dòng)態(tài)。NormHead 可以顯著穩(wěn)定訓(xùn)練動(dòng)態(tài)。
- 降低了L2距離在計(jì)算logits時(shí)的影響。實(shí)驗(yàn)中發(fā)現(xiàn)語(yǔ)義信息主要通過(guò)嵌入的余弦相似性而不是 L2 距離編碼。由于當(dāng)前的線性分類器通過(guò)點(diǎn)積計(jì)算 logits,它是 L2 距離和余弦相似性的混合。NormHead 減輕了在計(jì)算 logits 時(shí) L2 距離的干擾。
Max-z 損失:?在訓(xùn)練過(guò)程中,LLM 的 logits 可能變得非常大。雖然 softmax 函數(shù)對(duì)于絕對(duì) logits 值是不可知的,因?yàn)樗灰蕾囉谒鼈兊南鄬?duì)值。大的 logits 在推理過(guò)程中會(huì)帶來(lái)問(wèn)題,因?yàn)槌R?jiàn)的重復(fù)懲罰實(shí)現(xiàn)(如 Hugging Face 實(shí)現(xiàn)3中的 model.generate)直接將標(biāo)量應(yīng)用于 logits。以這種方式收縮非常大的 logits 可以顯著改變 softmax 之后的概率,使模型對(duì)重復(fù)懲罰超參數(shù)的選擇敏感。受到 NormSoftmax 和 PaLM 中的輔助 z-損失的啟發(fā),添加一個(gè)max-z loss 對(duì)logit值進(jìn)行歸一化:
其中z是最大的logit值。這有助于穩(wěn)定訓(xùn)練并使推理時(shí)對(duì)超參數(shù)更具魯棒性。
Scaling Laws
隨著模型大小、數(shù)據(jù)集大小和用于訓(xùn)練的計(jì)算浮點(diǎn)數(shù)的增加,模型的性能會(huì)提高。并且為了獲得最佳性能,所有三個(gè)因素必須同時(shí)放大。當(dāng)不受其他兩個(gè)因素的制約時(shí),模型性能與每個(gè)單獨(dú)的因素都有冪律關(guān)系。當(dāng)這種冪率關(guān)系出現(xiàn)時(shí),可以提前對(duì)模型的性能進(jìn)行預(yù)測(cè)?;谠摱煽梢栽谏疃葘W(xué)習(xí)和大型語(yǔ)言模型的訓(xùn)練代價(jià)變得越來(lái)越昂貴的當(dāng)下確保性能。
具體如何操作呢?在訓(xùn)練數(shù)十億參數(shù)的大型語(yǔ)言模型之前,先訓(xùn)練一些小型模型,并為訓(xùn)練更大模型擬合縮放定律。訓(xùn)練了從 10M 到 3B 一系列模型(最終模型的 1/1000 到 1/10),并且每個(gè)模型最多訓(xùn)練 1 萬(wàn)億個(gè)token,使用的超參數(shù)和數(shù)據(jù)集與Baichuan 2相同。根據(jù)不同模型的最終損失,可以獲取從訓(xùn)練 flops 到目標(biāo)損失的映射。為了擬合模型的縮放定律,采用了 Henighan 等人(2020)給出的公式:
其中是不可約損失,第一項(xiàng)是可約損失,它被表示為一個(gè)冪律縮放項(xiàng)。是訓(xùn)練 flops, 是在該 flops 中模型的最終損失。使用 SciPy4 庫(kù)的?curve_fit
函數(shù)來(lái)擬合參數(shù)。最終擬合的縮放曲線以及預(yù)測(cè)的 70 億和 130 億參數(shù)模型的最終損失如Figure 4 所示??梢钥吹?#xff0c;擬合的縮放定律準(zhǔn)確地預(yù)測(cè)了 Baichuan 2 的最終損失。
通過(guò)這個(gè)實(shí)驗(yàn),研究人員可以確定最終的模型規(guī)模,并為訓(xùn)練提供相應(yīng)的資源配置,以保證訓(xùn)練的高效性和性能表現(xiàn)。
Infrastructure
為了實(shí)現(xiàn)GPU資源的高效利用,研究人員為彈性訓(xùn)練框架和智能集群調(diào)度策略開(kāi)發(fā)了一種協(xié)同設(shè)計(jì)方法。
由于 GPU 在多用戶和任務(wù)之間共享,每個(gè)任務(wù)的具體行為不可預(yù)測(cè),這通常導(dǎo)致集群中出現(xiàn)空閑的 GPU 節(jié)點(diǎn)。由于配置8塊A800 GPUs的單個(gè)機(jī)器足以滿足 Baichuan 7B 和 Baichuan 13B模型的內(nèi)存需求,因此訓(xùn)練框架的設(shè)計(jì)主要集中在機(jī)器級(jí)彈性。機(jī)器級(jí)彈性使其能夠根據(jù)集群狀態(tài)動(dòng)態(tài)修改任務(wù)資源,從而為智能調(diào)度算法奠定基礎(chǔ)。
為滿足機(jī)器級(jí)彈性的要求,訓(xùn)練框架集成了張量并行和ZeRO 驅(qū)動(dòng)的數(shù)據(jù)并行。在每臺(tái)機(jī)器內(nèi)部設(shè)置張量并行,并使用ZeRO共享數(shù)據(jù)并行,以實(shí)現(xiàn)機(jī)器之間的彈性縮放。
此外,采用張量分割技術(shù)。通過(guò)分割某些計(jì)算以減少峰值內(nèi)存占用,如大詞匯表的交叉熵計(jì)算。這種方法使其能夠在不增加額外計(jì)算和通信的情況下滿足內(nèi)存需求,使系統(tǒng)更高效。
為了在不影響模型準(zhǔn)確性的前提下進(jìn)一步加速訓(xùn)練,研究人員實(shí)現(xiàn)了混合精度訓(xùn)練,在這里使用 BFloat16 執(zhí)行前向和反向計(jì)算,而在優(yōu)化器更新時(shí)使用Float32。此外,為了有效地將訓(xùn)練集群擴(kuò)展到數(shù)千個(gè)GPU,整合了以下技術(shù),以避免降低通信效率:
- 拓?fù)涓兄姆植际接?xùn)練。在大規(guī)模集群中,網(wǎng)絡(luò)連接經(jīng)常跨越多層交換機(jī)。通過(guò)策略性地安排分布式訓(xùn)練的排名,以最大程度地減少不同交換機(jī)之間的頻繁訪問(wèn),從而減少延遲并提高整體訓(xùn)練效率。
- ZeRO 的混合和分層分區(qū)。通過(guò)將參數(shù)分區(qū)到 GPU,ZeRO3 以增加全收集通信開(kāi)銷為代價(jià),減少內(nèi)存消耗。當(dāng)擴(kuò)展到數(shù)千個(gè) GPU 時(shí),這種方法會(huì)帶來(lái)顯著的通信瓶頸。為了解決這個(gè)問(wèn)題,研究人員提出了一種混合和分層分區(qū)方案。具體來(lái)說(shuō),首先將優(yōu)化器狀態(tài)分區(qū)到所有 GPU, 然后自適應(yīng)地決定哪些層需要激活ZeRO3,以及是否分層分區(qū)參數(shù)。
通過(guò)整合這些策略,該系統(tǒng)能夠在 1,024 個(gè) NVIDIA A800 GPU 上高效地訓(xùn)練 Baichuan 2-7B 和 Baichuan 2-13B 模型,實(shí)現(xiàn)超過(guò) 180 TFLOPS 的計(jì)算效率。
對(duì)齊
Baichuan 2 還引入了對(duì)齊過(guò)程,從而產(chǎn)生了兩個(gè)Chat模型:Baichuan 2-7B-Chat 和 Baichuan 2-13B-Chat。Baichuan 2的對(duì)齊過(guò)程包括兩個(gè)部分:有監(jiān)督微調(diào)(SFT)和來(lái)自人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)。
監(jiān)督微調(diào)
在監(jiān)督微調(diào)階段,標(biāo)注人員為各種數(shù)據(jù)源的提示(Prompt)進(jìn)行注釋,每個(gè)提示根據(jù)與Claude類似的關(guān)鍵原則,被標(biāo)記為有幫助或無(wú)害。使用交叉驗(yàn)證到方式驗(yàn)證數(shù)據(jù)質(zhì)量:會(huì)讓一位權(quán)威的標(biāo)注者檢查特定標(biāo)注工作組標(biāo)注的批次樣本的質(zhì)量,拒絕任何不符合質(zhì)量標(biāo)準(zhǔn)的批次數(shù)據(jù)。最終收集超過(guò) 100k 的監(jiān)督微調(diào)樣本,并基于這些數(shù)據(jù)訓(xùn)練基座模型。接下來(lái),通過(guò) RLHF做強(qiáng)化學(xué)習(xí)以進(jìn)一步改進(jìn)結(jié)果。整個(gè) RLHF 過(guò)程,包括 RM 和 RL 訓(xùn)練,如Figure 5 所示。
Reward Model(RM)
為提示(Prompt)設(shè)計(jì)一個(gè)3層次的分類系統(tǒng),包括6個(gè)主要類別、30個(gè)次要類別和超過(guò)200個(gè)三級(jí)類別。從用戶的角度來(lái)看,希望分類系統(tǒng)能夠全面覆蓋所有類型的用戶需求;從訓(xùn)練獎(jiǎng)勵(lì)模型的角度來(lái)看,每個(gè)類別中的提示應(yīng)具有足夠的多樣性,以確保獎(jiǎng)勵(lì)模型能夠很好地泛化。給定一個(gè)提示,用不同大小和階段(SFT,PPO)的 Baichuan 2 模型生成多樣化的回應(yīng)。在訓(xùn)練RM時(shí),只使用由 Baichuan 2 模型族生成的回應(yīng)。用于訓(xùn)練獎(jiǎng)勵(lì)模型的損失函數(shù)與InstructGPT的損失函數(shù)一致。訓(xùn)練得到的獎(jiǎng)勵(lì)模型表現(xiàn)與LLaMA 2一致,這表明兩個(gè)回應(yīng)之間的分?jǐn)?shù)差距越大,獎(jiǎng)勵(lì)模型的區(qū)分準(zhǔn)確性越高,
PPO
獲得獎(jiǎng)勵(lì)模型之后,使用PPO算法進(jìn)一步訓(xùn)練語(yǔ)言模型。具體使用了4種模型:actor模型(負(fù)責(zé)生成回應(yīng))、reference模型(用于計(jì)算固定參數(shù)的KL懲罰)、reward模型(提供整個(gè)回應(yīng)的總體獎(jiǎng)勵(lì),固定參數(shù))以及 critic模型(用于學(xué)習(xí)每個(gè)token的值)。
在RLHF訓(xùn)練過(guò)程中,critic模型在初始訓(xùn)練時(shí)先做20個(gè)step的warmed up。再通過(guò)標(biāo)準(zhǔn)PPO算法更新critic和actor模型。對(duì)于所有模型,使用了0.5的梯度裁剪、5e-6的恒定學(xué)習(xí)率、PPO裁剪閾值? = 0.1。將KL懲罰系數(shù)β設(shè)為0.2,并隨著step的增加逐漸減小到0.005。對(duì)于所有Chat模型包括Baichuan 2-7B-Chat和Baichuan 2-13B-Chat進(jìn)行350次迭代。
安全
百川的研究人員認(rèn)為模型的安全性改進(jìn)不僅在于數(shù)據(jù)清洗或?qū)R階段的約束,還在于所有訓(xùn)練階段中積極獲取正面知識(shí)并識(shí)別負(fù)面知識(shí)。在整個(gè)Baichuan 2訓(xùn)練過(guò)程基于這一理念增強(qiáng)了模型的安全性。
預(yù)訓(xùn)練階段
在預(yù)訓(xùn)練階段,主要關(guān)注數(shù)據(jù)的安全性。整個(gè)預(yù)訓(xùn)練數(shù)據(jù)集進(jìn)行嚴(yán)格的數(shù)據(jù)過(guò)濾流程,從而增強(qiáng)安全性。官方制定了一套規(guī)則和模型,以去除有害內(nèi)容,如暴力、色情、種族歧視、仇恨言論等。
此外,策劃了一個(gè)中英文雙語(yǔ)數(shù)據(jù)集,包括數(shù)百家知名網(wǎng)站的數(shù)百萬(wàn)網(wǎng)頁(yè),這代表了各種正面價(jià)值領(lǐng)域,涵蓋政策、法律、弱勢(shì)群體、普遍價(jià)值觀、傳統(tǒng)美德等。同時(shí)提高對(duì)該數(shù)據(jù)集的采樣概率。
對(duì)齊階段
建立了一個(gè)包含6種類型攻擊和100多種細(xì)粒度安全價(jià)值類別的紅隊(duì)程序,由10名具有傳統(tǒng)互聯(lián)網(wǎng)安全經(jīng)驗(yàn)的專家標(biāo)注團(tuán)隊(duì)初始化安全對(duì)齊提示(Prompt)。這些初始化提示是從預(yù)訓(xùn)練數(shù)據(jù)集中檢索相關(guān)片段,然后創(chuàng)建回應(yīng),最終產(chǎn)生了約1,000個(gè)初始化的標(biāo)注提示數(shù)據(jù)。
- 專家標(biāo)注團(tuán)隊(duì)通過(guò)初始化的對(duì)齊模型引導(dǎo)了一個(gè)50人的外包標(biāo)注團(tuán)隊(duì),進(jìn)行紅藍(lán)對(duì)抗,生成了20萬(wàn)個(gè)攻擊提示。
- 通過(guò)使用專門(mén)的多值監(jiān)督采樣方法,最大程度地利用攻擊數(shù)據(jù),以生成不同安全級(jí)別的回應(yīng)。
在RL優(yōu)化階段,也將安全性作為首要考慮:
- 在安全性強(qiáng)化的開(kāi)始,DPO 方法有效地利用了有限數(shù)量的標(biāo)注數(shù)據(jù),以增強(qiáng)對(duì)特定脆弱性問(wèn)題的性能。
- 通過(guò)使用集成有益和無(wú)害目標(biāo)的獎(jiǎng)勵(lì)模型,進(jìn)行了PPO安全性強(qiáng)化訓(xùn)練。
總結(jié)
模型 | 百川2 |
---|---|
參數(shù)量 | 7b,13b |
訓(xùn)練token數(shù) | 2.6萬(wàn)億 |
tokenizer | BPE |
詞表大小 | 125696 |
位置編碼 | 7b:RoPE ; 13b:ALiBi (影響不大) |
最長(zhǎng)上下文 | 4096 |
激活函數(shù) | SwiGLU |
歸一化 | Layer Normalization + RMSNorm |
注意力機(jī)制 | xFormers2 |
優(yōu)化器 | AdamW+NormHead+Max-z損失 |
參考:
【論文閱讀】《Baichuan 2: Open Large-scale Language Models》