MCPcopy
hub / github.com/yangjianxin1/Firefly

github.com/yangjianxin1/Firefly @main sqlite

repository ↗ · DeepWiki ↗
58 symbols 233 edges 14 files 15 documented · 26%
README

Firefly: 一站式大模型训练工具

GitHub Repo stars Generic badge Generic badge

欢迎加入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

News

  • 🔥 Unsloth x Qwen2模型结构的PR已merge到Unsloth的master分支。
  • 🔥 扩展Unsloth,支持Qwen2模型结构,包括Qwen1.5系列的Dense模型,代码库:Unsloth技术文章
  • 🔥 支持Unsloth,训练Llama3-8B仅需7.75GB显存,可减少42.58%显存占用,减少30.72%训练时间。 训练增益评测
  • 🔥 优化训练流程,支持全量训练、LoRA、QLoRA高效训练,支持预训练、指令微调和DPO。指令微调与DPO的template与原有的chat模型对齐,支持绝大多数开源模型,包括Gemma、MiniCPM、Llama、InternLM、Baichuan、ChatGLM、Yi、Deepseek、Qwen、Orion、Ziya、Xverse、Mistral、Mixtral-8x7B、Zephyr、Vicuna、Bloom等。
  • 🔥 开源模型权重firefly-mixtral-8x7b ,在🤗Open LLM排行榜分数为70.34,超越Yi-34B、Llama2-65B-Chat、Qwen-14B、Vicuna-33B-v1.3等模型。
  • 🔥 开源LongQLoRA, 【技术报告】。可高效扩展LLama上下文长度,在单张32GB V100上将Llama2长度扩展至8k(亦可扩展至12k),仅微调1000 step,在PG19和Proof-pile数据集上的perplexity优于LongLoRA,在PG19上略胜MPT-7B-8K。
  • 🔥 开源Firefly-LLaMA2-Chinese项目在4*V100上进行高效训练,经过中文词表扩充、增量预训练、多轮指令微调,在CMMLU上超越Linly、Yayi、FlagAlpha等,与Ziya、Chinese-Alpaca表现基本持平。
  • 🔥 开源firefly-baichuan2-13b,在OpenCompass的CMMLU榜单上以56.83的分数,位列第8,比百川官方Chat模型略低1.57分。
  • 🔥 开源firefly-llama-30b,在🤗Open LLM排行榜上以64.83分,同量级模型排名第10
  • 🔥 开源firefly-llama2-13b,在🤗Open LLM排行榜上以62分,同量级模型排名第3,比榜首略低0.5分。
  • 🔥 开源firefly-llama-13b,在Hugging Face的Open LLM排行榜上复刻Vicuna-13B,比Vicuna-13b-1.1略高0.2分,比llams-2-13b-chat略低0.5分。
  • LLMPruner:大语言模型裁剪工具 ,开源裁剪后的Bloom模型权重

相关项目

  • Firefly-LLaMA2-Chinese:中文Llama2模型,对Llama2进行中文词表扩充、增量预训练和指令微调。
  • LongQLoRA:大模型长度扩展项目,可在单卡V100上将LLaMA-13B的长度扩展至8192,且性能逼近MPT-8K。
  • LLMPruner:对Bloom进行词表裁剪,减少模型参数量。

技术博客

技术博客

模型评测

Open LLM Leaderboard评测

评测结果来源于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. 寻求反馈:可以寻求他人的反馈和建议,

Core symbols most depended-on inside this repo

register_template
called by 23
component/template.py
find_all_linear_names
called by 2
train.py
map
called by 2
component/dataset.py
setup_everything
called by 1
train.py
load_pretrain_dataset
called by 1
train.py
load_tokenizer
called by 1
train.py
load_unsloth_model
called by 1
train.py
load_model
called by 1
train.py

Shape

Method 22
Function 21
Class 14
Route 1

Languages

Python100%

Modules by API surface

component/dataset.py14 symbols
train.py13 symbols
component/collator.py6 symbols
component/trainer.py5 symbols
component/loss.py5 symbols
script/chat/chat.py4 symbols
script/http/start_service.py2 symbols
component/utils.py2 symbols
component/template.py2 symbols
component/model.py2 symbols
script/merge_lora.py1 symbols
script/http/post.py1 symbols

Dependencies from manifests, versioned

accelerate0.21.0 · 1×
astunparse1.6.2 · 1×
bitsandbytes0.39.0 · 1×
deepspeed0.9.5 · 1×
loguru0.7.0 · 1×
numpy1.21.4 · 1×
pandas1.2.5 · 1×
peft0.4.0 · 1×
torch1.13.1 · 1×
tqdm4.62.3 · 1×
transformers4.34 · 1×
trl0.7.11 · 1×

For agents

$ claude mcp add Firefly \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact