LLaMA-Factory 单卡后训练微调Qwen3完整脚本
flyfish
使用说明
-
将下面代码保存为
train_single_gpu.sh
-
修改脚本中的以下参数:
MODEL_PATH
:模型路径
DS_CONFIG_PATH
:DeepSpeed配置文件路径
OUTPUT_PATH
:输出目录路径
--dataset erfen
:替换为实际数据集名称 这里是erfen -
赋予执行权限并运行:
bash
chmod +x train_single_gpu.sh
./train_single_gpu.sh
完整脚本如下
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; then
echo -e "${RED}错误: 未找到nvidia-smi,可能没有可用的GPU。${NC}"
exit 1
fi
# 检查模型路径
if [ ! -d "$MODEL_PATH" ]; then
echo -e "${RED}错误: 模型路径 '$MODEL_PATH' 不存在。${NC}"
exit 1
fi
# 检查DeepSpeed配置文件
if [ ! -f "$DS_CONFIG_PATH" ]; then
echo -e "${RED}错误: DeepSpeed配置文件 '$DS_CONFIG_PATH' 不存在。${NC}"
exit 1
fi
# 检查输出目录
if [ ! -d "$(dirname "$OUTPUT_PATH")" ]; then
echo -e "${YELLOW}创建输出目录: $(dirname "$OUTPUT_PATH")${NC}"
mkdir -p "$(dirname "$OUTPUT_PATH")"
fi
echo -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 ]; then
echo -e "${GREEN}训练成功完成!模型保存在: $OUTPUT_PATH${NC}"
else
echo -e "${RED}训练过程中发生错误!${NC}"
exit 1
fi
}
# 主函数
main() {
# 显示系统信息
echo -e "${YELLOW}===== 系统信息 ====${NC}"
echo "GPU信息:"
nvidia-smi | head -n 10
echo -e "${YELLOW}=================${NC}"
# 检查环境
check_prerequisites
# 开始训练
run_training
}
# 执行主函数
main