今天微调chatglm3-6b的时候先后出现torch.cuda.OutOfMemoryError: CUDA out of memory.和torch.distributed.elastic.multiprocessing.api: [ERROR] failed (exitcode: 1) local_rank: 0 (pid: 780) of binary,我先试着解决后一个,未果,于是先看看前一个,打开训练日志,发现有很多空字符串,类似
'': 0 -> -100
这是由于训练参数设置的过大,试着减小bach_size等参数,降低训练时显存占用率避免出现 torch.cuda.OutOfMemoryError: CUDA out of memory.显存不足的问题,我改成这样
PRE_SEQ_LEN=32
LR=2e-2
NUM_GPUS=1
MAX_SEQ_LEN=256
DEV_BATCH_SIZE=1
GRAD_ACCUMULARION_STEPS=16
MAX_STEP=40
SAVE_INTERVAL=10
DATESTR=`date +%Y%m%d-%H%M%S`
RUN_NAME=qa_test
BASE_MODEL_PATH=/mnt/workspace/ChatGLM3/chatglm3-6b
DATASET_PATH=formatted_data/my_data_qa.jsonl
OUTPUT_DIR=output/${RUN_NAME}-${DATESTR}-${PRE_SEQ_LEN}-${LR}
mkdir -p $OUTPUT_DIR
torchrun --standalone --nnodes=1 --nproc_per_node=$NUM_GPUS finetune.py \
--train_format multi-turn \
--train_file $DATASET_PATH \
--max_seq_length $MAX_SEQ_LEN \
--preprocessing_num_workers 1 \
--model_name_or_path $BASE_MODEL_PATH \
--output_dir $OUTPUT_DIR \
--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 \
--pre_seq_len $PRE_SEQ_LEN 2>&1 | tee ${OUTPUT_DIR}/train.log
记得改参数的时候最好折半比如512改为216.