mkdir -p $LOG_DIR # 确保日志目录存在,如果不存在则创建
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="$LOG_DIR/internlm3-8b_lora_sft_${TIMESTAMP}.log" # 设置日志文件路径
export NPROC_PER_NODE=1 # 设置每个节点使用的进程数为1
export OMP_NUM_THREADS=1 # 限制OpenMP线程数为1,避免过多线程竞争
export CUDA_VISIBLE_DEVICES=0 # 指定使用的GPU编号为0
export MASTER_PORT=$((10000 + RANDOM % 50000))
# 使用nohup命令在后台运行训练任务,即使终端关闭也能继续运行
--train_type lora \ # 使用LoRA训练方法
--torch_dtype bfloat16 \ # 使用bfloat16精度以节省显存
--num_train_epochs 1 \ # 设置训练轮数为2
--per_device_train_batch_size 2 \ # 每个设备的训练批次大小为4
--learning_rate 5e-5 \ # 学习率设置为5e-5
--warmup_ratio 0.1 \ # 预热阶段占总训练步数的10%
--split_dataset_ratio 0 \ # 不拆分数据集
--lora_rank 8 \ # LoRA的秩设置为8
--lora_alpha 32 \ # LoRA的alpha参数设置为32
--use_chat_template false \ # 不使用聊天模板
--target_modules all-linear \ # 对所有线性层应用LoRA
--gradient_accumulation_steps 2 \ # 梯度累积步数为2,用于增大有效批次大小
--save_steps 2000 \ # 每2000步保存一次模型
--save_total_limit 5 \ # 最多保存5个检查点
--gradient_checkpointing_kwargs '{"use_reentrant": false}' \ # 梯度检查点设置,禁用重入
--logging_steps 5 \ # 每5步记录一次日志
--max_length 2048 \ # 最大序列长度设为2048
--output_dir ./swift_output/InternLM3-8B-Lora \ # 输出目录
--dataloader_num_workers 256 \ # 数据加载器使用256个工作线程
--model_author JimmyMa99 \ # 模型作者信息
--model_name InternLM3-8B-Lora \
> "$LOG_FILE" 2>&1 & # 将标准输出和错误输出重定向到日志文件,并在后台运行
echo "Training started with PID $!" # 显示后台进程的PID
echo "Log file: $LOG_FILE" # 显示日志文件位置
echo "To view logs in real-time, use:"
echo "tail -f $LOG_FILE"