ChatGLM-6B模型基于 P-Tuning v2 微调脚本参数解释
1、地址:https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md
2、参数示例
PRE_SEQ_LEN=128 LR=2e-2 CUDA_VISIBLE_DEVICES=0 python3 main.py \ --do_train \ --train_file AdvertiseGen/train.json \ --validation_file AdvertiseGen/dev.json \ --prompt_column content \ --response_column summary \ --overwrite_cache \ --model_name_or_path THUDM/chatglm-6b \ --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ --overwrite_output_dir \ --max_source_length 64 \ --max_target_length 64 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 3000 \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \ --quantization_bit 4
3、解释
-
PRE_SEQ_LEN=128
这个超参数指定了模型在进行finetune训练过程中,每个示例(prompt和response)输入序列的最大长度。在chatGPT训练中,要将prompt和response两个序列合并成一个输入序列,因此需要控制输入序列的长度,避免GPU内存溢出或训练过慢。该值通常由硬件设备内存大小和任务要求等因素综合考虑而定。
-
LR=2e-2
这个超参数指定了训练过程中的学习率。学习率是控制训练过程中模型参数更新速度的超参数,对训练过程的结果具有很大的影响。如果学习率过高,可能会导致模型训练快速收敛但可能会陷入局部最优解;如果学习率过低,则模型训练可能会收敛缓慢,并可能陷入局部最优解。在chatGPT训练中,一般采用默认值或在一定范围内进行调整。
LR=2e-2
表示学习率为0.02,通常情况下这个值比较合适。 -
--do_train
该参数表示是否需要进行训练。如果设置了该参数,则会进行模型训练;如果没有设置,则不进行训练。
-
--train_file
该参数指定训练数据文件的路径。训练数据文件应为JSON格式,其中包含输入序列和输出序列等信息。
-
--validation_file
是用于指定验证集文件路径的参数,可以用于在训练过程中实时评估模型的效果和性能。具体来说,训练模型时,我们需要将训练数据集分成训练集和验证集两部分。训练集用于训练模型,验证集则用于评估模型的性能和准确性。
-
--prompt_column
该参数指定输入文本(即前置文本或prompt)所在列。
-
--response_column
该参数指定输出文本(即响应文本或response)所在列。
-
--overwrite_cache
该参数指定是否重写缓存。如果设置了该参数,则会重新生成缓存文件;否则会加载现有的缓存文件(如果存在)。
-
--model_name_or_path
指定预训练模型的路径或名称。这个参数告诉程序将哪一个预训练模型加载进来,用于finetune或者作为基模型。
-
--output_dir
指定训练模型的输出目录。
-
--max_source_length
指定输入序列的最大长度。如果输入序列的长度超过这个值,则会被截断到该值。这个参数通常是根据硬件设备GPU的内存大小来确定的。
-
--max_target_length
指定输出序列的最大长度。如果输出序列的长度超过这个值,则会被截断到该值。
-
--per_device_train_batch_size
指定每个GPU设备的训练批次大小。这个参数控制每个GPU上可以同时训练的样本数量,影响到内存的使用量和训练速度。
-
--per_device_eval_batch_size
指定每个GPU设备的评估批次大小。这个参数与训练批次大小类似,控制每个GPU上可以同时进行的样本数量,影响到内存的使用量和评估速度。
-
--gradient_accumulation_steps
指定梯度累积的步数。梯度累积意味着在计算梯度时,将多个批次的梯度累积起来再进行更新,这样可以减少每个批次的内存占用,从而使得更大的批次大小成为可能。
-
--predict_with_generate
如果设置该参数,则会在训练完成后立即生成输出结果。这样可以在训练过程中不断地检查模型的性能和效果。
-
--max_steps
指定训练模型的最大步数。如果达到这个步数则停止训练。
-
--logging_steps
指定每隔多少步将训练日志写入输出目录中的文件。这个参数控制记录训练过程中的信息的频率,有助于观察训练过程的进展情况。
-
--save_steps
指定每隔多少步将模型保存到输出目录中的文件。这个参数控制周期地保存训练模型的频率,有助于保护模型训练的成果和避免信息丢失。
-
--learning_rate
指定学习率。学习率是控制神经网络中权重变化的速度的超参数。适当的学习率有助于提高模型的训练速度和质量。
-
--pre_seq_len
指定训练时的预序列长度。这个参数用于finetune操作,控制输入序列的长度,进而控制模型输出的信息量和质量。
-
--quantization_bit
指定网络量化时的比特数。网络量化是一种优化模型的方式,可以减少模型的体积和内存使用量。选择适当的量化比特数有助于提高模型的效率和速度。