赞
踩
选用了近期刚发布的ChatGLM3-6b作为基座模型,考虑想利用模型进行Chat微调后的能力,没有使用ChatGLM3-6b-Base进行改进。ChatGLM3-6b地址: https://github.com/THUDM/ChatGLM3
slurm脚本整个可分为A+B两部分,这两部分直接拼起来就能运行,sbatch job.slurm
可以提交作业。
A部分:作业提交命令部分(1行中第2个#后的内容是注释)
#!/bin/bash
#SBATCH -J gpt_zh_en #作业名
#SBATCH -p A800:8 #使用的机器的名字,这个机器里面有gpu1和gpu2两个节点
#SBATCH -w gpu2 #具体使用的节点名为gpu2,需要注意,不能再使用--nodes=1
#SBATCH --ntasks-per-node=12 #每个计算节点上使用srun启动的任务数
#SBATCH --time 720:00:00 #运行时间720h约等于1个月
#SBATCH --mem=240G #运行时间720h约等于1个月
#SBATCH --comment=BASE #附加注释信息
#SBATCH -o /public1/home/amzhou/slurm/std.out.%j #输出文件路径,带有作业ID
#SBATCH -e /public1/home/amzhou/slurm/std.err.%j #报错文件路径,带有作业ID
#SBATCH --gres=gpu:8 #请求8个GPU
### Set basic var ### MARK_slurm2pbs #设置变量
JOBID=$SLURM_JOB_ID ### slurm2pbs #声明作业ID变量
NP=$SLURM_NPROCS ### slurm2pbs #声明进程数
NNODE=`srun hostname | sort | uniq | wc -l` ### slurm2pbs #统计唯一节点数
LOG_FILE=$WORK_DIR/job_${JOB_NAME}_${JOBID}.log #定义日志文件路径
HOST_FILE=$WORK_DIR/job_${JOB_NAME}_${JOBID}_${NP}c_${NNODE}n.ma # 定义主机文件路径
srun hostname | sort | uniq -c |awk '{print $2":"$1}' > $HOST_FILE ### slurm2pbs # 创建包含节点计数的文件
### Write basic job infomations #正常输出一些信息
echo -e "The start time is: `date +"%Y-%m-%d %H:%M:%S"` \n" | tee -a $LOG_FILE
echo -e "My job ID is: $JOBID \n" | tee -a $LOG_FILE
echo -e "The total cores is: $NP \n" | tee -a $LOG_FILE
echo -e "The hosts is: \n" | tee -a $LOG_FILE
cat $HOST_FILE | tee -a $LOG_FILE
echo -e "\n" | tee -a $LOG_FILE
### Run APP #准备运行自己的东西
# MARK_CMD #Don't delete this line!!! #这行标记CMD
#!/bin/bash #下面将由 Bash 解释器来执行
B部分:自己的东西
source /public1/home/amzhou/anaconda3/bin/activate glm3 ##激活环境
set -ex ##-e表示任何命令的退出状态不是 0,就结束运行
##-x启用了脚本的调试模式,会在执行每个命令之前输出该命令及其参数
LR=1e-4
NUM_GPUS=8 ##gpu数量
MAX_SOURCE_LEN=1536
MAX_TARGET_LEN=512
DEV_BATCH_SIZE=16
GRAD_ACCUMULARION_STEPS=1
MAX_STEP=200000 ##最大运行步数
SAVE_INTERVAL=1000 ##每过多少步保存一次
RUN_NAME=gpt
BASE_MODEL_PATH=/public1/home/amzhou/ChatGLM3/chatglm3-6b
DATASET_PATH=/public1/home/amzhou/ChatGLM3/finetune_demo/scripts/formatted_data/gpt_zh_en.jsonl
DATASTR=`date +%Y%m%d-%H%M%S`
OUTPUT_DIR=output/${RUN_NAME}-${DATASTR}-${LR}
MASTER_PORT=$(shuf -n 1 -i 10000-65535)
mkdir -p $OUTPUT_DIR
##torchrun --standalone表示单个节点 --nnodes=1表示节点数为1 --nproc_per_node表述节点上多少个处理进程,定义为GPU数量
torchrun --standalone --nnodes=1 --nproc_per_node=$NUM_GPUS finetune.py \
--train_format input-output \
--train_file $DATASET_PATH \
--preprocessing_num_workers 1 \
--model_name_or_path $BASE_MODEL_PATH \
--output_dir $OUTPUT_DIR \
--max_source_length $MAX_SOURCE_LEN \
--max_target_length $MAX_TARGET_LEN \
--per_device_train_batch_size $DEV_BATCH_SIZE \
--gradient_accumulation_steps $GRAD_ACCUMULARION_STEPS \
--max_steps $MAX_STEP \
--logging_steps 1 \
--save_steps $SAVE_INTERVAL \
--learning_rate $LR \
--fp16 \
--deepspeed configs/deepspeed.json 2>&1 | tee ${OUTPUT_DIR}/train.log
# MARK_BASH #Don't delete this line!!! #标记结束
echo The end time is: `date +"%Y-%m-%d %H:%M:%S"` | tee -a $LOG_FILE ##输出结束时间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。