FireFly
训练与微调

FireFly

Firefly 是一个开源的大型模型训练工具,支持包括 Qwen、Llama、Yi、Gemma 等多种主流模型。它提供了预训练、指令微调、DPO 以及全量参数训练、LoRA、QLoRA 等高效训练方法。Firefly 通过配置文件驱动,易于上手,并集成了 Unsloth 等加速技术,同时开源了高质量的训练数据集和模型权重,方便用户进行大模型的研究和应用开发。

快点收藏起来

什么是 Firefly

Firefly 是一个由 yangjianxin1 开发的开源项目,主要目标是为训练大型语言模型(LLMs)提供一套全面且易于使用的工具。根据其 GitHub 页面,Firefly 支持包括 Qwen、Llama、Yi、Gemma 等多种主流的开源大模型。该项目不仅支持预训练,还专注于指令微调(instruction fine-tuning)和 DPO(Direct Preference Optimization)等技术,旨在帮助用户高效地训练出符合特定需求的 LLMs。Firefly 的设计理念是让初学者也能快速上手模型训练,它通过提供清晰的配置文件和命令行接口,简化了复杂的训练流程。此外,Firefly 还集成了多种先进的训练加速技术,例如 Unsloth,以节省显存并加快训练速度。作为一个开源项目,Firefly 积极拥抱社区贡献,并提供了详细的文档和预处理好的数据集,方便用户进行研究和应用开发。无论是学术研究人员还是希望定制自己 LLM 的开发者,Firefly 都提供了一个强大而灵活的平台。

firefly-repo

FireFly 的主要内容包括:

📗 支持预训练、指令微调、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训练流程的有效性。

Firefly 的功能

Firefly 项目提供了丰富的功能,以支持高效且灵活的大模型训练:

  • 支持多种主流大模型: Firefly 兼容包括 Llama3、Gemma、MiniCPM、Llama、InternLM、Baichuan、ChatGLM、Yi、Deepseek、Qwen、Orion、Ziya、Xverse、Mistral、Mixtral-8x7B、Zephyr、Vicuna、Bloom 等在内的众多流行的开源大型语言模型。
  • 灵活的训练方式: 支持预训练、指令微调(SFT)、DPO 等多种训练任务类型,并支持全量参数训练、LoRA、QLoRA 等高效的微调方法。用户可以根据自己的需求选择最合适的训练策略。
  • 配置文件驱动: Firefly 使用简单的 YAML 配置文件来管理训练参数,用户可以通过修改配置文件轻松地定制训练过程,无需深入了解复杂的代码细节。
  • Unsloth 集成: 支持使用 Unsloth 库加速训练并显著节省显存,这对于资源有限的用户来说是一个非常实用的功能。
  • 对齐官方 Chat 模型模板: 在进行指令微调时,Firefly 能够与各个官方 Chat 模型的模板对齐,确保训练出的模型能够更好地进行对话交互。
  • 开源高质量数据集: Firefly 整理并开源了一系列高质量的指令微调数据集,例如 firefly-train-1.1M、moss-003-sft-data、ultrachat、WizardLM_evol_instruct_V2_143k、school_math_0.25M 等,方便用户直接使用。
  • 开源 Firefly 系列模型权重: Firefly 团队开源了他们自己训练的一系列指令微调模型权重,用户可以直接使用或者作为训练的起点。
  • QLoRA 训练有效性验证: Firefly 在 Open LLM Leaderboard 上验证了 QLoRA 训练流程的有效性,证明了其在资源效率和模型性能方面的优势。
  • 支持多种硬件: Firefly 可以运行在单 GPU 或多 GPU 环境下,通过 FSDP 或 Deepspeed 等技术支持分布式训练,方便用户在不同规模的硬件上进行模型训练。
  • 结果记录和检查点保存: Firefly 可以将训练结果和可选的检查点记录到 WandB 或 MLflow 等平台,方便用户进行实验跟踪和模型管理。

如何使用/快速开始

要开始使用 Firefly 训练您自己的大型语言模型,您可以按照以下步骤进行操作:

  1. 克隆 Firefly 代码仓库: 首先,您需要从 GitHub 克隆 Firefly 的代码仓库到您的本地机器上:
    git clone https://github.com/yangjianxin1/Firefly.git
    cd Firefly
  2. 安装依赖: 根据项目提供的 requirements.txt 文件安装所需的依赖库:
    pip install -r requirements.txt
  3. 准备数据集: 您可以使用 Firefly 提供的开源数据集,也可以准备您自己的数据集。数据集通常需要是 JSONL 格式。
  4. 配置训练参数:train_args 目录下找到与您想要训练的模型和训练方式相对应的配置文件(YAML 文件),并根据您的需求进行修改。例如,您可以设置模型名称、数据集路径、训练轮数、学习率等。
  5. 运行训练脚本: 使用 train.py 脚本启动训练过程,并指定您修改过的配置文件路径作为参数:
    python train.py --train_args_file train_args/your_config.yaml
  6. 监控训练过程: 您可以通过命令行输出或者配置的 WandB/MLflow 平台监控训练的进度和指标。
  7. 评估和使用模型: 训练完成后,您可以在指定的输出目录下找到训练好的模型权重,并使用它们进行评估或部署。

Firefly 的 GitHub 仓库中提供了详细的文档和不同模型、不同训练方式的配置文件示例,建议您仔细阅读这些文档,以便更好地理解和使用 Firefly。例如,您可以在 train_args 目录下找到针对 Llama、Qwen 等模型的 LoRA、QLoRA 等微调配置。此外,如果您希望使用 Unsloth 加速训练,可以在配置文件中启用相关选项。Firefly 旨在降低大模型训练的门槛,即使是初学者也可以通过简单的配置和脚本运行来开始自己的模型训练之旅。

相关导航