Firefly
一站式开源大模型训练工具,支持预训练/SFT/DPO,通过QLoRA让单卡也能微调百亿参数模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一站式开源大模型训练工具,支持预训练/SFT/DPO,通过QLoRA让单卡也能微调百亿参数模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你手里有一份非常强大但不会说中文的"超级大脑"(比如 Llama3 或 Qwen),Firefly 的作用就是——给这个大脑上一套系统的中文特训课程,让它学会用中文聊天、写代码、做数学题。
2023年初,大模型开源浪潮刚刚兴起,Meta 发布 Llama、斯坦福推出 Vicuna,国内也有 ChatGLM、Baichuan 等模型相继开源。但这些模型有一个共同痛点:默认能力偏向英文,在中文对话、指令遵循、复杂推理上存在明显短板。
Github 用户 yangjianxin1(杨建鑫)从这一需求出发,创建了 Firefly 项目,定位是"一站式大模型训练工具",核心目标是帮助开发者和研究人员低成本、高效率地对主流开源大模型进行预训练和指令微调。项目最初聚焦中文场景,通过整理大规模中文指令数据和系统性的训练流程,让开源大模型在中文能力上实现显著提升。
Firefly 的代码架构清晰,采用模块化设计,主入口为 train.py,核心模块分布在 component/ 目录下:
| 模块 | 职责 |
|---|---|
dataset.py | 统一的数据加载,支持预训练/SFT/DPO 三种数据集格式 |
template.py | 各模型专属对话模板(如 Qwen 的 ChatML、Llama3 的 chat template) |
collator.py | 数据批处理和填充策略 |
trainer.py | 自定义 Trainer,封装训练逻辑 |
model.py | 模型加载、量化配置(4bit/8bit)、LoRA/QLoRA adapter 注入 |
loss.py | SFT 和 DPO 损失函数 |
merge_lora.py | 训练完成后将 LoRA 权重合并回基础模型 |
训练驱动完全通过 JSON 配置文件完成,位于 train_args/ 目录下,分类清晰:pretrain/、sft/full/、sft/lora/、sft/qlora/。每个配置文件定义了模型路径、数据路径、超参数等,切换不同模型只需更换配置文件,极大降低了使用门槛——这是项目中"小白亦可快速上手"设计理念的体现。

图1:Firefly 训练流程概览
预训练(Pre-training):使用大规模原始语料进行语言建模,适合从头扩充模型知识。
指令微调(SFT, Supervised Fine-Tuning):使用指令-响应对数据,让模型学会遵循人类指令。Firefly 整理了 firefly-train-1.1M、moss-003-sft-data、ultrachat、WizardLM_evol_instruct_V2_143k、school_math_0.25M 等高质量中文指令数据集。
DPO(Direct Preference Optimization):直接偏好优化,无需 Reward Model,通过对比"好的回答"和"差的回答"来训练,简化了 RLHF 流程。
| 模式 | 说明 | 最低显存需求 |
|---|---|---|
| 全量训练(Full) | 更新全部参数,效果最好 | 4×V100(8卡理想) |
| LoRA | 仅更新低秩矩阵adapter | ~24GB(单卡 A100) |
| QLoRA | 4bit量化 + LoRA,省显存 | ~10GB(单卡 RTX3090) |
其中 QLoRA 是项目的核心技术亮点之一。使用 bitsandbytes 库将模型权重量化为 4bit,配合 nf4 数据类型和双量化技术,大幅降低显存占用。结合 Unsloth 优化(支持 Qwen2 等主流模型结构),Llama3-8B 训练仅需 7.75GB 显存,相比原生 QLoRA 减少约 42.6% 显存占用,训练时间缩短 30.7%。
Firefly 覆盖了截至 2024 年几乎所有主流开源大模型:
国内模型:Qwen2.5、Qwen2、Qwen1.5、Qwen、Yi-1.5、Yi、DeepSeek、InternLM、ChatGLM2、ChatGLM3、MiniCPM、MiniCPM3、Baichuan2、Baichuan、Ziya、Xverse、Orion
国外模型:Llama3、Llama2、Llama、Gemma、Mistral、Mixtral-8x7B(MoE 专家混合模型)、Zephyr、Vicuna、Bloom
所有模型的 chat template 均与官方对齐,避免了训练时对话格式不一致导致的性能损失。
Firefly 项目方在 HuggingFace 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 |
| firefly-llama2-13b | 62.04 | 59.13 | 81.99 | 55.49 | 51.57 |
最亮眼的是 firefly-mixtral-8x7b(MoE 专家混合模型),以 70.16 分超越 Yi-34B-Chat(69.97),训练成本却远低于后者,验证了 QLoRA 在 MoE 模型上的高效性。firefly-llama2-13b 在所有 13B 模型中排名第3,与榜首差距仅 0.5 分。

图2:QLoRA 训练 loss 曲线,验证训练正常收敛
Firefly 的贡献不仅在代码层面,更在于数据集建设:
项目还发布了训练数据的统计分析:

图3:firefly-train-1.1M 任务类型分布

图4:数据集序列长度分布,QLoRA 默认 max_seq_length=1024
无 Web UI:Firefly 是纯命令行工具,需要修改 JSON 配置文件来调整参数,对非技术用户有一定门槛。
2024年10月后未更新:项目最后推送为2024年10月24日,距今已有相当时间。新模型(如 Qwen2.5-VL、Llama4)的支持可能需要手动适配。
适用人群:
Firefly 代表了国内开源社区在大模型微调领域的一个重要方向——以"工程化 + 数据驱动"的方式,将实验室级别的大模型训练能力下放到普通开发者可及的范围。它的数据集开放、训练配置共享、评测结果透明,形成了"工具 + 数据 + 模型权重"的完整生态闭环,对推动开源大模型在中文场景的落地有实质性贡献。