赞
踩
上期我主要分享了一下ChatGLM-6B官方模型的部署、官方数据集的微调、推理以及测试过程,这期我将主要分享一下使用ChatGLM-6B微调自己数据集的过程。上期链接
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
参数解释如下(自己的理解,不正确欢迎指正):
1. PRE_SEQ_LEN:这个是输入的最大序列长度,可以根据你的数据集适当调大或调小,一般64-128是一个合理范围。 2. LR:学习率,可以适当调小,如1e-3 - 5e-3,因为这是微调,学习率不需要太大。 3. CUDA_VISIBLE_DEVICES:设置使用的GPU设备。 4. --train_file 和 --validation_file:设置你自己的数据集路径。 5. --model_name_or_path:设置为 chatglm-6b 的模型路径。 6. --output_dir:设置微调后的模型和日志输出路径。 7.- max_source_length 指定我们输入对话文本(即软提示)的最大长度。如果某个输入文本超过这个长度,则会截断;如果短于这个长度,则会在末尾填充padding。 - max_target_length 指定模型输出的响应文本的最大长度。如果模型生成的响应超过这个长度,则会截断;如果短于这个长度,则会在末尾填充padding。 -所以,这两个参数的设置值需要根据你的硬件情况和数据特点来确定。一般来说,64-128对于输入,32-64对于输出是比较合理的范围。你可以在开发集上进行测试,观察模型输出的响应结果和计算开销来选择最优值。 设置这两个参数的目的是: (1) 使所有训练实例输入和输出的长度统一,以方便模型的训练和batch的构造。 (2) 避免过长的输入和输出导致的计算开销大和内存超限的问题。 (3) 鼓励模型学习如何在约束长度内生成更精准和相关的响应。 7. --gradient_accumulation_steps:设置梯度累积步数,可以适当增大,如8-32,以便使用更大的batch size。 8. --per_device_train_batch_size 和 --per_device_eval_batch_size:可以适当增大,以加快训练速度,如4-8。 9. --max_steps:设置最大训练步数,根据数据集大小适当调整,一般3000-10000步是一个合理范围。 11. --logging_steps 和 --save_steps:设置日志记录步数和模型保存步数,可以根据需要自己更改。
12.--quantization_bit:模型参数的精度选择。
这个参数是关于 P-Tuning 方法中的模型量化(model quantization)方法的选择。
P-Tuning 方法中的量化是指将模型参数从浮点数(FP32)精度量化为低精度,如FP16(半精度)或更低。这可以大大减小模型的参数量,加速推理速度,同时牺牲一定的精度。
在这句话中,作者指出:
1. P-Tuning 方法会冻结(freeze)预训练模型(如GPT2)的全部参数,以此作为量化的起点。
2. 通过调整quantization_bit 参数可以选择不同的量化级别。不设置此参数则默认使用FP16半精度。
3. 调整量化级别会影响模型精度,需要在验证集上测试不同的量化级别,选择精度损失最小的配置。
也就是说,P-Tuning 方法采用冻结预训练模型,然后对其进行量化和微调的策略。设置quantization_bit参数可以选择FP16之外的更低精度,如8bit或4bit,以获得更高的加速比,同时尽可能保留精度。
量化会使模型参数变得更加稀疏,进而可以大幅压缩模型体积和加速推理。但同时也会损失一定精度。所以需要根据实际情况选择一个合理的trade-off。
总的来说,这句话的意思就是说明P-Tuning方法采用了模型冻结和可调量化级别来实现从FP32到低精度的转换,以获得较高的加速比。quantization_bit参数可以选择不同的量化精度,无此参数则默认为FP16。
PRE_SEQ_LEN=128 LR=2e-3 #因为是微调所以我考虑减小了学习率 CUDA_VISIBLE_DEVICES=0 python3 main.py \ --do_train \ --train_file mydata/train.json \ #我的训练数据集地址 --validation_file mydata/test.json \ #我的测试数据集地址 --prompt_column question\ #我的数据集标签 --response_column answer\ #我的数据集标签 --overwrite_cache \ --model_name_or_path THUDM/chatglm-6b \ --output_dir myoutput/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ --overwrite_output_dir \ --max_source_length 64 \ #输入句子的最大目标长度 --max_target_length 512\ #输出句子的最大目标长度 --per_device_train_batch_size 4 \ #由于我的内存比较大,我增大了batch_size --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 8 \ --predict_with_generate \ --max_steps 3000 \ --logging_steps 50 \ --save_steps 1000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \
这里我去掉了 --quantization_bit 4,考虑到我有足够的内存,我采用了精度较高的FP16。
推理参数调整参考微调。
参考上期
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。