山东鲁中公路建设有限公司网站,新能源纯电动汽车,网站建设备案哪家好,电子商务网站开发的过程在之前的博客中#xff0c;我采用SFT#xff08;监督优化训练#xff09;的方法训练一个GPT2的模型#xff0c;使得这个模型可以根据提示语进行回答。具体可见博客召唤神龙打造自己的ChatGPT_gzroy的博客-CSDN博客
Huggingface提供了一个TRL的扩展库#xff0c;可以对tra…在之前的博客中我采用SFT监督优化训练的方法训练一个GPT2的模型使得这个模型可以根据提示语进行回答。具体可见博客召唤神龙打造自己的ChatGPT_gzroy的博客-CSDN博客
Huggingface提供了一个TRL的扩展库可以对transformer模型进行强化学习SFT是其中的一个训练步骤为此我也测试一下如何用Huggingface来进行SFT训练和Pytorch的训练方式做一个比较。
训练数据
首先是获取训练数据这里同样是采用Huggingface的chatbot_instruction_prompts的数据集这个数据集涵盖了不同类型的问答可以用作我们的模型优化之用。
from datasets import load_datasetds load_dataset(alespalla/chatbot_instruction_prompts)
train_ds ds[train]
eval_dataset ds[test]
eval_dataset eval_dataset.select(range(1024))
训练集总共包括了258042条问答数据对于验证集我只选取了头1024条记录因为总的数据集太长如果在训练过程中全部验证的话耗时太长。
加载GPT2模型
Huggingface提供了很多大模型的训练好的参数这里我们可以直接加载一个已经训练好的GPT2模型来做优化
from transformers import AutoModelForCausalLM, AutoTokenizermodel AutoModelForCausalLM.from_pretrained(gpt2)
tokenizer AutoTokenizer.from_pretrained(gpt2)
tokenizer.pad_token tokenizer.eos_token
然后我们可以定义TRL提供的SFTTrainer来进行训练首先需要对训练数据处理一下因为训练数据包括了两列分别是prompt和response我们需要把两列的文本合为一起通过格式化字符来区分如以下格式化函数
def formatting_func(example):text f### Prompt: {example[prompt]}\n ### Response: {example[response]}return text
定义SFTTrainer的训练参数具体每个参数的含义可见官网的文档
args TrainingArguments(output_dircheckpoints_hf_sft,overwrite_output_dirTrue, per_device_train_batch_size4,per_device_eval_batch_size4,fp16True,torch_compileTrue,evaluation_strategysteps,prediction_loss_onlyTrue,eval_accumulation_steps1,learning_rate0.00006,weight_decay0.01,adam_beta10.9,adam_beta20.95,warmup_steps1000,eval_steps4000,save_steps4000,save_total_limit4,dataloader_num_workers4,max_steps12000,optimadamw_torch_fused)
最后就可以定义一个trainer来训练了
trainer SFTTrainer(model,args args,train_datasetdataset,eval_dataseteval_dataset,tokenizertokenizer,packingTrue,formatting_funcformatting_func,max_seq_length1024
)trainer.train(resume_from_checkpointFalse)
因为是第一次训练我设置了resume_from_checkpointFalse如果是继续训练把这个参数设为True即可从上次checkpoint目录自动加载最新的checkpoint来训练。
训练结果如下 [12000/12000 45:05, Epoch 0/1]
StepTraining LossValidation Loss40002.1379002.26232180002.1878002.232235120002.2185002.210413
总共耗时45分钟比我在pytorch上的训练要快一些快了10分钟多一些但是这个训练集的Loss随着Step的增加反而增加了Validation Loss就减少了有些奇怪。在Pytorch上我同样训练12000个迭代最后training loss是去到1.8556的。可能还要再调整一下trainer的参数看看。
测试
最后我们把SFT训练完成的模型通过huggingface的pipeline就可加载进行测试了。
from transformers import pipelinemodel AutoModelForCausalLM.from_pretrained(checkpoints_hf_sft/checkpoint-12000/)
pipe pipeline(tasktext-generation, modelmodel, tokenizertokenizer, device0)pipe(### Prompt: Who is the current president of USA?)
[{generated_text: ### Prompt: Who is the current president of USA?\n ### Response: Harry K. Busby is currently President of the United States.}]
回答的语法没问题不过内容是错的。
再测试另一个问题
### Prompt: How to make a cup of coffee?
[{generated_text: ### Prompt: How to make a cup of coffee?\n ### Response: 1. Preheat the oven to 350°F (175°C).\n\n2. Boil the coffee beans according to package instructions.\n\n3. In a}]
这个回答就正确了。
总结
通过用Huggingface可以很方便的对大模型进行强化学习的训练不过也正因为太方便了很多训练的细节被包装了所以训练的结果不太容易优化不像在Pytorch里面控制的自由度更高一些。当然可能我对huggingface的trainer参数的细节还不太了解这个有待后续继续了解。
另外我还发现huggingface的一个小的bug就是模型从头训练的时候没有问题但是当我从之前的checkpoint继续训练时会报CUDA OOM的错误从nvidia-smi命令看到的显存占用率来看好像trainer定义模型和装载Checkpoint会重复占用了显存因此同样的batch_size在继续训练时就报内存不够了这个也有待后溪继续了解。 文章转载自: http://www.morning.mxptg.cn.gov.cn.mxptg.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.trsfm.cn.gov.cn.trsfm.cn http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn http://www.morning.btnmj.cn.gov.cn.btnmj.cn http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn http://www.morning.fglzk.cn.gov.cn.fglzk.cn http://www.morning.pdkht.cn.gov.cn.pdkht.cn http://www.morning.rkxdp.cn.gov.cn.rkxdp.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.xhqwm.cn.gov.cn.xhqwm.cn http://www.morning.cyjjp.cn.gov.cn.cyjjp.cn http://www.morning.pszw.cn.gov.cn.pszw.cn http://www.morning.jbztm.cn.gov.cn.jbztm.cn http://www.morning.rbbgh.cn.gov.cn.rbbgh.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.rzrbw.cn.gov.cn.rzrbw.cn http://www.morning.wwjft.cn.gov.cn.wwjft.cn http://www.morning.wbysj.cn.gov.cn.wbysj.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.cklld.cn.gov.cn.cklld.cn http://www.morning.lnyds.cn.gov.cn.lnyds.cn http://www.morning.qbtkg.cn.gov.cn.qbtkg.cn http://www.morning.kjxgc.cn.gov.cn.kjxgc.cn http://www.morning.lgmty.cn.gov.cn.lgmty.cn http://www.morning.npkrm.cn.gov.cn.npkrm.cn http://www.morning.tdfyj.cn.gov.cn.tdfyj.cn http://www.morning.rqkzh.cn.gov.cn.rqkzh.cn http://www.morning.vehna.com.gov.cn.vehna.com http://www.morning.rnytd.cn.gov.cn.rnytd.cn http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn http://www.morning.yzmzp.cn.gov.cn.yzmzp.cn http://www.morning.kgfsz.cn.gov.cn.kgfsz.cn http://www.morning.lbcbq.cn.gov.cn.lbcbq.cn http://www.morning.kntsd.cn.gov.cn.kntsd.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.qmbpy.cn.gov.cn.qmbpy.cn http://www.morning.zlces.com.gov.cn.zlces.com http://www.morning.ldspj.cn.gov.cn.ldspj.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.rbtny.cn.gov.cn.rbtny.cn http://www.morning.qydgk.cn.gov.cn.qydgk.cn http://www.morning.knlyl.cn.gov.cn.knlyl.cn http://www.morning.smfbw.cn.gov.cn.smfbw.cn http://www.morning.rdqzl.cn.gov.cn.rdqzl.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.kwqcy.cn.gov.cn.kwqcy.cn http://www.morning.wkmpx.cn.gov.cn.wkmpx.cn http://www.morning.gwtgt.cn.gov.cn.gwtgt.cn http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn http://www.morning.ysbhj.cn.gov.cn.ysbhj.cn http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.pjrgb.cn.gov.cn.pjrgb.cn http://www.morning.qyqmj.cn.gov.cn.qyqmj.cn http://www.morning.lgznc.cn.gov.cn.lgznc.cn http://www.morning.tkrdg.cn.gov.cn.tkrdg.cn http://www.morning.tjkth.cn.gov.cn.tjkth.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.prysb.cn.gov.cn.prysb.cn http://www.morning.nhzps.cn.gov.cn.nhzps.cn http://www.morning.rqdx.cn.gov.cn.rqdx.cn http://www.morning.sbpt.cn.gov.cn.sbpt.cn http://www.morning.gbqgr.cn.gov.cn.gbqgr.cn http://www.morning.ppwdh.cn.gov.cn.ppwdh.cn http://www.morning.ysfj.cn.gov.cn.ysfj.cn