GitHub: yangjianxin1/Firefly
Stars: 6,600+ | Language: Python (100%) | License: 暂无
最新版本: v0.0.1-alpha | 作者: 杨建新(yangjianxin1)
目录
项目速览
Firefly(萤火虫)是由杨建新开发的中文大模型训练工具,GitHub 6.6k Star。与 LLaMA-Factory、unsloth 等国际社区主流框架不同,Firefly 深耕中文 NLP 场景,围绕”数据—训练—评估”提供了一套完整的工具链:不仅提供训练代码,还配套开源了包含 1.15M 样本的中文指令数据集(firefly-train-1.1M)和在 HuggingFace 上开源的 Firefly 系列模型权重。
Firefly 的设计哲学是”大道至简”:训练配置使用直观的 JSON 文件,训练入口是单一的 train.py,通过 --train_args_file 参数指定不同配置文件来切换预训练、指令微调、DPO 对齐等训练模式。这种设计使代码量极小(核心逻辑不到 2000 行),易于理解和二次开发。
项目在 QLoRA 微调效果的验证上做得很扎实——在 Open LLM Leaderboard 上公开了使用 Firefly QLoRA 微调后的模型评测成绩,证明了 4-bit QLoRA 微调在中文场景的有效性。此外,Firefly 较早地集成了 unsloth 加速支持,将 unsloth 的内核优化与自身的训练管线结合。
功能概述
训练模式
Firefly 支持三种训练模式,通过 JSON 配置中的 task_type 字段切换:
| 训练模式 | task_type | train_mode | 说明 |
|---|---|---|---|
| 预训练 (Pretrain) | pretrain |
full |
全量参数预训练 |
| 指令微调 (SFT) | sft |
full / lora / qlora |
全量/LoRA/QLoRA 三种模式 |
| 偏好对齐 (DPO) | dpo |
qlora |
基于 QLoRA 的 DPO 对齐 |
模型覆盖
Firefly 支持 20+ 种中文社区主流模型:
| 厂商 | 模型系列 |
|---|---|
| 阿里 | Qwen, Qwen2, Qwen2.5 |
| 零一万物 | Yi-6B, Yi1.5 |
| Meta | Llama, Llama2, Llama3 |
| 微软 | Phi-3 |
| 谷歌 | Gemma |
| 面壁智能 | MiniCPM, MiniCPM3 |
| 智谱 | ChatGLM2 |
| 上海 AI Lab | InternLM |
| DeepSeek | Deepseek |
| Mistral | Mistral, Mixtral-8x7B, Zephyr |
| 百川 | Baichuan, Baichuan2 |
| 其他 | Orion, Xverse, Bloom, Falcon, TinyLlama, Vicuna, Ziya2 |
开源数据集
Firefly 配套了多套中英文训练数据集:
| 数据集 | 规模 | 说明 |
|---|---|---|
| firefly-train-1.1M | 1.15M 条 | 23 个中文 NLP 任务 + 人文数据 |
| moss-003-sft-data | 1M+ 条 | 复旦 MOSS 团队中英多轮对话 |
| ultrachat | 1.4M+ 条 | 清华英文多轮对话 |
| WizardLM_evol_instruct_V2_143k | 143k 条 | 英文复杂指令 |
| school_math_0.25M | 250k 条 | BELLE 数学运算指令 |
| shareAI/CodeChat | - | 代码问答与生成 |
| shareAI/ShareGPT-Chinese-English-90k | 90k 条 | 中英双语人机对话 |
| ultrachat_200k | 200k 条 | Zephyr 清洗的英文指令数据 |
| ultrafeedback_binarized | - | DPO 偏好对齐数据 |
Unsloth 加速集成
Firefly 较早集成了 unsloth 加速,通过在 JSON 配置中设置 "use_unsloth": true 即可启用。安装 unsloth 后端:
pip install git+https://github.com/unslothai/unsloth.git |
适用场景
- 中文垂直领域微调:利用 firefly-train-1.1M 中文数据集作为种子数据,叠加自有领域数据进行微调,适合医疗、法律、教育等中文场景。
- QLoRA 低资源训练:在消费级 GPU 上微调 Yi-6B、Qwen2.5-7B 等中文模型,6GB 显存即可训练。
- DPO 偏好对齐实验:利用 ultrafeedback_binarized 数据集做中文模型的偏好对齐,提升回答质量和安全性。
- 预训练研究:在小模型(如 BLOOM-1B1)上快速验证预训练方案,代码简洁易于修改。
- 学习与教学:代码量小、结构清晰,是三款框架中最适合学习大模型训练原理的入门项目。
快速上手
安装
git clone https://github.com/yangjianxin1/Firefly.git |
训练配置
Firefly 使用 JSON 文件配置训练参数,以 Yi-6B-Chat 的 QLoRA 指令微调为例(train_args/sft/qlora/yi-6b-sft-qlora.json):
{ |
执行训练
# 单卡 QLoRA 微调 |
数据格式
Firefly 的训练数据为 JSONL 格式,每行一条:
{"conversation": [{"human": "请用一句话介绍杭州", "assistant": "杭州是浙江省省会,以西湖美景和互联网产业闻名于世。"}]} |
源码架构
Firefly 的代码组织极为精简,核心逻辑清晰:
Firefly/ |
核心设计模式:
- 单文件入口:所有训练模式通过同一个
train.py分发,参数通过 JSON 文件注入,代码修改点极简。 - 配置即模式:
task_type(pretrain/sft/dpo)和train_mode(full/lora/qlora)的组合定义了训练行为,配置驱动一切。 - 模板驱动对话:通过
template_name自动匹配不同模型的对话格式(Yi 模板、Qwen 模板、Llama3 模板等),类似 LLaMA-Factory 的模板系统但更轻量。 - 组件化但非插件化:与 LLaMA-Factory 的插件式架构不同,Firefly 的组件之间是直接引用的,代码行数更少但扩展性较低。
实操 Demo
以下演示使用 Firefly 在单卡 RTX 4090(24GB)上对 Qwen2.5-7B 进行中文客服微调。
步骤 1:准备客服对话数据
创建 data/customer_service.jsonl:
{"conversation": [{"human": "我的订单怎么还没发货?", "assistant": "非常抱歉给您带来不便!请您提供订单编号,我马上帮您查询物流状态。通常在付款后24小时内发货,如遇大促期间可能会有延迟。"}]} |
步骤 2:创建 QLoRA 配置文件
创建 train_args/sft/qlora/qwen2.5-7b-cs-qlora.json:
{ |
步骤 3:训练与监控
# 启动训练 |
步骤 4:推理验证
cd script/chat |
对话测试:
User: 我买了两件商品,只收到一件怎么办? |
同类对比
| 维度 | Firefly | LLaMA-Factory | unsloth |
|---|---|---|---|
| Star 数 | 6.6k | 72.2k | 66.6k |
| 定位 | 中文场景一站式中 | 国际化统一微调框架 | 内核级训练加速 |
| 代码规模 | 极简(<2000 行核心) | 大型工程(5 万+ 行) | 中等 |
| 配置格式 | JSON | YAML | Python + WebUI |
| 模型数量 | 20+ | 100+ | 500+ (通用适配) |
| 训练方法 | Pretrain/SFT/DPO | Pretrain/SFT/RM/DPO/KTO/ORPO/PPO/SimPO | SFT/GRPO/Pretrain |
| 开源数据集 | 1.1M 中文指令数据 | 无 | 无 |
| 中文支持 | 深度优化(数据+模板+模型) | 通用支持 | 通用支持 |
| Unsloth 集成 | 原生支持 | 可选配置 | 自身 |
| GRPO 支持 | 不支持 | 不支持 | 原生支持 |
| 多模态 | 不支持 | 全面支持 | VLM GRPO |
| 社区活跃度 | 个人维护 | 200+ 贡献者 | 团队维护 |
| 学习曲线 | 最低 | 中等 | 低 |
| 许可证 | 暂无 | Apache-2.0 | Apache-2.0 + AGPL-3.0 |
Firefly 的独特定位在于”中文优先 + 极简设计”。对于中文 NLP 从业者来说,Firefly 的 1.1M 中文数据集和 20+ 中文模型模板是即插即用的资源。但如果你需要 GRPO 强化学习、多模态训练或生产级云原生部署,LLaMA-Factory 或 Axolotl 是更合适的选择。
参考资源
- GitHub 仓库: https://github.com/yangjianxin1/Firefly
- HuggingFace 组织: https://huggingface.co/YeungNLP — Firefly 系列开源模型权重
- firefly-train-1.1M 数据集: https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M
- 知乎专栏: 搜索”红雨瓢泼”关注作者杨建新的技术分享
- Open LLM Leaderboard 验证: Firefly QLoRA 微调模型的评测成绩已在 Leaderboard 公开,验证了 4-bit QLoRA 在中文场景的有效性



