Firefly系列模型一脉相承,专注于低资源增量预训练,既支持对Baichuan2、Qwen、InternLM等原生中文模型进行增量预训练,也可对LLaMA2、Falcon等英文模型进行中文词表扩充,然后进行增量预训练。Firfly系列模型均已开源到wisemodel.cn社区,欢迎大家注册使用。
开源的Firefly-LLaMA2-Chinese系列模型,都是中英双语系列模型。以LLaMA2🦙为基座模型,对LLaMA2进行中文词表扩充,使用22GB中英文预训练语料对其进行增量预训练。最后使用大规模中英文多轮对话指令对模型进行训练。同时对模型进行了榜单评测和人工评测,与现有的开源工作相比,具有不错的竞争力。
在Open LLM Leaderboard和CMMLU上,Firefly系列模型超越了Linly、Yayi、FlagAlpha等模型;在Open LLM Leaderboard上超越Ziya,在CMMLU上比Ziya略低0.43分。在人工测评中,Firefly系列模型以33.08%获胜、60.77%平局、6.15%失败的成绩,超越Linly。Firefly也开源了firelfy-baichuan2-13b模型,在OpenCompass的CMMLU榜单上以56.83的分数,位列第8,比百川官方模型略低1.57分。
更重要的是,在整个增量预训练和指令微调阶段,Firefly最多仅使用了4*V100的GPU,训练更加低资源高效。相较于Ziya的160*A100,Linly的32*A100,Chinese-LLaMA-Alpaca的48*A40,Firefly所使用的训练资源少得多。
授人以鱼🐟,不如授人以渔🎣,Firefly不仅开源了模型权重,也开源了项目全流程的训练代码、训练数据,以及训练细节。
主要工作:
-
📗 对LLaMA2进行中文词表扩充,提高编解码效率。与原始LLaMA2相对,中文序列长度减少约54.11%,变相提升了模型在中文域的最大长度。
-
📗 使用大规模中英文语料进行增量预训练,然后进行多轮指令微调。开源7B和13B的Base和Chat的模型权重。
-
📗 收集、整理并开源训练数据,包括22GB中英文预训练语料,以及多轮指令数据。
-
📗 开源增量预训练、指令微调等全流程代码。支持在主流的开源模型上进行增量预训练和指令微调,如Baichuan2、Baichuan、Qwen、InternLM、LLaMA2、LLaMA、Falcon等。
-
📗 对模型进行开源榜单评测和人工评测。构建人工评测集,包含13种评测任务,对模型进行人工评测。
模型列表 & 数据列表
Firefly开源了7B和13B的Base与Chat模型。Base模型是基于LLaMA2扩充中文词表后增量预训练得到的模型,Chat模型是在Base模型的基础上进行多轮对话指令微调。
为了探究基座模型对指令微调的影响,也微调了baichuan2-base模型,获得firefly-baichuan2-13b,具有不错的效果。更多中文微调,可查看Firefly项目。
模型 | 类型 | 训练任务 | 训练长度 |
---|---|---|---|
Firefly-LLaMA2-7B-Base | 基座模型 | CLM | 1024 |
Firefly-LLaMA2-13B-Base | 基座模型 | CLM | 1024 |
Firefly-LLaMA2-7B-Chat | 指令模型 | 多轮指令微调 | 1024 |
Firefly-LLaMA2-13B-Chat | 指令模型 | 多轮指令微调 | 1024 |
Firefly-Baichuan-13B | 指令模型 | 多轮指令微调 | 1024 |
Firefly-Baichuan2-13B | 指令模型 | 多轮指令微调 | 1024 |
Firefly-LLaMA2-7B-Base:https://wisemodel.cn/models/YeungNLP/firefly-llama2-7b-base
Firefly-LLaMA2-13B-Base:https://wisemodel.cn/models/YeungNLP/firefly-llama2-13b-base
Firefly-LLaMA2-7B-Chat:https://wisemodel.cn/models/YeungNLP/firefly-llama2-7b-chat
Firefly-LLaMA2-13B-Chat:https://wisemodel.cn/models/YeungNLP/firefly-llama2-13b-chat
Firefly-Baichuan-13B:https://wisemodel.cn/models/YeungNLP/firefly-baichuan-13b
Firefly-Baichuan2-13B:https://wisemodel.cn/models/YeungNLP/firefly-baichuan2-13b
本项目使用的数据如下表,其中firefly-pretrain-dataset是我们增量预训练阶段所使用的数据:
数据集 | 介绍 |
---|---|
firefly-pretrain-dataset | Firefly项目整理和使用的22GB预训练数据,主要包含CLUE、ThucNews、CNews、COIG、维基百科等开源数据集,以及我们收集的古诗词、散文、文言文等。 |
moss-003-sft-data | 由复旦大学MOSS团队开源的中英文多轮对话数据,包含100万+数据 |
ultrachat | 由清华大学开源的英文多轮对话数据,包含140万+数据 |
school_math_0.25M | 由BELLE项目组开源的数学运算指令数据,包含25万条数据。 |
firefly-pretrain-dataset:
https://wisemodel.cn/datasets/YeungNLP/firefly-pretrain-dataset
moss-003-sft-data:
https://wisemodel.cn/datasets/YeungNLP/moss-003-sft-data
ultrachat:https://wisemodel.cn/datasets/YeungNLP/ultrachat
school_math_0.25M:
https://wisemodel.cn/datasets/YeungNLP/school_math_0.25M
模型评测
Firefly在CMMLU和Open LLM Leaderboard上分别对模型的中文和英文能力进行了客观评测,并且在构建的人工评测集上进行了人工评测。 Open LLM Leaderboard和CMMLU榜单倾向于评测大模型的做题能力,不够全面,所以Firefly进一步进行了人工评测。
Open LLM Leaderboard
模型 | Average | ARC | HellaSwag | MMLU | TruthfulQA |
---|---|---|---|---|---|
chinese-alpaca-2-13b | 60.94 | 58.7 | 79.74 | 55.1 | 50.22 |
openbuddy-llama2-13b-v8.1 | 60.47 | 55.97 | 79.79 | 54.95 | 51.16 |
flagalpha-llama2-13b-chat | 60.41 | 55.97 | 82.05 | 54.74 | 48.9 |
llama-2-13b-chat | 59.93 | 59.04 | 81.94 | 54.64 | 44.12 |
vicuna-13b-v1.1 | 59.22 | 52.73 | 80.13 | 51.94 | 52.08 |
guanaco-13b | 59.18 | 57.85 | 83.84 | 48.28 | 46.73 |
firefly-llama2-13b-chat | 59.05 | 57.51 | 77.94 | 52.56 | 48.18 |
llama-2-7b-chat | 56.34 | 52.9 | 78.55 | 48.32 | 45.57 |
flagalpha-llama2-7b-chat | 56.13 | 52.39 | 77.52 | 47.72 | 46.87 |
yayi-7b-llama2 | 54.45 | 55.03 | 77.84 | 40.92 | 44.02 |
chinese-alpaca-2-7b | 54.33 | 49.57 | 72.62 | 46.5 | 48.63 |
firefly-llama2-7b-chat | 54.19 | 51.19 | 73.32 | 45.47 | 46.78 |
yayi-13b-llama2 | 51.06 | 48.55 | 74.82 | 38.68 | 42.19 |
linly-llama2-7b | 49.06 | 48.04 | 73.25 | 35.04 | 39.92 |
linly-llama2-13b | 38.22 | 33.62 | 39.59 | 33.97 | 45.71 |
ziya-llama-13b* | - | - | 76.9 | 50.3 | - |
*表示分数来源于OpenCompass官方,而非Open LLM Leaderboard官方数据
Conclusion:Firefly的模型保留了llama2模型优秀的英文能力,在Open LLM Leaderboard上,与llama2-chat、vicuna-v1.1、guanaco等模型的表现及其接近。
CMMLU榜单
模型 | CMMLU | 训练细节 |
---|---|---|
firefly-baichuan2-13b | 56.83 | 4*V100,QLoRA,指令微调 |
chinese-alpaca-2-13b | 45.17 | 48*A40,LoRA,词表扩充 + 增量预训练 + 指令微调 |
openbuddy-llama2-13b-v8.1 | 41.66 | 全量参数训练,词表扩充 + 指令微调 |
chinese-alpaca-2-7b | 40.86 | 48*A40,LoRA,词表扩充 + 增量预训练 + 指令微调 |
ziya-llama-13b* | 39.9 | 160*A100,全量参数训练,词表扩充 + 增量预训练 + 指令微调 + RLHF |
chinese-alpaca-plus-13b* | 39.9 | 48*A40,LoRA,词表扩充 + 增量预训练 + 指令微调 |
firefly-llama2-13b-chat | 39.47 | 4*V100,QLoRA,词表扩充 + 增量预训练 + 指令微调 |
flagalpha-llama2-13b-chat | 39.20 | LoRA,指令微调 |
llama-2-13b-chat | 38.65 | 全量参数训练,预训练 + 指令微调 + RLHF(全流程为英文) |
firefly-llama2-7b-chat | 34.03 | 4*V100,QLoRA,词表扩充 + 增量预训练 + 指令微调 |
llama-2-7b-chat | 33.76 | 全量参数训练,预训练 + 指令微调 + RLHF(全流程为英文) |
flagalpha-llama2-7b-chat | 32.61 | LoRA,指令微调 |
chinese-alpaca-plus-7b* | 32.6 | 48*A40,LoRA,词表扩充 + 增量预训练 + 指令微调 |
yayi-13b-llama2 | 30.73 | 指令微调 |
yayi-7b-llama2 | 30.47 | 指令微调 |
linly-llama2-7b | 28.68 | 32*A100,全量参数训练,词表扩充 + 混合训练 |
linly-llama2-13b | 26.32 | 32*A100,全量参数训练,词表扩充 + 混合训练 |
Firefly统一采用OpenCompass工具来离线评测CMMLU,其中*表示结果来源于OpenCompass官方榜单或者由模型作者自测的分数。
Conclusions:
-
与llama-2-chat相比,我们的模型在中文方面的能力具有一定的提升。
-
对于中文词表扩充模型而言,我们的模型大幅领先全量训练的linly,与全量训练的ziya、chinese-alpaca-1及其接近。
-
firefly-baichuan2-13b一骑绝尘,并且在OpenCompass的CMMLU榜单,该分数可排第8,小幅落后于百川官方模型,进一步验证了基座模型的重要性。
-
我们的模型在CMMLU上的指标与chinese-alpaca-2也存在一定的差距。这一现象很大程度与增量预训练数据量和数据分布相关,我们的增量预训练数据仅为22GB(未充分使用,详情见训练细节),增量预训练不够充分,且大部分为新闻语料,对于CMMLU能力的提升有限。
人工评测
Firefly构建了评测集,其中包含13种评测任务,评测数据详见data/firefly-eval.xlsx。大部分数据从Belle数据中进行采样和优化。每种任务包含10条数据,一共130条数据。13种任务包含:头脑风暴、分类、Close QA、代码生成、 信息抽取、开放式生成、有害性检验、数学题、阅读理解、Open QA、Rewrite、Summarization、翻译。
评测标准如下:
-
对于同一道题目,对两两模型的生成结果进行比较,存在胜负平三种关系。
-
对于客观题,如果两个模型均回答正确,或均回答错误,则为平局。
-
对于主观题,回答更加详细、真实、细节更丰富,则为获胜。当两者内容正确,并且详细程度非常接近时,或者各有千秋时,可视为平局。
-
对于中文题目,如果目标回复为中文,但模型却回复英文,则判为错误。
详细的评测结果可参考:人工评测结果。在评测中,Firefly遵守设定的评测标准,但依旧难以完全避免主观因素的影响, 本着公开透明的原则,Firefly公开了评测细节,大家可比较模型效果。
同为基于LLaMA2进行汉化的模型,对Firefly-LLaMA2-13B-Chat和Linly-LLaMA2-13B进行了人工测评,从评测结果来看,Firefly系列模型存在非常大的优势。并且与Llama2-Chat-13B也进行了人工评测,也存在非常大的优势。
模型 | 获胜 | 平局 | 失败 |
---|---|---|---|
Firefly-LLaMA2-13B-Chat VS Linly-LLaMA2-13B | 43(33.08%) | 79(60.77%) | 8(6.15%) |
Firefly-LLaMA2-13B-Chat VS Llama2-Chat-13B | 86(66.15%) | 40(30.77%) | 4(3.08%) |
训练细节
Firefly的训练流程在QLoRA上进行优化,流程大致如下:
-
对LLaMA2进行中文词表扩充,提高模型在中文上的编解码效率。我们使用了Chinese-LLaMA-Alpaca-2项目扩充后的词表。
-
使用22GB中英文语料,对扩充词表后的模型进行增量预训练,采用自回归任务。
-
使用两百多万条中英文多轮对话指令数据,对增量预训练模型进行指令微调。
Firefly对LLaMA2的词表进行扩充,加入了常见的中文token,提高模型对中文的编解码效率。Firefly在CNews数据集上对新的tokenizer进行了测试,经过词表扩充后,token数量由2.98亿减少为1.37亿, 长度减少约54.11%。对于中文任务,不仅极大地提高了模型的训练和推理效率,并且变相地提高了模型的最大长度。
Firefly系列将增量预训练数据集命名为firefly-pretrain-dataset,主要包含CLUE、ThucNews、CNews、COIG、维基百科等开源数据集,以及我们收集的古诗词、散文、文言文等,数据分布如下图。由于训练资源等原因,在增量预训练阶段,我们并未充分利用全部数据,仅消耗了大约2B的token。
指令微调的数据主要包括UltraChat、Moss、school math等数据,对这些数据进行清洗、过滤、采样、合并等操作,最终获得两百多万条数据,原始数据详见Firefly项目。
在整个训练流程中,我们最多仅使用了4*V100 GPU,两个阶段的训练长度均为1024,LoRA rank=64, LoRA alpha=16。在预训练与指令微调阶段,word embedding与lm_head的权重均参与训练。7B与13B模型,最终参与训练的参数量分别约为612.9M和816.6M。指令微调阶段使用Firefly项目的训练代码。
Firefly-LLaMA2-Chat模型的训练loss曲线如下图所示,训练loss具有良好的收敛性。7b和13b模型分别对应粉色和橙色曲线:
结语
Firefly探索了一种基于QLoRA的轻量级增量预训练和指令微调方案,并且在公开榜单和人工评测中验证了该方案的有效性。
虽然Firefly收集了22GB的增量预训练数据,但与动辄上百GB或者上千亿token的其他中文Llama项目相比,仍是相形见绌。并且由于训练资源的问题,在增量预训练阶段,Firefly并未完全使用这些数据,大约仅消耗了2B token。
在模型词表扩充的情况下,这会导致新增的词向量训练不够充分,但最终的评测结果仍足以表明我们的方法是有效的。如果直接在中文Base模型上使用该方案进行垂直域增量预训练,不改变模型词表,模型将会在垂直域具有更优秀的效果。
始智AI wisemodel
构建中立开放AI开源社区,共建中国AI创新生态。
公众号
在中国做开源社区是件非常充满挑战的事,也是一项需要长期坚持和投入的工作,希望大家多多支持,多点包容和多点耐心!欢迎扫码添加wisemodel助手,加入始智AI-wisemodel社区用户群,添加请注明“姓名-单位-职位”信息。