ChatGLM-LoRA-RLHF-PyTorch项目介绍
ChatGLM-LoRA-RLHF-PyTorch是一个开源项目,旨在提供一个完整的流程,在消费级硬件上使用LoRA和RLHF技术对ChatGLM大语言模型进行微调。该项目实现了基于ChatGLM架构的RLHF(基于人类反馈的强化学习),可以看作是ChatGLM版本的ChatGPT。
项目特点
- 完整流程:提供了从数据处理、监督微调到奖励建模的全流程实现。
- 硬件友好:可在消费级GPU(如2080Ti)上运行。
- 先进技术:结合了LoRA和RLHF等最新的微调技术。
- 适配ChatGLM:专门针对ChatGLM模型架构进行了适配。
环境配置
项目推荐的运行环境如下:
GPU: 2080Ti 12G
PyTorch: 2.0.0
CUDA: 11.8
主要功能模块
- 数据处理
- 监督微调(SFT)
- 奖励模型训练
- RLHF微调(TODO)
下面我们将详细介绍各个模块的实现。
数据处理
数据处理是微调过程的第一步,主要包括以下两个步骤:
1. 转换Alpaca数据集
项目提供了将Alpaca数据集转换为jsonl格式的脚本:
python cover_alpaca2jsonl.py --data_path data/alpaca_data.json --save_path data/alpaca_data.jsonl
2. 数据tokenization
使用以下命令对数据进行tokenization处理:
python tokenize_dataset_rows.py --jsonl_path data/alpaca_data.jsonl --save_path data/alpaca --max_seq_length 200 --skip_overlength True
这一步将数据转换为模型可直接使用的token序列。
监督微调(SFT)
监督微调是对预训练模型进行初步微调的过程。项目使用了LoRA技术来提高微调效率。
安装最新版PEFT
首先需要安装最新版的PEFT库:
pip uninstall peft -y
pip install git+https://github.com/huggingface/peft.git
运行SFT
使用以下命令启动监督微调:
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
主要参数说明:
- lora_rank: LoRA秩,控制可训练参数量
- per_device_train_batch_size: 每个设备的batch size
- gradient_accumulation_steps: 梯度累积步数
- learning_rate: 学习率
合并LoRA权重
微调完成后,可以将LoRA权重合并到原始模型中:
pip install peft==0.2.0
python merge_peft_adapter.py --model_name ./output
注意这里需要使用peft 0.2.0版本。
奖励模型训练
奖励模型是RLHF中的关键组件,用于评估生成文本的质量。
实现奖励模型
由于ChatGLM模型结构的特殊性,项目自行实现了奖励模型,代码在reward_model.py
中。
训练奖励模型
使用以下命令训练奖励模型:
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
主要参数:
- model_name: 使用的基础模型
- train_subset/eval_subset: 训练和验证集大小
- bf16: 是否使用bfloat16精度
合并奖励模型
训练完成后,同样可以将权重合并到原始模型:
python merge_peft_adapter.py --model_name ./reward_model_chatglm-6b
项目注意事项
- PEFT版本问题:merge_peft_adapter时需要使用0.2.0版本。
- ChatGLM模型代码:需要手动下载到本地models目录。
- 加载模型时需要设置
trust_remote_code=True
。 - 自行实现了奖励模型,以适配ChatGLM结构。
总结
ChatGLM-LoRA-RLHF-PyTorch项目提供了一个完整的流程,让研究者能够在消费级硬件上对ChatGLM模型进行LoRA微调和RLHF训练。虽然目前RLHF部分还在开发中,但已经实现的SFT和奖励模型训练为后续的强化学习奠定了基础。
该项目的开源为ChatGLM模型的进一步优化提供了宝贵的参考,也为其他研究者探索大语言模型的微调技术提供了便利。我们期待看到更多基于该项目的创新应用与改进。
从项目的Star历史可以看出,该项目受到了研究社区的广泛关注,star数量呈稳定上升趋势。这反映出研究者对于在消费级硬件上微调大语言模型的浓厚兴趣,以及对ChatGLM模型的看好。
未来展望
虽然ChatGLM-LoRA-RLHF-PyTorch项目已经提供了一个相当完整的微调流程,但仍有一些值得期待的改进方向:
- 完成RLHF部分的实现,提供端到端的强化学习训练流程。
- 优化模型训练效率,探索更多节省显存的技巧。
- 提供更多的评估指标和benchmark,以便更好地衡量微调效果。
- 探索将该流程应用到其他大语言模型的可能性。
总的来说,ChatGLM-LoRA-RLHF-PyTorch为中文大语言模型的开源社区贡献了宝贵的资源。我们期待看到更多研究者基于该项目进行创新,推动中文AI技术的进步。同时,该项目也为其他语言的大模型微调提供了有益的参考。未来,随着硬件性能的提升和算法的优化,我们有理由相信在个人PC上运行和优化大语言模型将变得越来越普及。