# **ChatGLM-LoRA-RLHF-PyTorch**
在消费级硬件上用LoRA和RLHF微调ChatGLM LLM的完整流程
---
## **目录**
- [**ChatGLM-LoRA-RLHF-PyTorch**](#chatglm-lora-rlhf-pytorch)
- [**目录**](#目录)
- [**环境设置**](#环境设置)
- [**待办事项**](#待办事项)
- [**运行**](#运行)
- [**数据处理**](#数据处理)
- [**监督微调**](#监督微调)
- [**合并PEFT适配器到模型中**](#合并peft适配器到模型中)
- [**奖励建模**](#奖励建模)
- [**合并奖励模型到模型中**](#合并奖励模型到模型中)
- [**备注**](#备注)
- [**参考**](#参考)
- [**Star-History**](#star-history)
- [资助](#资助)
- [**许可证**](#许可证)
---
## **环境设置**
穷人卡:2080Ti 12G torch==2.0.0 cuda==11.8
---
## **待办事项**
- [x] SFT: 监督微调
- [x] 合并适配器到模型中
- [ ] RLHF
- [x] 训练奖励模型
- [ ] 使用RL调整
## **运行**
---
### **数据处理**
转化alpaca数据集为jsonl
```bash
python cover_alpaca2jsonl.py --data_path data/alpaca_data.json --save_path data/alpaca_data.jsonl
分词处理
python tokenize_dataset_rows.py --jsonl_path data/alpaca_data.jsonl --save_path data/alpaca --max_seq_length 200 --skip_overlength True
监督微调
必须使用最新的peft版本
pip uninstall peft -y
pip install git+https://github.com/huggingface/peft.git # 最新版本 >=0.3.0.dev0
python supervised_finetune.py --dataset_path data/alpaca --lora_rank 8 --per_device_train_batch_size 1 --gradient_accumulation_steps 32 --save_steps 200 --save_total_limit 3 --learning_rate 1e-4 --fp16 --remove_unused_columns false --logging_steps 10 --output_dir output
合并PEFT适配器到模型中
pip uninstall peft -y
pip install peft==0.2.0 # 0.3.0.dev0 产生很多错误
python merge_peft_adapter.py --model_name ./output
奖励建模
python train_reward_model.py --model_name 'THUDM/chatglm-6b' --gradient_accumulation_steps 32 --per_device_train_batch_size 1 --train_subset 100 --eval_subset 10 --local_rank 0 --bf16 False
合并奖励模型到模型中
python merge_peft_adapter.py --model_name ./reward_model_chatglm-6b
备注
- PEFT的版本,目前从git上安装的是 0.3.0.dev0 版本,在merge_peft_adapter的时候有问题,需要切换到peft==0.2.0 (0.3.0.dev0 没有 _get_submodules()这个函数)
- 因为huggingface的transformer暂时不支持ChatGLM的封装接口,需要自己从ChatGLM的hub上下载代码放到本地目录 models 下面,供后续使用
- 同样,ChatGLM的model代码是自己的,和huggingface没合并,所以在调用加载的时候,都主要加上参数 trust_remote_code=True
- 训练奖励模型需要执行 SeqCLS这个任务:huggingface 的 transformer 提供 "AutoModelForSequenceClassification" 这个类。但是 ChatGLM 只有 "ChatGLMForConditionalGeneration" 这个类。
- 自己实现奖励模型, reward_model.py,完成奖励模型的训练过程
参考
数据预处理:cover_alpaca2jsonl.py 和tokenize_dataset_rows.py来自项目 ChatGLM-Tuning
requirements主要是按照 alpaca-lora 来配环境。
- https://github.com/tloen/alpaca-lora
- https://github.com/mymusise/ChatGLM-Tuning
- https://github.com/lvwerra/trl
- https://github.com/jasonvanf/llama-trl
Star-History
资助
如果该项目帮助你减少了开发时间,可以请我喝杯咖啡:)
支付宝
微信支付
许可证
MIT © Kun