
欢迎加入Firefly大模型技术交流群,关注我们的公众号,点击加群按钮即可。

欢迎关注我们的知乎进行交流讨论:红雨瓢泼
Firefly 是一个开源的大模型训练项目,支持对主流的大模型进行预训练、指令微调和DPO,包括但不限于Qwen2、Yi-1.5、Llama3、Gemma、Qwen1.5、MiniCPM、MiniCPM3、Llama、InternLM、Baichuan、ChatGLM、Yi、Deepseek、Qwen、Orion、Ziya、Xverse、Mistral、Mixtral-8x7B、Zephyr、Vicuna、Bloom等。 本项目支持全量参数训练、LoRA、QLoRA高效训练,支持预训练、SFT、DPO。 如果你的训练资源有限,我们极力推荐使用QLoRA进行指令微调,因为我们在Open LLM Leaderboard上验证了该方法的有效性,并且取得了非常不错的成绩。
🔔 本项目主要内容如下: - 📗 支持预训练、指令微调、DPO,支持全量参数训练、LoRA、QLoRA高效训练。通过配置文件的方式训练不同的模型,小白亦可快速上手训练模型。 - 📗 支持使用Unsloth加速训练,并且节省显存。 - 📗 支持绝大部分主流的开源大模型,如Llama3、Gemma、MiniCPM、Llama、InternLM、Baichuan、ChatGLM、Yi、Deepseek、Qwen、Orion、Ziya、Xverse、Mistral、Mixtral-8x7B、Zephyr、Vicuna、Bloom,训练时与各个官方的chat模型的template对齐。 - 📗 整理并开源指令微调数据集:firefly-train-1.1M 、moss-003-sft-data、ultrachat、 WizardLM_evol_instruct_V2_143k、school_math_0.25M。 - 📗 开源Firefly系列指令微调模型权重 。 - 📗 在Open LLM Leaderboard上验证了QLoRA训练流程的有效性。
当前版本针对不同的chat模型的template进行了适配,代码存在较大的更新。若你更喜欢此前的版本,可下载代码v0.0.1-alpha
技术博客
评测结果来源于Hugging Face的Open LLM Leaderboard。我们的模型均采用QLoRA脚本进行训练,训练仅使用1~2张V100。
| 模型 | Average | ARC | HellaSwag | MMLU | TruthfulQA |
|---|---|---|---|---|---|
| firefly-mixtral-8x7b | 70.16 | 68.09 | 85.76 | 71.49 | 55.31 |
| Yi-34B-Chat | 69.97 | 65.44 | 84.16 | 74.9 | 55.37 |
| firefly-llama-30b | 64.83 | 64.25 | 83.64 | 58.23 | 53.2 |
| falcon-40b-instruct | 63.47 | 61.6 | 84.31 | 55.45 | 52.52 |
| guanaco-33b | 62.98 | 62.46 | 84.48 | 53.78 | 51.22 |
| firefly-llama2-13b-v1.2 | 62.17 | 60.67 | 80.46 | 56.51 | 51.03 |
| firefly-llama2-13b | 62.04 | 59.13 | 81.99 | 55.49 | 51.57 |
| vicuna-13b-v1.5 | 61.63 | 56.57 | 81.24 | 56.67 | 51.51 |
| mpt-30b-chat | 61.21 | 58.7 | 82.54 | 51.16 | 52.42 |
| wizardlm-13b-v1.2 | 60.79 | 59.04 | 82.21 | 54.64 | 47.27 |
| vicuna-13b-v1.3 | 60.01 | 54.61 | 80.41 | 52.88 | 52.14 |
| llama-2-13b-chat | 59.93 | 59.04 | 81.94 | 54.64 | 44.12 |
| vicuna-13b-v1.1 | 59.21 | 52.73 | 80.14 | 51.9 | 52.08 |
| guanaco-13b | 59.18 | 57.85 | 83.84 | 48.28 | 46.73 |
🔔 使用本项目的训练代码,以及上述训练数据,我们训练并开源了以下模型权重。
中文模型:
| 模型 | 基座模型 | 训练长度 |
|---|---|---|
| firefly-baichuan2-13b | baichuan-inc/Baichuan2-13B-Base | 1024 |
| firefly-baichuan-13b | baichuan-inc/Baichuan-13B-Base | 1024 |
| firefly-qwen-7b | Qwen/Qwen-7B | 1024 |
| firefly-chatglm2-6b | THUDM/chatglm2-6b | 1024 |
| firefly-internlm-7b | internlm/internlm-7b | 1024 |
| firefly-baichuan-7b | baichuan-inc/baichuan-7B | 1024 |
| firefly-ziya-13b | YeungNLP/Ziya-LLaMA-13B-Pretrain-v1 | 1024 |
| firefly-bloom-7b1 | bigscience/bloom-7b1 | 1024 |
| firefly-bloom-2b6-v2 | YeungNLP/bloom-2b6-zh | 512 |
| firefly-bloom-2b6 | YeungNLP/bloom-2b6-zh | 512 |
| firefly-bloom-1b4 | YeungNLP/bloom-1b4-zh | 512 |
英文模型:
| 模型 | 基座模型 | 训练长度 |
|---|---|---|
| firefly-mixtral-8x7b | mistralai/Mixtral-8x7B-v0.1 | 1024 |
| firefly-llama-30b | huggyllama/llama-30b | 1024 |
| firefly-llama-13-v1.2 | NousResearch/Llama-2-13b-hf | 1024 |
| firefly-llama2-13b | NousResearch/Llama-2-13b-hf | 1024 |
| firefly-llama-13b-v1.2 | huggyllama/llama-13b | 1024 |
| firefly-llama-13b | huggyllama/llama-13b | 1024 |
🔔 目前本项目主要整理了如下指令数据集,并将其整理成统一的数据格式:
| 数据集 | 介绍 |
|---|---|
| firefly-train-1.1M | 我们收集了23种常见的中文NLP任务的数据,并且构造了许多与中华文化相关的数据,如对联、作诗、文言文翻译、散文、金庸小说等。对于每个任务,由人工书写若干种指令模板,保证数据的高质量与丰富度,数据量为115万 |
| moss-003-sft-data | 由复旦大学MOSS团队开源的中英文多轮对话数据,包含100万+数据 |
| ultrachat | 由清华大学开源的英文多轮对话数据,包含140万+数据 |
| WizardLM_evol_instruct_V2_143k | 由WizardLM项目开源的英文指令微调数据集,通过Evol-Instruct方法让指令进化,加强指令的复杂度,以提升模型对复杂指令的遵循能力。包含143k条数据。 |
| school_math_0.25M | 由BELLE项目组开源的数学运算指令数据,包含25万条数据。 |
| shareAI/CodeChat | 主要包含逻辑推理、代码问答、代码生成相关语料样本。 |
| shareAI/ShareGPT-Chinese-English-90k | 中英文平行双语优质人机问答数据集,覆盖真实复杂场景下的用户提问。 |
| ultrachat_200k | 由Zephyr项目开源的英文指令微调数据,在ultrachat数据基础上进行清洗 |
| ultrafeedback_binarized | 英文偏好数据集,可用于DPO训练 |
可按需选择、采样或组合上述数据。若是训练中文模型,建议尝试使用moss数据,英文可尝试ultrachat和WizardLM数据。
训练数据为jsonl格式,每一行的数据格式如下,其中conversation字段是必需的,可以根据实际需求添加或删除其他字段。 可以参考项目中的data/dummy_data.jsonl文件。 ```json { "conversation_id":44, "category":"Brainstorming", "conversation":[ { "human":"怎么能够有效地提升个人能力?", "assistant":"提升个人能力可以通过以下几个方面实现:\n\n1. 学习新知识和技能:阅读相关书籍、参加课程和工作坊、观看教育视频等学习方式,可以帮助你掌握新的知识和技能,从而提升个人能力。\n\n2. 持续练习和实践:不断地练习和实践所学的知识和技能,可以帮助你更好地掌握和应用这些技能,提高你的表现和效率。\n\n3. 寻求反馈和改进:寻求他人的反馈和建议可以帮助你发现自己的不足之处,进一步完善和改进自己的能力。\n\n4. 建立良好的工作和生活习惯:建立良好的工作和生活习惯,如合理安排时间、注意健康、保持积极态度等,可以提高你的工作效率和生活品质,从而提升个人能力。\n\n5. 社交和交流:与他人交流和合作,可以帮助你更好地了解他人的观点和经验,从而提升自己的能力和见识。" }, { "human":"对于初学者来说,如何快速掌握编程技能?", "assistant":"以下是几个建议,可以帮助初学者快速掌握编程技能:\n\n1. 学习基础知识:建议先学习编程语言的基础知识和语法,例如变量、数据类型、控制结构、函数等。可以通过在线课程、编程书籍、视频教程等方式学习。\n\n2. 实践编程:进行实际的编程练习是非常重要的,可以通过参加编程挑战、编写小项目等方式来进行实践。\n\n3. 寻求反馈:可以寻求他人的反馈和建议,
$ claude mcp add Firefly \
-- python -m otcore.mcp_server <graph>