導言
-
Llama 3.5系列模型的發布:
- Llama 3.5系列模型是開源的,最大模型參數為405B([[稠密Transformer架構]],而不是MOE 架構),上下文窗口長度為128K。
- 模型支持多語言和工具使用,并且在某些評估中已經接近或超過GPT-4的水平。
-
模型架構與訓練:
- Llama 3.5采用了傳統的稠密Transformer架構,而不是MOE(Mixture of Experts)架構。
- 訓練過程分為預訓練和后訓練兩個階段,后訓練階段使用了簡單的SFT(Supervised Fine-Tuning)和DPO(Direct Preference Optimization)算法,沒有使用復雜的RLHF(Reinforcement Learning from Human Feedback)。
-
性能評估:
- Llama 3.5在多個評估基準上表現出色,尤其是在知識面(MMLU)、代碼生成(HumanEval)和數學推理(GSM8K)等任務上。
- 模型越大,性能提升越明顯,但70B模型已經表現出較強的性能,405B模型在某些任務上提升不大。
-
模型的應用場景:
- Llama 3.5展示了在工具使用、多語言翻譯、復雜推理和代碼生成等方面的能力。
- 模型在多語言任務上表現良好,能夠將故事翻譯成西班牙語等語言。
-
模型的開源與使用限制:
- Llama 3.5 是開源的,但Llama團隊更新了用戶協議,要求使用其模型進行訓練或微調的開發者必須在模型名稱中包含“Llama 3”。
-
未來展望:
- Llama 3.5系列模型在開源模型中的地位穩固,預計在一段時間內將繼續保持領先地位。
- 盡管模型性能強大,但在實際應用中,70B模型已經能夠滿足大部分需求,405B模型的訓練和推理成本較高。
總結來說,Llama 3.5系列模型在性能、架構和應用場景上都有顯著的優勢,尤其是在開源模型領域,但其訓練和推理成本較高,且與競爭對手Mistral之間存在激烈的競爭。
預訓練數據
1. 預訓練的四個關鍵步驟:
- 數據集構建:從互聯網上抓取大量數據,涵蓋多種來源(如 Common Crawl、GitHub、YouTube等),并進行去重和清洗。
- 模型架構與Scaling Law:確定模型大小和訓練數據量,通常需要根據數據和架構進行調整。
- 訓練過程:大規模訓練需要幾個月時間,涉及數千張GPU卡,訓練過程中需要容災處理。
- 多階段訓練:訓練分為多個階段,每個階段的目標和數據處理方式可能不同。
2. 預訓練數據的來源與處理:
- 數據來源:
- 互聯網抓取(如Common Crawl、GitHub、YouTube等)。
- 垂直網站(如Meta可能使用Facebook數據)。
- 書籍、代碼庫(如GitHub)、視頻字幕等。
- 數據清洗:
- 去除重復數據(URL去重、文檔去重、行級別去重)。
- 使用MinHash等算法處理大規模文本去重。
- 過濾低質量數據(如廣告、導航欄、臟詞、PII信息等)。
- 使用分類器(如FastText、Roberta)對數據進行質量打分和分類。
- 特殊數據處理:
- 代碼和數學推理數據的抽取與保留,提升模型的推理能力。
- 多語言數據的處理,包括語言分類和去重。
3. 數據混合與采樣:
- 數據混合比例:
- 高質量數據(如數學、代碼、Wikipedia)需要[[上采樣]],低質量數據(如娛樂、成人內容)需要下采樣。
- 最終數據混合比例為:50%通用知識、25%數學和推理、17%代碼、8%多語言。
- 多語言數據處理:
- 多語言數據在互聯網中占比較高,但在訓練中被下采樣,導致Llama 3的多語言能力較弱。
4. 退火技術(Annealing):
- 退火的作用:
- 在訓練后期,使用少量高質量數據(如數學、代碼)進行退火訓練,提升模型在特定任務(如數學推理)上的表現。
- 類似于“考前突擊”,通過重新調整學習率,在小規模高質量數據上微調模型。
- 退火的效果:
- 在GSM8K等數學評測集上,退火技術顯著提升了模型的表現。
- 數據質量評估:
- 通過退火技術,可以評估新數據源的質量,確定其對模型性能的提升效果。
5. 技術細節與挑戰:
- 數據清洗的復雜性:
- 數據清洗是一個耗時且資源密集的過程,涉及大量人工和計算資源。
- 需要根據具體任務和數據特點,定制化處理(如代碼、數學公式的抽取)。
- 模型訓練的容災與穩定性:
- 大規模訓練需要處理硬件故障和數據分布變化。
- 數據混合的實驗性:
- 數據混合比例需要通過多次實驗確定,沒有統一的最佳答案。
6. 與競爭對手的對比:
- Llama 3.5在數據質量和訓練技術上進行了大量優化,尤其是在代碼和數學推理任務上表現突出。
- 與Mistral等競爭對手相比,Llama 3.5更注重數據多樣性和高質量數據的利用。
7. 未來改進方向:
- 多語言能力的提升:當前Llama 3的多語言能力較弱,未來可能需要增加多語言數據的比例和質量。
- 數據清洗和處理的進一步優化:通過更精細的數據處理技術,提升模型在特定任務上的表現。
總結來說,Llama 3.5 的預訓練階段注重數據質量、多樣性和高效利用,通過數據清洗、混合和退火技術,顯著提升了模型在代碼、數學推理等任務上的性能。然而,多語言能力仍是其短板,未來可能需要進一步優化。
模型
1. 模型架構概述
- 基礎架構:Llama 3 使用了標準的稠密Transformer架構,與之前的版本相比沒有本質變化。
- 性能提升來源:
- 數據質量和多樣性。
- 模型規模更大(參數更多)。
- 數據清洗和處理的優化。
2. 主要改進點
-
Grouped Query Attention (GQA):
- 背景:在多頭注意力機制(Multi-Head Attention)中,每個頭都有自己的Key(K)、Value(V)和Query(Q)。在推理時,K和V需要緩存(KVCache),導致內存占用高。
- GQA的核心思想:將多個頭的K和V分組共享,減少內存占用和計算量。
- 例如,將8個頭的K和V分成4組,每組共享相同的K和V。
- 優點:
- 顯著減少KVCache的內存占用。
- 減少權重存儲和計算帶寬。
- 適用場景:特別適合大模型(如70B、405B)的推理優化。
-
長序列訓練中的掩碼優化:
- 問題:在長序列訓練中,一個樣本可能包含多個文檔,計算Attention時,不同文檔之間的Token不應相互影響。
- 解決方案:在Self-Attention中加入掩碼,確保每個Token只與同一文檔內的Token計算Attention分數。
- 適用場景:支持更長的上下文窗口(如128K)。
-
Tokenizer改進:
- 詞典大小:從Llama 2的32K擴展到128K。
- 100K來自GPT-4的Tokenizer(tiktoken),28K為新增的非英語Token。
- 優點:
- 提升多語言支持能力。
- 減少Token數量,提升計算效率(例如,一個英文單詞從2個Token減少到1.5個Token)。
- 詞典大小:從Llama 2的32K擴展到128K。
-
RoPE位置編碼優化:
- 改進:使用更大的超參數(Theta),支持更長的上下文窗口(如32K)。
- 優點:提升模型對長文本的處理能力。
3. 模型規模與參數
- 模型規模:
- 8B:32層,4096寬度。
- 70B:80層,8192寬度。
- 405B:126層,16384寬度。
- 參數增長規律:
- 模型大小與層數成正比,與寬度成平方關系。
- 例如,8B到70B:層數×2.5,寬度×2,總參數增長約10倍。
4. Scaling Law(縮放定律)
- 核心思想:通過小模型的實驗結果預測大模型的性能。
- 傳統Scaling Law:預測下一個Token的損失(Loss)。
- Llama 3的改進:預測下游任務(如數學推理)的損失和精度。
- 應用場景:
- 確定最佳模型規模和訓練數據量。
- 例如,給定計算資源(如GPU卡數和訓練時間),預測最優模型大小(如405B)。
- 實驗結果:
- 在小模型上擬合的Scaling Law能夠較準確地預測大模型的性能。
- 不同任務(如數學推理、代碼生成)的Scaling Law曲線不同,需要分別擬合。
5. 訓練與推理優化
- 訓練挑戰:
- 大規模訓練(如405B模型)需要數萬張GPU卡,訓練時間長達數月。
- 需要處理硬件故障和數據分布變化。
- 推理優化:
- 通過GQA減少內存占用和計算量。
- 支持更長的上下文窗口(如128K)。
6. 與Llama 2的對比
- 主要改進:
- 引入GQA,優化推理性能。
- 擴展Tokenizer,支持多語言和更高效的Token表示。
- 優化位置編碼,支持更長上下文。
- 使用Scaling Law更精準地預測模型性能。
- 性能提升:
- 在多語言、長上下文和推理任務上表現更好。
- 但仍需進一步優化多語言能力。
7. 未來改進方向
- 多語言支持:當前多語言能力仍較弱,需進一步優化Tokenizer和訓練數據。
- 長上下文優化:支持更長的上下文窗口(如100萬Token)。
- 訓練效率:進一步優化大規模訓練的穩定性和效率。
總結
Llama 3 在模型架構上的改進主要集中在推理優化(如GQA)、多語言支持(Tokenizer擴展)和長上下文處理(RoPE優化)。通過Scaling Law,Llama 3 能夠更精準地預測大模型的性能,從而優化模型規模和訓練數據量。盡管在多語言能力上仍有提升空間,Llama 3 在推理、代碼生成和數學任務上表現顯著提升,進一步鞏固了其在開源大模型領域的領先地位。
Llama 3 訓練基礎設施與技術細節
1. 硬件架構
- GPU集群:
- 規模:最大使用 16,000張H100 GPU,每臺機器配備8塊GPU和2個CPU。
- 網絡:
- 小模型:使用NVIDIA的Infiniband,延遲低但穩定性較差。
- 大模型:使用RDMA over Ethernet,穩定性更高,但需要大量底層優化。
- 帶寬:每根光纖支持400Gb/s,網絡架構為三層結構,上層交換機帶寬為下層的1/7。
- 存儲:
- 容量:240PB SSD,支持高吞吐量(峰值7TB/s,持續2TB/s)。
- Checkpoint:每個GPU的狀態(1MB到4GB)需要快速寫入存儲系統,支持容災和快速恢復。
2. 訓練任務切分
- 并行策略:
- Tensor Parallelism (TP):
- 將模型的每一層切分到多個GPU上,每個GPU負責一部分計算。
- Pipeline Parallelism (PP):
- 將模型的不同層分配到不同的GPU上,數據按順序流過各層。
- 問題:存在“氣泡”(Bubble),即GPU空閑等待數據的時間。
- Data Parallelism (DP):
- 將數據切分到多個GPU上,每個GPU計算一部分數據,最后匯總結果。
- Context Parallelism (CP):
- 將長序列(如128K Token)切分到多個GPU上,減少內存占用。
- Tensor Parallelism (TP):
- 切分策略:
- 405B模型:使用4D切分(TP、PP、DP、CP),充分利用16,000張GPU。
- 70B模型:僅需TP、PP、DP,無需CP。
3. 訓練效率與優化
- GPU利用率:
- 理論值:H100的峰值算力為989 TFLOPS。
- 實際值:達到43%利用率(約400 TFLOPS),在16,000張GPU上表現良好。
- 優化點:
- 網絡優化:針對以太網進行底層優化,提升All-Reduce和All-Gather操作的效率。
- 數值穩定性:使用FP16進行計算,但在累加時切換為FP32,避免浮點溢出。
- 容災與恢復:
- 每2小時保存一次Checkpoint,支持快速恢復。
- 訓練過程中平均每天中斷10次,主要原因是GPU和內存故障。
4. 容災與穩定性
- 故障統計:
- GPU故障:148次(占31.8%)。
- 內存故障:85次(占18.2%)。
- 其他故障:包括交換機、光纖、SSD、CPU等問題。
- 恢復策略:
- 快速隔離故障節點,遷移任務到其他GPU。
- 利用高速存儲系統快速恢復Checkpoint,確保有效訓練時間達到90%。
5. 挑戰與未來方向
- 挑戰:
- 硬件穩定性:H100早期批次故障率較高,GPU和內存問題頻發。
- 網絡復雜性:大規模集群的網絡架構設計和優化難度大。
- 容災與恢復:需要高效的Checkpoint機制和快速故障排查能力。
- 未來方向:
- 異步訓練:減少同步等待時間,提升大規模訓練的效率和穩定性。
- 硬件升級:采用下一代GPU(如B100)進一步提升算力和能效。
總結
Llama 3 的訓練基礎設施展示了大規模AI模型訓練的復雜性和挑戰。通過16,000張H100 GPU、240PB SSD存儲和優化的網絡架構,Meta成功訓練了405B參數的模型。盡管在硬件穩定性、網絡優化和容災恢復方面面臨諸多挑戰,Llama 3 的訓練效率(43% GPU利用率)和容災能力(90%有效訓練時間)仍然達到了業界領先水平。未來,隨著硬件升級和異步訓練算法的引入,大規模模型訓練的效率和穩定性有望進一步提升。
模型訓練過程
1. 預訓練階段
(1)基本學習率調整
- 初始學習率 8E-05,使用 8000步線性warm-up 到最大值。
- 之后 使用cosine decay 下降 100倍,最終到 8E-07。
(2)批量大小和序列長度變化
- 初始階段:batch size 為 400萬個token,序列長度 4096。
- 中間階段(252M token):batch size 增加到 800萬,序列長度 8192。
- 后期階段(2.87T token):batch size 增加到 1600萬。
(3)訓練穩定性
- 訓練過程中 小的 batch size 更穩定,隨著訓練進行,逐步增大 batch size。
- 選擇 batch size 是實驗的結果,并非固定最佳方案。
(4)數據采樣調整
- 非英語數據的比例提高,提升多語言能力。
- 數學數據采樣增加,提升數學推理能力。
- 新網頁數據加入,增強最新信息的理解能力。
- 低質量數據下采樣,優化整體數據質量。
2. 長上下文預訓練
(1)目標
- 訓練階段使用 8K 上下文,但最終要支持 128K 長上下文。
- 需要逐步擴展,以避免計算資源浪費和模型不穩定。
(2)方法
- 逐步從 8K → 128K,一共 6次擴展,確保模型能穩定處理長上下文。
- 采用 大海撈針測試 來評估模型的長文本理解能力。
(3)算力挑戰
- Self-Attention 計算復雜度是 O(n2),使得 128K 訓練成本巨大。
- 分布式計算策略 需要調整,以適應更長的上下文長度。
3. 退火(Fine-tuning 收尾階段)
(1)學習率衰減
- 在 最后4000萬個token 上 線性降到 0。
- 128K 上下文長度 繼續保持。
(2)高質量數據采樣
- 退火階段更關注高質量數據,以優化最終性能。
(3)模型權重平均
- 采用多個 final step 的 checkpoint 進行模型權重平均,提升穩定性。
- 該方法在 CNN 時代用于刷榜(如 ImageNet 競賽)。
4. 其他未詳細說明的部分
- 數據采樣的具體比例和來源未透露(可能涉及版權)。
- 數據清洗和處理方式未完全公開,但可以通過實驗優化。
總結
- 模型訓練是一個實驗驅動的過程,需要不斷調整參數,類似“煉丹”。
- 批量大小、上下文長度、數據質量 逐步優化,以適應最終任務需求。
- 退火階段 主要用于收尾,確保模型穩定并具備高質量輸出能力。
這套方法不僅適用于 Llama 3,也符合當前主流大語言模型的預訓練范式。