Slurm集群上单节点8卡全量微调大模型笔记

大模型选择

选用了近期刚发布的ChatGLM3-6b作为基座模型,考虑想利用模型进行Chat微调后的能力,没有使用ChatGLM3-6b-Base进行改进。ChatGLM3-6b地址: https://github.com/THUDM/ChatGLM3

Slurm脚本编写

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   ##输出结束时间

你可能感兴趣的:(笔记,chrome,前端)