TsinghuaAI / CPM-2-Finetune

Finetune CPM-2
MIT License
83 stars 21 forks source link

请教:模型在跑prompt的的脚本时,并没有用到test的数据,是为什么呢?还有prompt训练好的模型参数保存在哪里? #37

Closed Chunhui-Zou closed 2 years ago

yizhangliu commented 2 years ago

1、模型微调时,使用的验证集是 valid.jsonl。
2、训练好的模型参数 保存在 脚本里 SAVE_PATH 指定的目录下。 3、测试模型的推理,可以 修改一下脚本和 finetune_cpm2.py:

OPTS+=" --do-train"

 OPTS+=" --do-infer"
 CKPT_PATH=你训练后模型保存的位置

 并在 p = list(tokenizer.decode(p0[1:-1])) 这行代码后加输出 推理结果:
          print(f'result = {list(map(str, p))}')
 可能还需要涉及一些其它修改。基本思路 是这样。
Chunhui-Zou commented 2 years ago

非常感谢,我在prmopt微调的时候,同时打开--do-train和--do-eval,模型最后会使用test数据,并输出test的结果,但是,我在SAVE_PATH的目录下没有看到保存的模型参数,是我的脚本设置不对吗。

! /bin/bash

WORKING_DIR=/amax/home/zouchunhui/CPM-2-Finetune-master

NUM_WORKERS=1 NUM_GPUS_PER_WORKER=4

HOST_FILE="${WORKING_DIR}/configs/host_files/hostfile-cpm2"

MP_SIZE=4

DATA_EXT=".txt" DATA_PATH="/amax/home/zouchunhui/CPM-2-Finetune-master/dataset/lcsts/lcsts"

LR=${1-0.1} GRAD_ACC=${2-2} SEED=${3-1234}

CONFIG_PATH="${WORKING_DIR}/configs/model/cpm2_config.json" CKPT_PATH="/amax/home/zouchunhui/CPM-2-Finetune-master/chickpoint/CPM-2-zh"

SAVE_PATH="${WORKING_DIR}/results/lcsts/cpm2_prompt_lcsts_lr${LR}const_G${GRAD_ACC}_prompt_seed${SEED}/" LOG_FILE="${SAVE_PATH}/log.txt" DS_CONFIG="${WORKING_DIR}/configs/deepspeed/ds_lcsts_prompt.json" TOKENIZER_PATH="${WORKING_DIR}/bpe_cn"

PROMPT_CONFIG="${WORKING_DIR}/configs/prompt/lcsts/lcsts_10_0_0.json"

BATCH_SIZE=8 EVAL_BATCH_SIZE=64 TRAIN_ITER=-1 EPOCHS=4

OPTS="" OPTS+=" --model-config ${CONFIG_PATH}" OPTS+=" --model-parallel-size ${MP_SIZE}" OPTS+=" --batch-size ${BATCH_SIZE}" OPTS+=" --eval-batch-size ${EVAL_BATCH_SIZE}" OPTS+=" --gradient-accumulation-steps ${GRAD_ACC}" OPTS+=" --train-iters ${TRAIN_ITER}" OPTS+=" --save ${SAVE_PATH}" OPTS+=" --log-file ${LOG_FILE}" OPTS+=" --load ${CKPT_PATH}" OPTS+=" --data-path ${DATA_PATH}" OPTS+=" --data-ext ${DATA_EXT}" OPTS+=" --data-name lcsts" OPTS+=" --distributed-backend nccl" OPTS+=" --lr ${LR}" OPTS+=" --no-load-optim" OPTS+=" --lr-decay-style constant" OPTS+=" --weight-decay 1e-2" OPTS+=" --clip-grad 1.0" OPTS+=" --warmup 0.0" OPTS+=" --tokenizer-path ${TOKENIZER_PATH}" OPTS+=" --save-interval 100000" OPTS+=" --eval-interval 100" OPTS+=" --eval-iters 10" OPTS+=" --log-interval 10" OPTS+=" --checkpoint-activations" OPTS+=" --deepspeed-activation-checkpointing" OPTS+=" --fp16" OPTS+=" --deepspeed" OPTS+=" --deepspeed_config ${DS_CONFIG}" OPTS+=" --do-train" OPTS+=" --do-valid" OPTS+=" --train-ratio 0.5" OPTS+=" --seed ${SEED}" OPTS+=" --do-eval" OPTS+=" --prompt-tune" OPTS+=" --prompt-config ${PROMPT_CONFIG}"

OPTS+=" --do_infer"

OPTS+=" --epochs ${EPOCHS}"

OPTS+=" --max-save 2"

CMD="deepspeed --num_nodes ${NUM_WORKERS} --num_gpus ${NUM_GPUS_PER_WORKER} --hostfile ${HOST_FILE} ${WORKING_DIR}/finetune_cpm2.py ${OPTS}"

echo ${CMD} mkdir -p ${SAVE_PATH} ${CMD} 2>&1 | tee ${SAVE_PATH}/train_log

SAVE_PATH下只有三个文件 image

yizhangliu commented 2 years ago

@Chunhui-Zou OPTS+=" --save-interval 100000" 需要达到 global_step % args.save_interval == 0, 才能保存。你可以把这个数 设置小一些。

Chunhui-Zou commented 2 years ago

再次感谢,我现在还有一个问题,我打开--do_infer跑模型的时候报错了: finetune_cpm2.py: error: unrecognized arguments: --do_infer

yizhangliu commented 2 years ago

@Chunhui-Zou --do-infer, not --do_infer