链载Ai

标题: 聊聊Firefly——开源且值得学习的LLM训练库 [打印本页]

作者: 链载Ai    时间: 1 小时前
标题: 聊聊Firefly——开源且值得学习的LLM训练库

概述

Firefly[1]是一个开源的大模型训练项目,支持对主流的大模型进行预训练、指令微调和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上验证了该方法的有效性,并且取得了非常不错的成绩。

本项目主要内容如下:

实践

Firefly官方基于该项目的训练代码,以及训练数据,训练并开源了以下模型权重。

模型

如下模型是官方在Firefly代码上训练的,训练脚本可以源码目录找到:train_args[4]

中文模型:

模型
基座模型
训练长度
firefly-baichuan2-13b[5]
baichuan-inc/Baichuan2-13B-Base
1024
firefly-baichuan-13b[6]
baichuan-inc/Baichuan-13B-Base
1024
firefly-qwen-7b[7]
Qwen/Qwen-7B
1024
firefly-chatglm2-6b[8]
THUDM/chatglm2-6b
1024
firefly-internlm-7b[9]
internlm/internlm-7b
1024
firefly-baichuan-7b[10]
baichuan-inc/baichuan-7B
1024
firefly-ziya-13b[11]
YeungNLP/Ziya-LLaMA-13B-Pretrain-v1
1024
firefly-bloom-7b1[12]
bigscience/bloom-7b1
1024
firefly-bloom-2b6-v2[13]
YeungNLP/bloom-2b6-zh
512
firefly-bloom-2b6[14]
YeungNLP/bloom-2b6-zh
512
firefly-bloom-1b4[15]
YeungNLP/bloom-1b4-zh
512

英文模型:

模型
基座模型
训练长度
firefly-mixtral-8x7b[16]
mistralai/Mixtral-8x7B-v0.1
1024
firefly-llama-30b[17]
huggyllama/llama-30b
1024
firefly-llama-13-v1.2[18]
NousResearch/Llama-2-13b-hf
1024
firefly-llama2-13b[19]
NousResearch/Llama-2-13b-hf
1024
firefly-llama-13b-v1.2[20]
huggyllama/llama-13b
1024
firefly-llama-13b[21]
huggyllama/llama-13b
1024

扩展项目:

训练数据

Firefly整理了如下指令集,并整理成统一的数据集格式:

数据集
介绍
firefly-train-1.1M[24]
我们收集了23种常见的中文NLP任务的数据,并且构造了许多与中华文化相关的数据,如对联、作诗、文言文翻译、散文、金庸小说等。对于每个任务,由人工书写若干种指令模板,保证数据的高质量与丰富度,数据量为115万
moss-003-sft-data[25]
由复旦大学MOSS团队开源的中英文多轮对话数据,包含100万+数据
ultrachat[26]
由清华大学开源的英文多轮对话数据,包含140万+数据
WizardLM_evol_instruct_V2_143k[27]
由WizardLM项目开源的英文指令微调数据集,通过Evol-Instruct方法让指令进化,加强指令的复杂度,以提升模型对复杂指令的遵循能力。包含143k条数据。
school_math_0.25M[28]
由BELLE项目组开源的数学运算指令数据,包含25万条数据。
shareAI/CodeChat[29]
主要包含逻辑推理、代码问答、代码生成相关语料样本。
shareAI/ShareGPT-Chinese-English-90k[30]
中英文平行双语优质人机问答数据集,覆盖真实复杂场景下的用户提问。
ultrachat_200k[31]
由Zephyr项目开源的英文指令微调数据,在ultrachat数据基础上进行清洗
ultrafeedback_binarized[32]
英文偏好数据集,可用于DPO训练

训练模型

train_args目录下存储了不同模型使用不同训练方式的配置文件,主要参数说明如下:

以下几个参数,当使用QLoRA训练的时候,需要设置:

关于deepspeed的参数配置,可按需自行修改。

训练脚本

全量参数预训练,将{num_gpus}替换为显卡数量:

deepspeed--num_gpus={num_gpus} train.py --train_args_file train_args/pretrain/full/bloom-1b1-pretrain-full.json

全量参数指令微调,将{num_gpus}替换为显卡数量:

deepspeed--num_gpus={num_gpus} train.py --train_args_file train_args/sft/full/bloom-1b1-sft-full.json

单卡QLoRA预训练:

python train.py--train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json

单卡QLoRA指令微调:

python train.py--train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json

多卡QLoRA预训练:

torchrun--nproc_per_node={num_gpus} train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json

多卡QLoRA指令微调:

torchrun--nproc_per_node={num_gpus} train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json

单卡QLoRA进行DPO训练:

python train.py--train_args_file train_args/sft/qlora/minicpm-2b-dpo-qlora.json

更详细的训练及推理使用说明,可以查看官网。

Loss计算

预训练时,我们采用经典的自回归损失,即每个位置的token都会参与loss计算。

指令微调时,仅计算assistant回复部分的loss。

这点还是蛮重要的,在一些训练框架中,不会提及也不会如此设计。

小结

我个人接触这个库比较早,之前也算是用过,但后面选型用的还是LLaMA-Factory;现在深入的再了解对比,其实个人玩LLM的话,还是可以考虑Firefly。首先,对比较于LLaMA-Factory,Firefly官方开发人员基于此项目训练了一批LLM,从数据集到训练脚本参数,都是慢慢的提供了,这在我看来是实实在在的开源了。对于学生或是个人了解LLM的训练过程来说,是一个很好的参考。其次的话,看过一些issue,包括我自己之前也写过几篇关于Firefly训练效率的文章,在训练效率和效果上的确是要比LLaMA-Factory要好一些。前段时间,Firefly官方发布了基于Firefly与QWen知识蒸馏的文章,但还没把代码放出来,如果能放出来的话,那更好了。不过最大的劣势则是对模型的支持没有LLaMA-Factory齐全,且维护更新、解决issue并没有那么活跃。

对于学生、业余爱好者来说,推荐从Firefly入手训练模型,再可以过渡到LLaMA-Factory那边去使用,在Firefly的训练中,可以接触到更多的训练细节与实践。







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5