Vicuna-LoRA-RLHF-PyTorch简介
Vicuna-LoRA-RLHF-PyTorch 项目旨在在普通消费级硬件上,使用低秩自适应(Low-Rank Adaptation, LoRA)和人类反馈增强学习(RLHF)来微调Vicuna大型语言模型(LLM). 这是一个完整的管道项目,帮助开发者高效地在有限资源下进行模型优化。
环境设置
项目主要在2080Ti显卡上进行测试,并使用以下软件环境:
- PyTorch版本:2.0.0
- CUDA版本:11.8
Todo列表
项目需要执行的主要任务清单包括:
- 下载Vicuna权重
- 执行监督微调(SFT)
- 将适配器合并到模型中
- 实现RLHF:
- 训练奖励模型
- 使用增强学习进行调优(RL)
执行步骤
以下是项目的执行流程:
下载Vicuna权重
通过运行以下命令,下载并应用权重差异:
python apply_delta.py --base 'decapoda-research/llama-7b-hf' --target './weights/vicuna-7b' --delta lmsys/vicuna-7b-delta-v1.1
监督微调
在开始微调之前,执行以下操作以注释掉特定代码行:
# 需注释掉以下内容
#to_return = {k: v for k, v in to_return.items() if (("lora_" in k and adapter_name in k) or ("bias" in k))}
然后运行:
python supervised_finetune.py --data_path './data/merge_sample.json' --output_path 'lora-Vicuna' --model_path './weights/vicuna-7b' --eval_steps 200 --save_steps 200 --test_size 1
合并PEFT适配器到模型
检查PEFT版本,若不是0.2.0版本,需要切换至该版本:
pip uninstall peft -y
pip install peft==0.2.0
合并适配器:
python merge_peft_adapter.py --model_name 'lora-Vicuna'
训练奖励模型
通过以下指令训练奖励模型:
python train_reward_model.py --model_name './weights/vicuna-7b' --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_vicuna-7b
使用PPO调优语言模型
最后一步使用PPO进行语言模型调优:
python tuning_lm_with_rl.py --model_name './lora-Vicuna-adapter-merged' --reward_model_name './reward_model_vicuna-7b-adapter-merged' --adafactor False --tokenizer_name 'decapoda-research/llama-7b-hf' --save_freq 100 --output_max_length 128 --batch_size 1 --gradient_accumulation_steps 1 --batched_gen True --ppo_epochs 1 --seed 0 --learning_rate 1.4e-5 --early_stopping True --output_dir './tuning_llama_rl_checkpoints'
注意事项
项目中有以下几点需注意:
- Vicuna模型权重并未在HuggingFace上发布,所以需自行下载。
- 进行SFT之前,需确保注释掉特定代码行。
- PEFT版本0.3.0.dev0存在问题,需使用0.2.0版本。
- 训练奖励模型时可能遇到错误,需使用最新的transformer代码解决。
参考资料
本项目的部分工具和方法来源于其他项目和资源,如FastChat和Alpaca-LoRA。开发者可以参考这些工具来配置环境和理解具体实施细节。
许可证
本项目采用MIT许可证,任何人都可以自由使用、复制和分发。