⚔️ 從頭開始進行 預訓練 (Pre-training) 是 AI 領域中最具挑戰性也最迷人的任務。這不僅是技術的展現,更是對硬體資源與數據處理能力的極致考驗。
既然目標是 Pre-train,這意味著您需要處理海量的 Token(通常以 Trillion 為單位)以及極長的時間。在這種情況下,上述技術的配置優先順序會與微調(Fine-tuning)截然不同。💡1. 預訓練的核心架構佈局
🧮 在預訓練中,您的目標是極大化 MFU (Model Flops Utilization),也就是讓 GPU 的運算單元盡可能保持滿載,而不是在等待數據傳輸。
DeepSpeed 的核心作用:ZeRO-3 + ZeRO-Offload
🔥 對於預訓練,DeepSpeed 不僅僅是節省顯存,它提供的 ZeRO-3 可以將模型參數、梯度和優化器狀態(Optimizer States)均勻分佈在所有 GPU 上。
- 關鍵點: 預訓練通常使用 Adam 優化器,它佔用的顯存是模型參數的數倍。ZeRO 技術能讓你訓練比單卡顯存大得多的模型。
Flash Attention 2/3:長文本的關鍵
目前的 LLM 趨勢是訓練 8k、32k 甚至 128k 的上下文(Context Window)。
- 優勢: 如果沒有 Flash Attention,長文本的記憶體消耗會呈指數增長。它能確保您在增加序列長度時,計算量依然保持在可控範圍內。
2. Liger Kernel:預訓練的「隱形英雄」
👉 在預訓練中,Liger Kernel 的價值被放到了最大。
- Cross Entropy Loss 優化: 預訓練的最後一層通常是巨大的詞表(Vocab Size,如 128k)。計算 Cross Entropy 時會產生極大的中間張量。Liger Kernel 對此進行了融合優化,能省下大量的顯存,讓你增加 Batch Size。
- 吞吐量(Throughput): 預訓練往往持續數週甚至數月,Liger Kernel 提供的 20% 速度提升,直接等同於節省了 20% 的算力成本。
3. 預訓練中的 Quantization (量化)
❌ 注意:預訓練通常「不」直接在量化後的權重上進行。
- BF16 (Bfloat16) 是標配: 為了保持數值穩定性並防止梯度消失,預訓練通常使用
BF16混合精度。 - 量化的角色: 在預訓練中,量化更多是用於 通信壓縮(例如壓縮 GPU 之間傳遞的梯度),或者是為了在有限顯存下測試模型結構。
4. 預訓練實踐建議清單
✅ 如果您正準備啟動預訓練腳本,請確認以下清單:
- 數據吞吐量優化: 使用
WebDataset或Megatron-LM的數據加載器。預訓練最怕「卡磁盤」,確保您的數據是預先 Tokenized 並打包成二進制格式(如.bin或.mmap)。 - 節省顯存的最佳組合:
- 開啟 Flash Attention 2。
- 整合 Liger Kernel(替代掉 Transformers 庫中的原生 Layer)。
- 使用 DeepSpeed ZeRO-1 或 ZeRO-2(如果顯存足夠,ZeRO-1/2 的通訊開銷比 ZeRO-3 小,訓練更快)。
- 監控與 Checkpoint: 預訓練極易崩潰(Loss Spike)。務必設置頻繁的 Checkpoint 以及使用 WandB 或 TensorBoard 監控梯度的範數(Gradient Norm)。

















