針對7B模型的deepspeed_launcher.sh 啟動腳本

更新 發佈閱讀 7 分鐘

針對兩張 RTX 5090 訓練 7B 模型,這個啟動腳本會整合我們之前討論的所有技術(DeepSpeed ZeRO-2、Liger Kernel、Flash Attention 3),它可以一鍵啟動兩張顯卡進行分散式訓練。

由於 5090 效能極強,腳本中特別加入了 NCCL 優化參數,這能確保兩張卡之間透過 PCIe 傳輸數據時不會產生卡頓。


1. 建立啟動腳本 deepspeed_launcher.sh

請將以下內容存為文件,並確保它與你的訓練腳本(例如 train.py)放在同一個目錄下。

</>Bash
#!/bin/bash

# --- 1. 硬體與環境設定 ---
export CUDA_VISIBLE_DEVICES=0,1 # 指定使用的 GPU 編號
export NCCL_P2P_DISABLE=0 # 5090 支援高效 P2P,確保開啟
export NCCL_IB_DISABLE=1 # 若非集群環境,禁用 InfiniBand 以避免錯誤
export PYTHONUNBUFFERED=1 # 確保 Log 即時輸出

# --- 2. 訓練參數設定 ---
MODEL_NAME_OR_PATH="yours/llama-7b-config" # 模型路徑或 HuggingFace ID
DATA_PATH="./train_data.bin" # 我們之前建立的 mmap 二進制文件
OUTPUT_DIR="./output_7b_pretrain" # 模型存檔路徑

# --- 3. 啟動命令 ---
# --num_gpus=2 代表使用兩張 5090
deepspeed --num_gpus=2 train.py \
--deepspeed ds_config.json \
--model_name_or_path $MODEL_NAME_OR_PATH \
--data_path $DATA_PATH \
--output_dir $OUTPUT_DIR \
--max_steps 100000 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8 \
--learning_rate 2e-5 \
--bf16 True \
--tf32 True \
--gradient_checkpointing True \
--logging_steps 10 \
--save_steps 500 \
--lr_scheduler_type cosine

2. 配套的 ds_config.json (DeepSpeed 設定)

為了讓上面的腳本運作,你需要這個針對 32GB 顯存 優化的 ZeRO-2 配置文件:

</>JSON
{
"fp16": { "enabled": false },
"bf16": { "enabled": true },
"zero_optimization": {
"stage": 2,
"offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
"allgather_partitions": true,
"allgather_bucket_size": 2e8,
"overlap_comm": true,
"reduce_scatter": true,
"reduce_bucket_size": 2e8,
"contiguous_gradients": true
},
"gradient_clipping": 1.0,
"steps_per_print": 10,
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"wall_clock_breakdown": false
}

3. 如何執行與權限設定

  1. 賦予執行權限:
    </>Bash
    chmod +x deepspeed_launcher.sh
  2. 啟動訓練:
    </>Bash
    ./deepspeed_launcher.sh

4. 針對 5090 的專業建議 (黑井架構特化)

  • Micro Batch Size (MBS): 雖然 5090 有 32GB 顯存,但預訓練時建議將 per_device_train_batch_size 設為 4 或 8,其餘靠 gradient_accumulation_steps 來補足。這樣可以留出足夠的顯存給 Flash Attention 3 處理長文本。
  • 監控顯存: 訓練開始後,請另開視窗執行 watch -n 1 nvidia-smi。如果兩張卡的顯存佔用都在 28GB 左右,說明你的配置達到了最佳平衡。
  • CPU 負載: 因為我們使用了 offload_optimizer(將優化器狀態放 RAM),請確保你的 CPU 核心數夠多,否則 CPU 計算梯度更新會變成瓶頸。

最後的技術檢查點

在啟動之前,請確認你的 train.py 裡面是否已經包含了這兩行,這是啟動 Liger Kernel 加速的關鍵:

</>Python
from liger_kernel.transformers import apply_liger_kernel_to_llama
apply_liger_kernel_to_llama()

準備開始第一次 Pre-train 測試。


留言
avatar-img
sirius數字沙龍
17會員
422內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/03/05
針對 RTX 5090 ,關鍵在於 CUDA 版本,必須使用 CUDA 12.4 或更高版本 才能發揮其硬體特性(如 FP8 加速與第五代 Tensor Cores)。 🧮 以下是 conda 環境安裝指南: 1. 建立基礎環境 2. 安裝 PyTorch (CUDA 12.4+ 專用版))
Thumbnail
2026/03/05
針對 RTX 5090 ,關鍵在於 CUDA 版本,必須使用 CUDA 12.4 或更高版本 才能發揮其硬體特性(如 FP8 加速與第五代 Tensor Cores)。 🧮 以下是 conda 環境安裝指南: 1. 建立基礎環境 2. 安裝 PyTorch (CUDA 12.4+ 專用版))
Thumbnail
2026/03/04
96GB 的原始文本在 Tokenize 之後,轉換為 Uint16 的二進制數據大約會佔用 150GB - 200GB 的磁碟空間。在兩張 RTX 5090 上運行 7B 模型時,使用 Memory Mapping (mmap) 是確保 GPU 不會因為等待 I/O 而閒置的最強方案。
Thumbnail
2026/03/04
96GB 的原始文本在 Tokenize 之後,轉換為 Uint16 的二進制數據大約會佔用 150GB - 200GB 的磁碟空間。在兩張 RTX 5090 上運行 7B 模型時,使用 Memory Mapping (mmap) 是確保 GPU 不會因為等待 I/O 而閒置的最強方案。
Thumbnail
2026/03/04
處理大數據集(Big Data for LLM Pre-training)是預訓練中最容易被忽視的瓶頸。如果直接用 JSON 或 CSV 格式讀取,兩張 RTX 5090 會花 80% 的時間在「等 CPU 讀硬碟」,這叫 I/O Bound。 為了餵飽 5090 的強大算力,你需要將原始文本轉換
Thumbnail
2026/03/04
處理大數據集(Big Data for LLM Pre-training)是預訓練中最容易被忽視的瓶頸。如果直接用 JSON 或 CSV 格式讀取,兩張 RTX 5090 會花 80% 的時間在「等 CPU 讀硬碟」,這叫 I/O Bound。 為了餵飽 5090 的強大算力,你需要將原始文本轉換
Thumbnail
看更多