本项目的目标是促进中文对话大模型开源社区的发展,愿景是成为能够帮到每一个人的LLM Engine。
相比如何做好大语言模型的预训练,BELLE更关注如何在开源预训练大语言模型的基础上,帮助每一个人都能够得到一个属于自己的、效果尽可能好的具有指令表现能力的语言模型,降低大语言模型、特别是中文大语言模型的研究和应用门槛。为此,BELLE项目会持续开放指令训练数据、相关模型、训练代码、应用场景等,也会持续评估不同训练数据、训练算法等对模型表现的影响。BELLE针对中文做了优化,模型调优仅使用由ChatGPT生产的数据(不包含任何其他数据)。
下图是一个可以使用
App在设备端本地
运行4bit量化的
BELLE-7B模型
,在M1 Max CPU上实时运行的效果(未加速)。App下载详见
App配套模型下载及使用说明
,App
下载链接
,目前仅提供了mac os版本。模型需要单独下载。
模型经过量化后,
效果损失明显,我们将持续研究如何提升
。
🔄 最近更新
📝 项目主要内容
🚀 训练代码
详见
BELLE/train
,尽可能简化的一个训练代码实现,集成了Deepspeed-Chat,支持finetune,lora,并提供了相关的docker
📊 数据开放
🧐 验证集合&验证方法
详见
BELLE/eval
,一个1k+的测试集合,和对应打分prompt。包含多个类别,采用GPT-4或者ChatGPT打分。同时提供了一个打分的网页,方便针对单个case使用。欢迎大家通过PR提供更多的测试用例。
🤖 模型
详见
BELLE/models
⚖️ 模型量化gptq
详见
BELLE/gptq
,参考gptq的实现,对本项目中相关模型进行了量化
🌐 Colab
提供了colab上面可运行的推理代码
Colab
💬 ChatBELLE App
详见
BELLE/chat
,基于
BELLE
模型的跨平台离线大语言模型交谈App。使用量化后的离线端上模型配合Flutter,可在macOS(已支持)、Windows、Android、iOS等设备上运行。
📑 研究报告
详见
BELLE/docs
,其中会定期更新本项目相关的研究报告工作
欢迎大家通过issue贡献更多的prompts!
📑 研究报告
为了推动开源大语言模型的发展,大家投入了大量精力开发能够类似于ChatGPT的低成本模型。 首先,为了提高模型在中文领域的性能和训练/推理效率,我们进一步扩展了LLaMA的词汇表,并在34亿个中文词汇上进行了二次预训练。
此外,目前可以看到基于ChatGPT产生的指令训练数据方式有:1)参考Alpaca基于GPT3.5得到的self-instruct数据; 2)参考Alpaca基于GPT4得到的self-instruct数据;3)用户使用ChatGPT分享的数据ShareGPT。 在这里,我们着眼于探究训练数据类别对模型性能的影响。具体而言,我们考察了训练数据的数量、质量和语言分布等因素,以及我们自己采集的中文多轮对话数据,以及一些公开可访问的高质量指导数据集。
为了更好的评估效果,我们使用了一个包含一千个样本和九个真实场景的评估集来测试各种模型,同时通过量化分析来提供有价值的见解,以便更好地促进开源聊天模型的发展。
这项研究的目标是填补开源聊天模型综合评估的空白,以便为这一领域的持续进步提供有力支持。
实验结果如下:
Factor
|
Base model
|
Training data
|
Score_w/o_others
|
词表扩充
|
LLaMA-7B-EXT
|
zh(alpaca-3.5&4) + sharegpt
|
0.670
|
LLaMA-7B
|
zh(alpaca-3.5&4) + sharegpt
|
0.652
|
数据质量
|
LLaMA-7B-EXT
|
zh(alpaca-3.5)
|
0.642
|
LLaMA-7B-EXT
|
zh(alpaca-4)
|
0.693
|
数据语言分布
|
LLaMA-7B-EXT
|
zh(alpaca-3.5&4)
|
0.679
|
LLaMA-7B-EXT
|
en(alpaca-3.5&4)
|
0.659
|
LLaMA-7B-EXT
|
zh(alpaca-3.5&4) + sharegpt
|
0.670
|
LLaMA-7B-EXT
|
en(alpaca-3.5&4) + sharegpt
|
0.668
|
数据规模
|
LLaMA-7B-EXT
|
zh(alpaca-3.5&4) + sharegpt
|
0.670
|
LLaMA-7B-EXT
|
zh(alpaca-3.5&4) + sharegpt
+ BELLE-0.5M-CLEAN
|
0.762
|
-
|
ChatGPT
|
-
|
0.824
|
其中
BELLE-0.5M-CLEAN
是从230万指令数据中清洗得到0.5M数据,其中包含单轮和多轮对话数据,和之前开放的0.5M数据不是同一批数据。
需要强调指出的是
:通过案例分析,我们发现我们的评估集在全面性方面存在局限性,这导致了模型分数的改善与实际用户体验之间的不一致。构建一个高质量的评估集是一个巨大的挑战,因为它需要在保持平衡难易程度的同时,包含尽可能多样的使用场景。如果评估样本主要都过于困难,那么所有模型的表现将会很差,使得辨别各种训练策略的效果变得具有挑战性。相反,如果评估样本都相对容易,评估将失去其比较价值。此外,必须确保评估数据与训练数据保持独立。
基于这些观察,我们谨慎地提醒不要假设模型仅通过在有限数量的测试样本上获得良好结果就已经达到了与ChatGPT相当的性能水平。我们认为,优先发展全面评估集具有重要意义。
为了实现对大语言模型的指令调优,受限于资源和成本,许多研究者开始使用参数高效的调优技术,例如LoRA,来进行指令调优,这也取得了一些令人鼓舞的成果。 相较于全参数微调,基于LoRA的调优在训练成本方面展现出明显的优势。 在这个研究报告中,我们选用LLaMA作为基础模型,对全参数微调和基于LoRA的调优方法进行了实验性的比较。
实验结果揭示,选择合适的基础模型、训练数据集的规模、可学习参数的数量以及模型训练成本均为重要因素。
我们希望本文的实验结论能对大型语言模型的训练提供有益的启示,特别是在中文领域,协助研究者在训练成本与模型性能之间找到更佳的权衡策略。 实验结果如下:
Model
|
Average Score
|
Additional Param.
|
Training Time (Hour/epoch)
|
LLaMA-13B + LoRA(2M)
|
0.648
|
28M
|
8
|
LLaMA-7B + LoRA(4M)
|
0.624
|
17.9M
|
11
|
LLaMA-7B + LoRA(2M)
|
0.609
|
17.9M
|
7
|
LLaMA-7B + LoRA(0.6M)
|
0.589
|
17.9M
|
5
|
LLaMA-7B + FT(2M)
|
0.710
|
-
|
31
|
LLaMA-7B + LoRA(4M)
|
0.686
|
-
|
17
|
LLaMA-7B + FT(2M)
+ LoRA(math_0.25M)
|
0.729
|
17.9M
|
3
|
LLaMA-7B + FT(2M)
+ FT(math_0.25M)
|
0.738
|
-
|
6
|
其中的score是基于本项目集目前开放的1000条评估集合得到。
其中LLaMA-13B + LoRA(2M) 代表了一个使用LLaMA-13B作为基础模型和LoRA训练方法,在2M指令数据上进行训练的模型。而LLaMA-7B + FT(2M) 代表了一个使用全参数微调进行训练的模型。
LLaMA-7B + FT(2M) + LoRA(math_0.25M) 代表了一个在0.25M数学指令数据上,以LLaMA-7B + FT(2M)作为基础模型并使用LoRA训练方法进行训练的模型。LLaMA-7B + FT(2M) + FT(math_0.25M) 代表了一个使用增量全参数微调进行训练的模型。关于训练时间,所有这些实验都是在8块NVIDIA A100-40GB GPU上进行的。
其中的math_0.25M是开放的0.25M数学数据库。在实验过程中,根据我们的评估(详见论文),我们的模型在数学任务上表现不佳,得分大多低于0.5。为了验证 LoRA 在特定任务上的适应能力,我们使用增量0.25M数学数据集(math_0.25M)来调整指令遵循的大型语言模型(我们选择LLaMA-7B+FT(2M)作为基础模型)。作为对比,我们使用了学习速率为5e-7的增量微调方法,并进行了2个时期的训练。因此,我们得到了两个模型,一个是LLaMA-7B+FT(2M)+LoRA(math_0.25M),另一个是LLaMA-7B+FT(2M)+FT(math_0.25M)。 从实验结果可以看出,增量微调仍然表现更好,但需要更长的训练时间。LoRA和增量微调都提高了模型的整体性能。从附录中的详细数据可以看出,LoRA和增量微调都在数学任务中显示出显著的改进,而只会导致其他任务的轻微性能下降。具体而言,数学任务的表现分别提高到了0.586和0.559。
可以看到:1) 选择基础模型对于 LoRA 调整的有效性具有显著影响;2)增加训练数据量可以持续提高LoRA模型的有效性;3)LoRA 调整受益于模型参数的数量。对于LoRA方案的使用,我们建议可以在已经完成了指令学习的模型的基础上针对特定任务做loRA的自适应训练。
同样地,该论文中的相关模型也会尽快开放在本项目中。
⚠️ 局限性、使用限制与免责声明
基于当前数据和基础模型训练得到的SFT模型,在效果上仍存在以下问题:
-
在涉及事实性的指令上可能会产生违背事实的错误回答。
-
对于具备危害性的指令无法很好的鉴别,由此会产生危害性言论。
-
在一些涉及推理、代码、多轮对话等场景下模型的能力仍有待提高。
基于以上模型局限性,我们要求开发者仅将我们开源的代码、数据、模型及后续用此项目生成的衍生物用于研究目的,不得用于商业,以及其他会对社会带来危害的用途。
本项目仅可应用于研究目的,项目开发者不承担任何因使用本项目(包含但不限于数据、模型、代码等)导致的危害或损失。详细请参考
免责声明
。
📌 引用
如果使用本项目的代码、数据或模型,请引用本项目。
@misc{BELLE,
author = {Yunjie Ji, Yong Deng, Yan Gong, Yiping Peng, Qiang Niu, Baochang Ma and Xiangang Li},
title = {BELLE: Be Everyone's Large Language model Engine },
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/LianjiaTech/BELLE}},
@article{belle2023exploring,
title={Exploring the Impact of Instruction Data Scaling on Large Language Models: An Empirical Study on Real-World Use Cases},
author={Yunjie Ji, Yong Deng, Yan Gong, Yiping Peng, Qiang Niu, Lei Zhang, Baochang Ma, Xiangang Li},
journal={arXiv preprint arXiv:2303.14742},
year={2023}
当然,你也需要引用原始的BLOOM论文、LLaMA论文、Stanford Alpaca和Self-Instruct论文。
Read this in English.
本项目的目标是促进中文对话大模型开源社区的发展,愿景是成为能够帮到每一个人的LLM Engine。
相比如何做好大语言模型的预训练,BELLE更关注如何在开源预训练大语言模型的基础上,帮助每一个人都能够得到一个属于自己的、效果尽可能好的具有指令表现能力的语言模型,降低大语言模型、特别是中文大语言模型的研究和应用门槛。为此,BELLE项目会持续开放指令训练数据、相关模型、训练代码、应用场景等,也会持续评估不同训练数据、训练算法等对模型表现的影响。BELLE针对中文做了优化,模型调优仅使用由ChatGPT生产的数据(不包含任何其他数据)。
下图是一个可以使用App在设备端本地运行4bit量化的BELLE-7B模型,在M1 Max CPU上实时运行的效果(未加速)。App下载详见App配套模型下载及使用说明,App下载链接,目前仅提供了mac os版本。模型需要单独下载。模型经过量化后,效果损失明显,我们将持续研究如何提升。
🔄 最近更新
📝 项目主要内容
🚀 训练代码
详见BELLE/train,尽可能简化的一个训练代码实现,集成了Deepspeed-Chat,支持finetune,lora,并提供了相关的docker
📊 数据开放
🧐 验证集合&验证方法
详见BELLE/eval,一个1k+的测试集合,和对应打分prompt。包含多个类别,采用GPT-4或者ChatGPT打分。同时提供了一个打分的网页,方便针对单个case使用。欢迎大家通过PR提供更多的测试用例。
🤖 模型
详见BELLE/models
⚖️ 模型量化gptq
详见BELLE/gptq,参考gptq的实现,对本项目中相关模型进行了量化
🌐 Colab
提供了colab上面可运行的推理代码Colab
💬 ChatBELLE App
详见BELLE/chat,基于BELLE模型的跨平台离线大语言模型交谈App。使用量化后的离线端上模型配合Flutter,可在macOS(已支持)、Windows、Android、iOS等设备上运行。
📑 研究报告
详见BELLE/docs,其中会定期更新本项目相关的研究报告工作
欢迎大家通过issue贡献更多的prompts!
📑 研究报告
为了推动开源大语言模型的发展,大家投入了大量精力开发能够类似于ChatGPT的低成本模型。 首先,为了提高模型在中文领域的性能和训练/推理效率,我们进一步扩展了LLaMA的词汇表,并在34亿个中文词汇上进行了二次预训练。
此外,目前可以看到基于ChatGPT产生的指令训练数据方式有:1)参考Alpaca基于GPT3.5得到的self-instruct数据; 2)参考Alpaca基于GPT4得到的self-instruct数据;3)用户使用ChatGPT分享的数据ShareGPT。 在这里,我们着眼于探究训练数据类别对模型性能的影响。具体而言,我们考察了训练数据的数量、质量和语言分布等因素,以及我们自己采集的中文多轮对话数据,以及一些公开可访问的高质量指导数据集。
为了更好的评估效果,我们使用了一个包含一千个样本和九个真实场景的评估集来测试各种模型,同时通过量化分析来提供有价值的见解,以便更好地促进开源聊天模型的发展。
这项研究的目标是填补开源聊天模型综合评估的空白,以便为这一领域的持续进步提供有力支持。
实验结果如下:
Factor | Base model | Training data | Score_w/o_others |
词表扩充 | LLaMA-7B-EXT | zh(alpaca-3.5&4) + sharegpt | 0.670 |
LLaMA-7B | zh(alpaca-3.5&4) + sharegpt | 0.652 |
数据质量 | LLaMA-7B-EXT | zh(alpaca-3.5) | 0.642 |
LLaMA-7B-EXT | zh(alpaca-4) | 0.693 |
数据语言分布 | LLaMA-7B-EXT | zh(alpaca-3.5&4) | 0.679 |
LLaMA-7B-EXT | en(alpaca-3.5&4) | 0.659 |
LLaMA-7B-EXT | zh(alpaca-3.5&4) + sharegpt | 0.670 |
LLaMA-7B-EXT | en(alpaca-3.5&4) + sharegpt | 0.668 |
数据规模 | LLaMA-7B-EXT | zh(alpaca-3.5&4) + sharegpt | 0.670 |
LLaMA-7B-EXT | zh(alpaca-3.5&4) + sharegpt + BELLE-0.5M-CLEAN | 0.762 |
- | ChatGPT | - | 0.824 |
其中BELLE-0.5M-CLEAN是从230万指令数据中清洗得到0.5M数据,其中包含单轮和多轮对话数据,和之前开放的0.5M数据不是同一批数据。
需要强调指出的是:通过案例分析,我们发现我们的评估集在全面性方面存在局限性,这导致了模型分数的改善与实际用户体验之间的不一致。构建一个高质量的评估集是一个巨大的挑战,因为它需要在保持平衡难易程度的同时,包含尽可能多样的使用场景。如果评估样本主要都过于困难,那么所有模型的表现将会很差,使得辨别各种训练策略的效果变得具有挑战性。相反,如果评估样本都相对容易,评估将失去其比较价值。此外,必须确保评估数据与训练数据保持独立。
基于这些观察,我们谨慎地提醒不要假设模型仅通过在有限数量的测试样本上获得良好结果就已经达到了与ChatGPT相当的性能水平。我们认为,优先发展全面评估集具有重要意义。
为了实现对大语言模型的指令调优,受限于资源和成本,许多研究者开始使用参数高效的调优技术,例如LoRA,来进行指令调优,这也取得了一些令人鼓舞的成果。 相较于全参数微调,基于LoRA的调优在训练成本方面展现出明显的优势。 在这个研究报告中,我们选用LLaMA作为基础模型,对全参数微调和基于LoRA的调优方法进行了实验性的比较。
实验结果揭示,选择合适的基础模型、训练数据集的规模、可学习参数的数量以及模型训练成本均为重要因素。
我们希望本文的实验结论能对大型语言模型的训练提供有益的启示,特别是在中文领域,协助研究者在训练成本与模型性能之间找到更佳的权衡策略。 实验结果如下:
Model | Average Score | Additional Param. | Training Time (Hour/epoch) |
---|
LLaMA-13B + LoRA(2M) | 0.648 | 28M | 8 |
LLaMA-7B + LoRA(4M) | 0.624 | 17.9M | 11 |
LLaMA-7B + LoRA(2M) | 0.609 | 17.9M | 7 |
LLaMA-7B + LoRA(0.6M) | 0.589 | 17.9M | 5 |
LLaMA-7B + FT(2M) | 0.710 | - | 31 |
LLaMA-7B + LoRA(4M) | 0.686 | - | 17 |
LLaMA-7B + FT(2M) + LoRA(math_0.25M) | 0.729 | 17.9M | 3 |
LLaMA-7B + FT(2M) + FT(math_0.25M) | 0.738 | - | 6 |
其中的score是基于本项目集目前开放的1000条评估集合得到。
其中LLaMA-13B + LoRA(2M) 代表了一个使用LLaMA-13B作为基础模型和LoRA训练方法,在2M指令数据上进行训练的模型。而LLaMA-7B + FT(2M) 代表了一个使用全参数微调进行训练的模型。
LLaMA-7B + FT(2M) + LoRA(math_0.25M) 代表了一个在0.25M数学指令数据上,以LLaMA-7B + FT(2M)作为基础模型并使用LoRA训练方法进行训练的模型。LLaMA-7B + FT(2M) + FT(math_0.25M) 代表了一个使用增量全参数微调进行训练的模型。关于训练时间,所有这些实验都是在8块NVIDIA A100-40GB GPU上进行的。
其中的math_0.25M是开放的0.25M数学数据库。在实验过程中,根据我们的评估(详见论文),我们的模型在数学任务上表现不佳,得分大多低于0.5。为了验证 LoRA 在特定任务上的适应能力,我们使用增量0.25M数学数据集(math_0.25M)来调整指令遵循的大型语言模型(我们选择LLaMA-7B+FT(2M)作为基础模型)。作为对比,我们使用了学习速率为5e-7的增量微调方法,并进行了2个时期的训练。因此,我们得到了两个模型,一个是LLaMA-7B+FT(2M)+LoRA(math_0.25M),另一个是LLaMA-7B+FT(2M)+FT(math_0.25M)。 从实验结果可以看出,增量微调仍然表现更好,但需要更长的训练时间。LoRA和增量微调都提高了模型的整体性能。从附录中的详细数据可以看出,LoRA和增量微调都在数学任务中显示出显著的改进,而只会导致其他任务的轻微性能下降。具体而言,数学任务的表现分别提高到了0.586和0.559。
可以看到:1) 选择基础模型对于 LoRA 调整的有效性具有显著影响;2)增加训练数据量可以持续提高LoRA模型的有效性;3)LoRA 调整受益于模型参数的数量。对于LoRA方案的使用,我们建议可以在已经完成了指令学习的模型的基础上针对特定任务做loRA的自适应训练。
同样地,该论文中的相关模型也会尽快开放在本项目中。
⚠️ 局限性、使用限制与免责声明
基于当前数据和基础模型训练得到的SFT模型,在效果上仍存在以下问题:
-
在涉及事实性的指令上可能会产生违背事实的错误回答。
-
对于具备危害性的指令无法很好的鉴别,由此会产生危害性言论。
-
在一些涉及推理、代码、多轮对话等场景下模型的能力仍有待提高。
基于以上模型局限性,我们要求开发者仅将我们开源的代码、数据、模型及后续用此项目生成的衍生物用于研究目的,不得用于商业,以及其他会对社会带来危害的用途。
本项目仅可应用于研究目的,项目开发者不承担任何因使用本项目(包含但不限于数据、模型、代码等)导致的危害或损失。详细请参考免责声明。
📌 引用
如果使用本项目的代码、数据或模型,请引用本项目。
@misc{BELLE,
author = {Yunjie Ji, Yong Deng, Yan Gong, Yiping Peng, Qiang Niu, Baochang Ma and Xiangang Li},
title = {BELLE: Be Everyone's Large Language model Engine },
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/LianjiaTech/BELLE}},
@article{belle2023exploring,
title={Exploring the Impact of Instruction Data Scaling on Large Language Models: An Empirical Study on Real-World Use Cases},
author={Yunjie Ji, Yong Deng, Yan Gong, Yiping Peng, Qiang Niu, Lei Zhang, Baochang Ma, Xiangang Li},
journal={arXiv preprint arXiv:2303.14742},
year={2023}
当然,你也需要引用原始的BLOOM论文、LLaMA论文、Stanford Alpaca和Self-Instruct论文。
在github上新建一个仓库,点击你的头像,然后在出来的侧边栏选择点击New创建一个新的仓库,即repository输入你的仓库名称,选择public 或者 private.尽量不要勾选README如果你的本地项目有readme文件的话,你在push的时候可能会有冲突,就需要–force处理public是公开的,其他人也可以看到你的项目private是私人的,其他人无法看到你的项目。
服务器托管也能让服务器获得一个良好的运行环境,毕竟机房的要求是非常高的,以上就是小编的全部分享内容了,如果还想了解更多内容,或者对服务器托管感兴趣的话,可以持续关注万恒网络科技,也可以私信或评论小编!服务器托管和服务器租用是有一定区别的,那么服务器托管多少钱一年呢?今天就让小编来讲一讲服务器托管费用包含什么吧?(注:1U=4.445厘米,2U=8.89厘米,以此类推)根据企业有的服务器数量选择适合的机柜大小。
如果需要在指定文件中搜索,可以指定文件名称,比如想要在readme中搜索,可以在关键字后加入 in:readme。Allow Rebase Meraging 特性分支不变,只修改base分支,将特性分支上的提交放置到base上。github搜索栏中输入搜索关键字进行搜索时,实际上搜索的内容是项目名称和描述。Issue需要子setting中的features设置中进行启用。根据文件名搜索,filename:文件名,这里搜索的是代码内容。不具备主干开发能力,有预定的发布周期,需要执行严格的发布流程。