SuperAPI AI 工具集

Firefly

Firefly 是一个开源的一站式大模型训练工具,支持对 Qwen2.5、Qwen2、Yi1.5、Phi-3、Llama3、Gemma、MiniCPM、Yi、Deepseek、Orion、Xverse、Mixtral-8x7B、Zephyr、Mistral、Baichuan2、Llama2、Llama、Qwen、Baichuan、ChatGLM2、InternLM、Ziya2、Vicuna、Bloom 等主流大模型进行预训练、指令微调和 DPO。项目支持全量参数训练、LoRA 和 QLoRA 高效训练,通过配置文件即可训练不同模型,并支持使用 Unsloth 加速训练与节省显存。Firefly 还开源了 firefly-train-1.1M 等指令微调数据集及多个 Firefly 系列模型权重,在 Open LLM Leaderboard 上验证了 QLoRA 训练流程的有效性。

访问官网

工具介绍

Firefly 是一个开源的一站式大模型训练工具,面向希望自行训练或微调大语言模型的开发者与研究者。它支持对主流开源大模型进行预训练、指令微调(SFT)和 DPO,包括但不限于 Qwen2、Qwen1.5、Qwen2.5、Yi-1.5、Yi、Llama3、Llama2、Llama、Gemma、MiniCPM、MiniCPM3、Phi-3、InternLM、Baichuan、Baichuan2、ChatGLM、Deepseek、Orion、Ziya、Xverse、Mistral、Mixtral-8x7B、Zephyr、Vicuna、Bloom 等。

一、主要能力

  1. 训练任务:支持预训练、指令微调(SFT)和 DPO。预训练采用经典自回归损失,所有位置的 token 都参与 loss 计算;指令微调仅计算 assistant 回复部分的 loss。
  2. 训练模式:支持全量参数训练、LoRA、QLoRA 高效训练。项目推荐在训练资源有限时使用 QLoRA 进行指令微调,并已在 Open LLM Leaderboard 上验证该方法有效。
  3. 模型适配:训练时与各官方 chat 模型的 template 对齐,代码针对不同 chat 模型的 template 做了适配。
  4. Unsloth 加速:支持使用 Unsloth 加速训练并节省显存。根据项目说明,使用 Unsloth 微调 Llama3-8B 仅需 7.75GB 显存,可减少 42.58% 显存占用,减少 30.72% 训练时间;在 Qwen2 上提速 47.32%,节省 39.13% 显存,最少仅需 8.43GB 显存。Unsloth x Qwen2 模型结构的 PR 已 merge 到 Unsloth 的 master 分支,并扩展 Unsloth 支持 Qwen2 模型结构,包括 Qwen1.5 系列的 Dense 模型。
  5. 数据集与模型权重:整理并开源指令微调数据集 firefly-train-1.1M、moss-003-sft-data、ultrachat、WizardLM_evol_instruct_V2_143k、school_math_0.25M,统一为相同数据格式;开源 Firefly 系列指令微调模型权重,如 firefly-mixtral-8x7b(Open LLM 排行榜分数 70.34)、firefly-baichuan2-13b、firefly-llama-30b、firefly-llama2-13b、firefly-llama-13b 等。
  6. 相关项目:LongQLoRA 用于高效扩展 LLama 上下文长度;Firefly-LLaMA2-Chinese 对 Llama2 进行中文词表扩充、增量预训练和多轮指令微调;LLMPruner 为大语言模型裁剪工具,并对 Bloom 进行词表裁剪。

二、使用方式 项目通过配置文件方式训练不同模型,训练参数配置存储在 train_args 目录下,可按需修改或添加。主要参数包括 output_dir、model_name_or_path、train_file、template_name、num_train_epochs、deepspeed、train_mode(full、lora 或 qlora,默认 qlora)、task_type(pretrain、sft 或 dpo,默认 sft)、per_device_train_batch_size、gradient_accumulation_steps、gradient_checkpointing、learning_rate、max_seq_length、max_prompt_length、logging_steps、save_steps、save_total_limit、lr_scheduler_type、warmup_steps、optim、seed、fp16、bf16、use_unsloth 等。使用 QLoRA 训练时还需设置 lora_rank、lora_alpha、lora_dropout。 训练数据为 jsonl 格式,其中 conversation 字段是必需的,可参考 data/dummy_data.jsonl;预训练数据格式参考 data/pretrain/dummy_pretrain.jsonl;DPO 数据格式参考 data/dummy_dpo.jsonl。 执行 requirements.txt 下的脚本安装依赖。对于绝大部分模型,在 torch==1.13、transformers==4.36 环境上调试和训练;Qwen1.5 需要将 transformers 更新至 4.37;Gemma 需要将 transformers 更新至 4.38.1,torch==2.0.0。使用 QLoRA 训练 Baichuan2 时需安装 torch==2.0 并卸载 xformers 和 apex;使用 QLoRA 训练 Qwen 时需卸载 flash-attn。若开启 Unsloth,需按说明安装或更新相关 Python 包。 若使用 LoRA 或 QLoRA 训练,项目仅保存 adapter 权重和配置文件,需要使用 script/merge_lora.py 将 adapter 权重与 base model 合并。项目提供多轮对话交互脚本,位于 script/chat 目录,可兼容本项目训练的所有模型进行推理;脚本中 template_name 需与训练时一致,top_p、temperature、repetition_penalty、do_sample 等参数对生成效果影响较大,可按场景调试。推理脚本支持使用 base model 和 adapter 进行推理,也支持使用 4bit 进行推理。

三、适用场景 适用于需要对主流开源大模型进行预训练、指令微调或 DPO 的研究与开发场景;适用于显存或算力有限、希望通过 LoRA/QLoRA 或 Unsloth 降低训练成本的场景;也适用于希望使用开源中文指令数据集和已开源模型权重开展实验的场景。

四、限制与注意事项 项目说明中列出,由于模型参数量限制、训练数据清洗程度等因素,开源模型可能存在以下局限性:对于事实性知识容易产生错误回复;由于未经过无害化微调,可能产生歧视、危害、违背伦理道德的言论;在代码、推理上的能力仍有欠缺。基于以上局限性,项目要求代码、数据、模型不得用于对社会造成危害的用途,且应遵循基座模型的商业许可。训练中如遇 OOM,可缩小 per_device_train_batch_size、max_seq_length 等参数,或设置 gradient_checkpointing=true。若训练中报错,可先查看 FAQ。如需指定使用 0 和 1 号卡训练,可通过相关方式设置。使用 Qwen-Base 和 Yi-Base 时,建议设 template_name="default" 以避免特定问题;对 Qwen-Chat 和 Yi-Chat 模型进行 SFT 则不会产生该问题,可分别设为 "qwen" 和 "yi"。该问题在 Qwen1.5 中不存在。若使用本项目的数据、代码或模型,需引用本项目。