LLaMA-Factory 單卡后訓練微調Qwen3完整腳本
flyfish
使用說明
-
將下面代碼保存為
train_single_gpu.sh
-
修改腳本中的以下參數:
MODEL_PATH
:模型路徑
DS_CONFIG_PATH
:DeepSpeed配置文件路徑
OUTPUT_PATH
:輸出目錄路徑
--dataset erfen
:替換為實際數據集名稱 這里是erfen -
賦予執行權限并運行:
chmod +x train_single_gpu.sh
./train_single_gpu.sh
完整腳本如下
#!/bin/bash# 單顯卡分布式訓練腳本
# 確保您已安裝所需依賴:torch, deepspeed, transformers 等# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 無顏色# 定義基礎變量
NPROC_PER_NODE=1 # 單顯卡
NNODES=1
NODE_RANK=0
MASTER_ADDR="localhost"
MASTER_PORT=29500 # 隨機端口,確保未被占用# 模型和數據集配置
MODEL_PATH="/media/user/models/Qwen/Qwen3-8B/" # 替換為您的模型路徑
DS_CONFIG_PATH="examples/deepspeed/ds_z3_config.json" # 替換為您的DeepSpeed配置文件路徑
OUTPUT_PATH="./output/sft_qwen3_8b" # 輸出路徑# 檢查必要的文件和路徑
check_prerequisites() {echo -e "${YELLOW}檢查環境和文件...${NC}"# 檢查GPU是否可用if ! command -v nvidia-smi &> /dev/null; thenecho -e "${RED}錯誤: 未找到nvidia-smi,可能沒有可用的GPU。${NC}"exit 1fi# 檢查模型路徑if [ ! -d "$MODEL_PATH" ]; thenecho -e "${RED}錯誤: 模型路徑 '$MODEL_PATH' 不存在。${NC}"exit 1fi# 檢查DeepSpeed配置文件if [ ! -f "$DS_CONFIG_PATH" ]; thenecho -e "${RED}錯誤: DeepSpeed配置文件 '$DS_CONFIG_PATH' 不存在。${NC}"exit 1fi# 檢查輸出目錄if [ ! -d "$(dirname "$OUTPUT_PATH")" ]; thenecho -e "${YELLOW}創建輸出目錄: $(dirname "$OUTPUT_PATH")${NC}"mkdir -p "$(dirname "$OUTPUT_PATH")"fiecho -e "${GREEN}環境檢查完成,準備開始訓練...${NC}"
}# 主訓練函數
run_training() {echo -e "${YELLOW}開始單顯卡分布式訓練...${NC}"# 定義分布式參數DISTRIBUTED_ARGS="--nproc_per_node $NPROC_PER_NODE \--nnodes $NNODES \--node_rank $NODE_RANK \--master_addr $MASTER_ADDR \--master_port $MASTER_PORT"# 運行訓練命令torchrun $DISTRIBUTED_ARGS src/train.py \--deepspeed $DS_CONFIG_PATH \--stage sft \--do_train \--use_fast_tokenizer \--flash_attn auto\--model_name_or_path $MODEL_PATH \--dataset erfen \--template qwen \--finetuning_type lora \--lora_target q_proj,v_proj \--output_dir $OUTPUT_PATH \--overwrite_cache \--overwrite_output_dir \--warmup_steps 100 \--weight_decay 0.1 \--per_device_train_batch_size 4 \--gradient_accumulation_steps 4 \--ddp_timeout 9000 \--learning_rate 5e-6 \--lr_scheduler_type cosine \--logging_steps 1 \--cutoff_len 4096 \--save_steps 1000 \--plot_loss \--num_train_epochs 3 \--bf16# 檢查訓練是否成功if [ $? -eq 0 ]; thenecho -e "${GREEN}訓練成功完成!模型保存在: $OUTPUT_PATH${NC}"elseecho -e "${RED}訓練過程中發生錯誤!${NC}"exit 1fi
}# 主函數
main() {# 顯示系統信息echo -e "${YELLOW}===== 系統信息 ====${NC}"echo "GPU信息:"nvidia-smi | head -n 10echo -e "${YELLOW}=================${NC}"# 檢查環境check_prerequisites# 開始訓練run_training
}# 執行主函數
main