Tips: 图片完全由AI生成
LLM-Dojo使用简洁且易阅读的代码构建模型训练、RLHF框架等各种功能,使项目易于学习且方便魔改与实验,与大多开源框架相同均是基于huggingface。 主要内容如下:
llm_tricks
文件夹下。[2024-11-06] 增加RLHF KTO训练方法
[2024-11-06] 重构RLHF,具体可见目录中RLHF训练框架部分
[2024-10-31] 添加auto_adapt参数控制是否自动适配template、更新优化DPO训练(迁移至RLHF目录下)
[2024-10-15] 增加知识蒸馏训练方法。可见知识蒸馏
[2024-10-14] 删除chat template模块,因为使用tokenizer的apply_chat_template即可
[2024-09-20] 增加evaluate模块,一个简洁的模型评测框架,目前仅支持Humaneval。可见Evaluate
[2024-08-27] 🤓增加从零实现自己编写DPO、SimPO代码,包括数据、loss、训练等部分。可见DPO example
[2024-08-08] 支持直接修改配置文件启动及命令行启动,增加框架适配数据处理代码。
[2024-08-04] 支持自适应单轮或多轮对话,无需指定单轮或多轮,训练根据数据自行判断单轮或多轮。且可自主设置system命令。可见训练数据格式说明
[2024-07-19] RLHF 强化学习框架新增CPO,SimPO,以及二者融合CPO-SimPO
[2024-07-16] RLHF 强化学习框架更新完成,支持deepspeed单卡/多卡 进行强化学习lora、qlora等训练,详细可见RLHF
[2024-06-9] 🚀支持DPO训练,分为单轮对话DPO(自己构建,方便魔改)和多轮对话DPO(简洁实现),支持deepspeed的lora和qlora,具体介绍可见 DPO使用说明
[2024-06-5] 🤓llm_tricks 增加从头开始实现MOE
[2024-06-10] 🚀增加一步一步实现Transformer技术发文(包括代码等从零介绍),可见 技术发文
[2024-05-18] 🤓支持Deepspeed单机多卡、单机单卡的Lora、Qlora、全量微调等训练!
[2024-05-13] 🚀 更新各大模型的Chat Template
[2024-05-06] 🚀 支持Qwen、Yi模型的Lora、Qlora、Dora微调
[2024-04-28] 🚀 更新dora微调原理示例、支持qwen模型微调
RLHF训练框架,支持并持续更新 知识蒸馏、Reward、PPO、DPO、RLOO、SimPO、KTO等各种强化学习方法,适配Deepspeed多卡及Lora,一张A100即可运行。 详情可见: RLHF。
主要包括三类:
1、RLHF
2、Knowledge Distillation (知识蒸馏)
3、Rejected Sampling (拒绝采样) :待更新
理论上支持对所有模型的微调,下述仅为测试过。
支持基于Deepspeed的多卡/单卡 Lora、Qlora、Dora微调:
SFT数据格式为user(system) assistant标准模式,无需指定单轮或多轮,训练根据数据自行判断单轮或多轮。
示例如下,示例文件可参见data/sft_data.jsonl
:
{"message": [{"role": "system", "content": "You are a friendly chatbot who always responds in the style of a pirate"},{"role": "user", "content": "How many helicopters can a human eat in one sitting"},{"role": "assistant", "content": "Sure! Here are some ways to eat bananas and dragonfruits together"},{"role": "user", "content": "你好"},{"role": "assistant", "content": "hellow"}]}
可根据需求自行决定是否增加system字段,建议训练数据没有特殊需求可删除system字段
鉴于框架指定格式数据可能会跟常规数据有些不同,故可以通过utils/script/generate_data.py
文件进行处理,输入应为正常的instruction和output的jsonl格式文件,
如下:
{"instruction":"将这个句子改写成将来时态:“太阳将会照耀明亮。”","output":"太阳将会散发温暖的光芒。"}
运行后即可得到无system的user、assistant指定格式。
目前支持直接python命令单卡训练、deepspeed(推荐使用)单机多卡及单机单卡训练. 所有方式均支持Qlora、Lora、Dora方法。
1、 支持命令行传参启动,启动示例可见: run_example.sh
。 相关参数在train_args下的common_args.py和sft/base.py。
bash run_example.sh
2、 也支持参数文件直接修改默认值,改好参数后运行以下命令启动:
deepspeed --include localhost:6,7 main_train.py
更详细的Deepspeed原理及解释可以看文章:Deepspeed配置及使用讲解
显存占用测试如下:
策略 | 模型大小 | 显存占用 |
---|---|---|
Lora | Qwen(7B) | 26g |
Lora+Zero2 | Qwen(7B) | 26g |
Lora+zero3 | Qwen(7B) | 16g |
所有相关的trciks及讲解都在llm_tricks文件夹下
项目学习了优秀开源项目,感谢huggingface、流萤等及一些国内外小伙伴的开源项目。
LLM Dojo 期待你的加入。🪂 无论是提出问题(Issue)还是贡献代码(Pull Request),都是对项目的巨大支持。