File: README.md
[Chinese-LLaMA-Alpaca-3](https://github.com/ymcui/Chinese-LLaMA-Alpaca-3)项目启动!
🇨🇳中文 | 🌐English | 📖文档/Docs | ❓提问/Issues | 💬讨论/Discussions | ⚔️竞技场/Arena
本项目开源了中文LLaMA模型和指令精调的Alpaca大模型,以进一步促进大模型在中文NLP社区的开放研究。这些模型在原版LLaMA的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,中文Alpaca模型进一步使用了中文指令数据进行精调,显著提升了模型对指令的理解和执行能力。
技术报告(V2):[Cui, Yang, and Yao] Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca
本项目主要内容:
- 🚀 针对原版LLaMA模型扩充了中文词表,提升了中文编解码效率
- 🚀 开源了使用中文文本数据预训练的中文LLaMA以及经过指令精调的中文Alpaca
- 🚀 开源了预训练脚本、指令精调脚本,用户可根据需要进一步训练模型
- 🚀 快速使用笔记本电脑(个人PC)的CPU/GPU本地量化和部署体验大模型
- 🚀 支持🤗transformers, llama.cpp, text-generation-webui, LlamaChat, LangChain, privateGPT等生态
- 目前已开源的模型版本:7B(基础版、Plus版、Pro版)、13B(基础版、Plus版、Pro版)、33B(基础版、Plus版、Pro版)
💡 下图是中文Alpaca-Plus-7B模型在本地CPU量化部署后的实际体验速度和效果。
中文LLaMA-2&Alpaca-2大模型 | 多模态中文LLaMA&Alpaca大模型 | 多模态VLE | 中文MiniRBT | 中文LERT | 中英文PERT | 中文MacBERT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner
新闻
[2024/04/30] Chinese-LLaMA-Alpaca-3 已正式发布,开源基于Llama-3的Llama-3-Chinese-8B和Llama-3-Chinese-8B-Instruct,推荐所有一期、二期项目用户升级至三代模型,请参阅:https://github.com/ymcui/Chinese-LLaMA-Alpaca-3
[2024/03/27] 本项目已入驻机器之心SOTA!模型平台,欢迎关注:https://sota.jiqizhixin.com/project/chinese-llama-alpaca
[2023/08/14] Chinese-LLaMA-Alpaca-2 v2.0版本已正式发布,开源Chinese-LLaMA-2-13B和Chinese-Alpaca-2-13B,推荐所有一期用户升级至二代模型,请参阅:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2
[2023/07/31] Chinese-LLaMA-Alpaca-2 v1.0版本已正式发布,请参阅:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2
[2023/07/19] v5.0版本: 发布Alpaca-Pro系列模型,显著提升回复长度和质量;同时发布Plus-33B系列模型。
[2023/07/19] 🚀启动中文LLaMA-2、Alpaca-2开源大模型项目,欢迎关注了解最新信息。
[2023/07/10] Beta测试预览,提前了解即将到来的更新:详见讨论区
[2023/07/07] Chinese-LLaMA-Alpaca家族再添新成员,推出面向视觉问答与对话的多模态中文LLaMA&Alpaca大模型,发布了7B测试版本。
[2023/06/30] llama.cpp下8K context支持(无需对模型做出修改),相关方法和讨论见讨论区;transformers下支持4K+ context的代码请参考PR#705
[2023/06/16] v4.1版本: 发布新版技术报告、添加C-Eval解码脚本、添加低资源模型合并脚本等。
[2023/06/08] v4.0版本: 发布中文LLaMA/Alpaca-33B、添加privateGPT使用示例、添加C-Eval结果等。
内容导引
| 章节 | 描述 |
|---|---|
| ⏬模型下载 | 中文LLaMA、Alpaca大模型下载地址 |
| 🈴合并模型 | (重要)介绍如何将下载的LoRA模型与原版LLaMA合并 |
| 💻本地推理与快速部署 | 介绍了如何对模型进行量化并使用个人电脑部署并体验大模型 |
| 💯系统效果 | 介绍了部分场景和任务下的使用体验效果 |
| 📝训练细节 | 介绍了中文LLaMA、Alpaca大模型的训练细节 |
| ❓FAQ | 一些常见问题的回复 |
| ⚠️局限性 | 本项目涉及模型的局限性 |
模型下载
用户须知(必读)
Facebook官方发布的LLaMA模型禁止商用,并且官方没有正式开源模型权重(虽然网上已经有很多第三方的下载地址)。为了遵循相应的许可,这里发布的是LoRA权重,可以理解为原LLaMA模型上的一个“补丁”,两者合并即可获得完整版权重。以下中文LLaMA/Alpaca LoRA模型无法单独使用,需要搭配原版LLaMA模型。请参考本项目给出的合并模型步骤重构模型。
模型列表
下图展示了本项目以及二期项目推出的所有大模型之间的关系。
模型选择指引
下面是中文LLaMA和Alpaca模型的基本对比以及建议使用场景(包括但不限于),更多内容见训练细节。
| 对比项 | 中文LLaMA | 中文Alpaca |
|---|---|---|
| 训练方式 | 传统CLM | 指令精调 |
| 模型类型 | 基座模型 | 指令理解模型(类ChatGPT) |
| 训练语料 | 无标注通用语料 | 有标注指令数据 |
| 词表大小[3] | 49953 | 49954=49953+1(pad token) |
| 输入模板 | 不需要 | 需要符合模板要求[1] |
| 适用场景 ✔️ | 文本续写:给定上文内容,让模型生成下文 | 指令理解(问答、写作、建议等);多轮上下文理解(聊天等) |
| 不适用场景 ❌ | 指令理解 、多轮聊天等 | 文本无限制自由生成 |
| llama.cpp | 使用-p参数指定上文 |
使用-ins参数启动指令理解+聊天模式 |
| text-generation-webui | 不适合chat模式 | 使用--cpu可在无显卡形式下运行 |
| LlamaChat | 加载模型时选择"LLaMA" | 加载模型时选择"Alpaca" |
| HF推理代码 | 无需添加额外启动参数 | 启动时添加参数 --with_prompt |
| web-demo代码 | 不适用 | 直接提供Alpaca模型位置即可;支持多轮对话 |
| LangChain示例 / privateGPT | 不适用 | 直接提供Alpaca模型位置即可 |
| 已知问题 | 如果不控制终止,则会一直写下去,直到达到输出长度上限。[2] | 请使用Pro版,以避免Plus版回复过短的问题。 |
[1] llama.cpp/LlamaChat/HF推理代码/web-demo代码/LangChain示例等已内嵌,无需手动添加模板。
[2] 如果出现模型回答质量特别低、胡言乱语、不理解问题等情况,请检查是否使用了正确的模型和启动参数。
[3] 经过指令精调的Alpaca会比LLaMA多一个pad token,因此请勿混用LLaMA/Alpaca词表。
推荐模型下载
以下为本项目推荐使用的模型列表,通常使用了更多的训练数据和优化的模型训练方法和参数,请优先使用这些模型(其余模型请查看其他模型)。如希望体验类ChatGPT对话交互,请使用Alpaca模型,而不是LLaMA模型。 对于Alpaca模型,Pro版针对回复内容过短的问题进行改进,模型回复效果有明显提升;如果更偏好短回复,请选择Plus系列。
| 模型名称 | 类型 | 训练数据 | 重构模型[1] | 大小[2] | LoRA下载[3] |
|---|---|---|---|---|---|
| Chinese-LLaMA-Plus-7B | 基座模型 | 通用120G | 原版LLaMA-7B | 790M | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-LLaMA-Plus-13B | 基座模型 | 通用120G | 原版LLaMA-13B | 1.0G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-LLaMA-Plus-33B 🆕 | 基座模型 | 通用120G | 原版LLaMA-33B | 1.3G[6] | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-Pro-7B 🆕 | 指令模型 | 指令4.3M | 原版LLaMA-7B &LLaMA-Plus-7B[4] | 1.1G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-Pro-13B 🆕 | 指令模型 | 指令4.3M | 原版LLaMA-13B &LLaMA-Plus-13B[4] | 1.3G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-Pro-33B 🆕 | 指令模型 | 指令4.3M | 原版LLaMA-33B &LLaMA-Plus-33B[4] | 2.1G | [🤗HF] [🤖ModelScope] [Baidu] |
[1] 重构需要原版LLaMA模型,去LLaMA项目申请使用或参考这个PR。因版权问题本项目无法提供下载链接。
[2] 经过重构后的模型大小比同等量级的原版LLaMA大一些(主要因为扩充了词表)。
[3] 下载后务必检查压缩包中模型文件的SHA256是否一致,请查看SHA256.md。
[4] Alpaca-Plus模型需要同时下载对应的LLaMA-Plus模型,请参考合并教程。
[5] 有些地方称为30B,实际上是Facebook在发布模型时写错了,论文里仍然写的是33B。**[6] 采用FP16存储,故模型体积较小。
压缩包内文件目录如下(以Chinese-LLaMA-7B为例):
chinese_llama_lora_7b/
- adapter_config.json # LoRA权重配置文件
- adapter_model.bin # LoRA权重文件
- special_tokens_map.json # special_tokens_map文件
- tokenizer_config.json # tokenizer配置文件
- tokenizer.model # tokenizer文件其他模型下载
由于训练方式和训练数据等因素影响,以下模型已不再推荐使用(特定场景下可能仍然有用),请优先使用上一节中的推荐模型。
| 模型名称 | 类型 | 训练数据 | 重构模型 | 大小 | LoRA下载 |
|---|---|---|---|---|---|
| Chinese-LLaMA-7B | 基座模型 | 通用20G | 原版LLaMA-7B | 770M | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-LLaMA-13B | 基座模型 | 通用20G | 原版LLaMA-13B | 1.0G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-LLaMA-33B | 基座模型 | 通用20G | 原版LLaMA-33B | 2.7G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-7B | 指令模型 | 指令2M | 原版LLaMA-7B | 790M | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-13B | 指令模型 | 指令3M | 原版LLaMA-13B | 1.1G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-33B | 指令模型 | 指令4.3M | 原版LLaMA-33B | 2.8G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-Plus-7B | 指令模型 | 指令4M | 原版LLaMA-7B &LLaMA-Plus-7B | 1.1G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-Plus-13B | 指令模型 | 指令4.3M | 原版LLaMA-13B &LLaMA-Plus-13B | 1.3G | [🤗HF] [🤖ModelScope] [Baidu] |
| Chinese-Alpaca-Plus-33B | 指令模型 | 指令4.3M | 原版LLaMA-33B &LLaMA-Plus-33B | 2.1G | [🤗HF] [🤖ModelScope] [Baidu] |
🤗transformers调用
可以在🤗Model Hub下载以上所有模型,并且使用transformers和PEFT调用中文LLaMA或Alpaca LoRA模型。以下模型调用名称指的是使用.from_pretrained()中指定的模型名称。
详细清单与模型下载地址:https://huggingface.co/hfl
合并模型
前面提到LoRA模型无法单独使用,必须与原版LLaMA进行合并才能转为完整模型,以便进行模型推理、量化或者进一步训练。请选择以下方法对模型进行转换合并。
| 方式 | 适用场景 | 教程 |
|---|---|---|
| 在线转换 | Colab用户可利用本项目提供的notebook进行在线转换并量化模型 | 链接 |
| 手动转换 | 离线方式转换,生成不同格式的模型,以便进行量化或进一步精调 | 链接 |
以下是合并模型后,FP16精度和4-bit量化后的大小,转换前确保本机有足够的内存和磁盘空间(最低要求):
| 模型版本 | 7B | 13B | 33B | 65B |
|---|---|---|---|---|
| 原模型大小(FP16) | 13 GB | 24 GB | 60 GB | 120 GB |
| 量化后大小(8-bit) | 7.8 GB | 14.9 GB | 32.4 GB | ~60 GB |
| 量化后大小(4-bit) | 3.9 GB | 7.8 GB | 17.2 GB | 38.5 GB |
具体内容请参考本项目 >>> 📚 GitHub Wiki
本地推理与快速部署
本项目中的模型主要支持以下量化、推理和部署方式。
| 推理和部署方式 | 特点 | 平台 | CPU | GPU | 量化加载 | 图形界面 | 教程 |
|---|---|---|---|---|---|---|---|
| llama.cpp | 丰富的量化选项和高效本地推理 | 通用 | ✅ | ✅ | ✅ | ❌ | link |
| 🤗Transformers | 原生transformers推理接口 | 通用 | ✅ | ✅ | ✅ | ✅ | link |
| text-generation-webui | 前端Web UI界面的部署方式 | 通用 | ✅ | ✅ | ✅ | ✅ | link |
| LlamaChat | macOS下的图形交互界面 | MacOS | ✅ | ❌ | ✅ | ✅ | link |
| LangChain | LLM应用开发框架,适用于进行二次开发 | 通用 | ✅† | ✅ | ✅† | ❌ | link |
| privateGPT | 基于LangChain的多文档本地问答框架 | 通用 | ✅ | ✅ | ✅ | ❌ | link |
| Colab Gradio Demo | Colab中启动基于Gradio的交互式Web服务 | 通用 | ✅ | ✅ | ✅ | ❌ | link |
| API调用 | 仿OpenAI API接口的服务器Demo | 通用 | ✅ | ✅ | ✅ | ❌ | link |
†: LangChain框架支持,但教程中未实现;详细说明请参考LangChain官方文档。
具体内容请参考本项目 >>> 📚 GitHub Wiki
系统效果
生成效果评测
为了快速评测相关模型的实际文本生成表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-7B、中文Alpaca-13B、中文Alpaca-33B、中文Alpaca-Plus-7B、中文Alpaca-Plus-13B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。
- 详细评测结果及生成样例请查看examples目录
- 📊 Alpaca模型在线对战:http://llm-arena.ymcui.com
客观效果评测
本项目还在“NLU”类客观评测集合上对相关模型进行了测试。这类评测的结果不具有主观性,只需要输出给定标签(需要设计标签mapping策略),因此可以从另外一个侧面了解大模型的能力。本项目在近期推出的C-Eval评测数据集上测试了相关模型效果,其中测试集包含12.3K个选择题,涵盖52个学科。以下是部分模型的valid和test集评测结果(Average),完整结果请参考技术报告。
| 模型 | Valid (zero-shot) | Valid (5-shot) | Test (zero-shot) | Test (5-shot) |
|---|---|---|---|---|
| Chinese-Alpaca-Plus-33B | 46.5 | 46.3 | 44.9 | 43.5 |
| Chinese-Alpaca-33B | 43.3 | 42.6 | 41.6 | 40.4 |
| Chinese-Alpaca-Plus-13B | 43.3 | 42.4 | 41.5 | 39.9 |
| Chinese-Alpaca-Plus-7B | 36.7 | 32.9 | 36.4 | 32.3 |
| Chinese-LLaMA-Plus-33B | 37.4 | 40.0 | 35.7 | 38.3 |
| Chinese-LLaMA-33B | 34.9 | 38.4 | 34.6 | 39.5 |
| Chinese-LLaMA-Plus-13B | 27.3 | 34.0 | 27.8 | 33.3 |
| Chinese-LLaMA-Plus-7B | 27.3 | 28.3 | 26.9 | 28.4 |
需要注意的是,综合评估大模型能力仍然是亟待解决的重要课题,合理辩证地看待大模型相关各种评测结果有助于大模型技术的良性发展。推荐用户在自己关注的任务上进行测试,选择适配相关任务的模型。
C-Eval推理代码请参考本项目 >>> 📚 GitHub Wiki
训练细节
整个训练流程包括词表扩充、预训练和指令精调三部分。
- 本项目的模型均在原LLaMA词表的基础上扩充了中文单词,代码请参考merge_tokenizers.py
- 预训练和指令精调代码参考了🤗transformers中的run_clm.py和Stanford Alpaca项目中数据集处理的相关部分
- 已开源用于预训练和指令精调的训练脚本:预训练脚本Wiki、指令精调脚本Wiki
具体内容请参考本项目 >>> 📚 GitHub Wiki
FAQ
FAQ中给出了常见问题的解答,请在提Issue前务必先查看FAQ。
问题1:为什么不能放出完整版本权重?
问题2:后面会有33B、65B的版本吗?
问题3:一些任务上效果不好!
问题4:为什么要扩充词表?直接在原版LLaMA上用中文预训练不行吗?
问题5:回复内容很短
问题6:Windows下,模型无法理解中文、生成速度很慢等问题
问题7:Chinese-LLaMA 13B模型没法用llama.cpp启动,提示维度不一致
问题8:Chinese-Alpaca-Plus效果很差
问题9:模型在NLU类任务(文本分类等)上效果不好
问题10:为什么叫33B,不应该是30B吗?
问题11:模型合并之后SHA256不一致具体问题和解答请参考本项目 >>> 📚 GitHub Wiki
局限性
虽然本项目中的模型具备一定的中文理解和生成能力,但也存在局限性,包括但不限于:
- 可能会产生不可预测的有害内容以及不符合人类偏好和价值观的内容
- 由于算力和数据问题,相关模型的训练并不充分,中文理解能力有待进一步提升
- 暂时没有在线可互动的demo(注:用户仍然可以自行在本地部署)
引用
如果您觉得本项目对您的研究有所帮助或使用了本项目的代码或数据,请参考引用本项目的技术报告:https://arxiv.org/abs/2304.08177
@article{chinese-llama-alpaca,
title={Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca},
author={Cui, Yiming and Yang, Ziqing and Yao, Xin},
journal={arXiv preprint arXiv:2304.08177},
url={https://arxiv.org/abs/2304.08177},
year={2023}
}相关项目
| 项目名称 | 简介 | 类型 |
|---|---|---|
| Chinese-LLaMA-Alpaca-2(官方项目) | 中文LLaMA-2、Alpaca-2大模型 | 文本 |
| Visual-Chinese-LLaMA-Alpaca(官方项目) | 多模态中文LLaMA & Alpaca大模型 | 多模态 |
想要加入列表?>>> 提交申请
致谢
本项目基于以下开源项目二次开发,在此对相关项目和研究开发人员表示感谢。
免责声明
本项目相关资源仅供学术研究之用,严禁用于商业用途。 使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目不对其准确性作出保证。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。本项目由个人及协作者业余时间发起并维护,因此无法保证能及时回复解决相应问题。
问题反馈
如有问题,请在GitHub Issue中提交。礼貌地提出问题,构建和谐的讨论社区。
- 在提交问题之前,请先查看FAQ能否解决问题,同时建议查阅以往的issue是否能解决你的问题。
- 提交问题请使用本项目设置的Issue模板,以帮助快速定位具体问题。
- 重复以及与本项目无关的issue会被stable-bot处理,敬请谅解。
关注我们
欢迎关注微信公众号"涌现志",了解最新的技术动态。
File: data/README.md
数据 Data
alpaca_data_zh_51k.json
中文Alpaca数据,包含51k个从ChatGPT (gpt-3.5-turbo)爬取的指令数据。
Chinese Alpaca dataset, containing 51k instruction data crawled from ChatGPT (gpt-3.5-turbo).
pt_sample_data.txt
CLM任务预训练样例数据
Pre-training sample data
File: examples/q8_13b-p7b-p13b/README.md
效果对比:Alpaca-13B、Plus-7B、Plus-13B
为了快速评测相关模型的实际表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-13B、中文Alpaca-Plus-7B、中文Alpaca-Plus-13B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。
⚠️ 以下测试结果均基于*8-bit量化模型,效果接近FP16,具体请看量化方法。*
| 测试任务 | 详细样例 | 样例数 | Alpaca-13B | Alpaca-Plus-7B | Alpaca-Plus-13B |
|---|---|---|---|---|---|
| 💯总平均分 | - | 200 | 74.3 | 78.2 | 👍🏻80.8 |
| 知识问答 | QA.md | 20 | 70 | 74 | 👍🏻79 |
| 开放式问答 | OQA.md | 20 | 77 | 77 | 77 |
| 数值计算、推理 | REASONING.md | 20 | 61 | 61 | 60 |
| 诗词、文学、哲学 | LITERATURE.md | 20 | 65 | 👍🏻76 | 👍🏻76 |
| 音乐、体育、娱乐 | ENTERTAINMENT.md | 20 | 68 | 73 | 👍🏻80 |
| 写信、写文章 | GENERATION.md | 20 | 83 | 82 | 👍🏻87 |
| 文本翻译 | TRANSLATION.md | 20 | 84 | 87 | 👍🏻90 |
| 多轮交互 | DIALOGUE.md | 20 | 88 | 89 | 89 |
| 代码编程 | CODE.md | 20 | 65 | 64 | 👍🏻70 |
| 伦理、拒答 | ETHICS.md | 20 | 82 | 👍🏻99 | 👍🏻100 |
说明:
- 以上分数应视为paired score,也就是说分数是一个相对值,而不是绝对值,是多个系统相比较得到的结果
- 基于以上说明,分数之间的大小关系有一些参考价值,而分数的绝对值没有太大参考价值
- 除多轮任务之外,所有任务均基于单轮回复进行打分(不包含任何对话历史)
- 每个样例运行2-3次,人工选取最好的一组交给机器评分以降低随机性带来的偏差
运行参数
测试中使用了统一的解码参数:
./main -m zh-alpaca-models/{7B,13B,7B-Plus}/ggml-model-q8_0.bin --color -f ./prompts/alpaca.txt -ins \
-b 16 -c 2048 -n 512 -t 6 \
--temp 0.2 --top_k 40 --top_p 0.9 \
--repeat_penalty 1.1注:可能并不适合所有任务。实际使用时,对话、写作类等自由生成类任务可适当调高temp。
打分方式
- 一共10组任务,每组任务满分100分;每组任务20个样例,每个样例满分10分
- 样例的得分之和规整到100分区间作为该模型在该任务上的得分
- 使用GPT-4和ChatGPT(GPT-3.5)对两个系统的输出进行打分(10分制),模板如下:
The followings are ChatGPT-like systems' outputs based on a single prompt. Please rate an overall score on a ten point scale for each system and give a short explanation to justify your scores. Please try not to give the same scores for different system unless they are indistinguishable.
Prompt:
System1:
<system1-output>
System2:
<system2-output>注:优先使用GPT-4打分。由于GPT-4的交互次数限制,一部分打分由ChatGPT(gpt-3.5-turbo)进行。
File: examples/q8_7b-13b-p7b/README.md
效果对比:Alpaca-7B、13B、Plus-7B
为了快速评测相关模型的实际表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-7B、中文Alpaca-13B、中文Alpaca-Plus-7B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。
⚠️ 以下测试结果均基于*8-bit量化模型,效果接近FP16,具体请看量化方法。*
| 测试任务 | 详细样例 | 样例数 | 中文Alpaca-7B | 中文Alpaca-13B | 中文Alpaca-Plus-7B |
|---|---|---|---|---|---|
| 💯总平均分 | - | 200 | 65.3 | 70.9 | 👍🏻75.3 |
| 知识问答 | QA.md | 20 | 66 | 74 | 👍🏻80 |
| 开放式问答 | OQA.md | 20 | 👍🏻79 | 74 | 👍🏻78 |
| 数值计算、推理 | REASONING.md | 20 | 31 | 👍🏻50 | 45 |
| 诗词、文学、哲学 | LITERATURE.md | 20 | 68 | 73 | 👍🏻76 |
| 音乐、体育、娱乐 | ENTERTAINMENT.md | 20 | 68 | 74 | 👍🏻79 |
| 写信、写文章 | GENERATION.md | 20 | 76 | 👍🏻81 | 👍🏻81 |
| 文本翻译 | TRANSLATION.md | 20 | 76 | 78 | 👍🏻82 |
| 多轮交互 | DIALOGUE.md | 20 | 👍🏻83 | 73 | 👍🏻84 |
| 代码编程 | CODE.md | 20 | 57 | 👍🏻64 | 59 |
| 伦理、拒答 | ETHICS.md | 20 | 49 | 68 | 👍🏻89 |
说明:
- 以上分数应视为paired score,也就是说分数是一个相对值,而不是绝对值,是多个系统相比较得到的结果
- 基于以上说明,分数之间的大小关系有一些参考价值,而分数的绝对值没有太大参考价值
- 除多轮任务之外,所有任务均基于单轮回复进行打分(不包含任何对话历史)
- 每个样例运行2-3次,人工选取最好的一组交给机器评分以降低随机性带来的偏差
运行参数
测试中使用了统一的解码参数:
./main -m zh-alpaca-models/{7B,13B,7B-Plus}/ggml-model-q8_0.bin --color -f ./prompts/alpaca.txt -ins \
-b 16 -c 2048 -n 512 -t 6 \
--temp 0.2 --top_k 40 --top_p 0.9 \
--repeat_penalty 1.1注:可能并不适合所有任务。实际使用时,对话、写作类等自由生成类任务可适当调高temp。
打分方式
- 一共10组任务,每组任务满分100分;每组任务20个样例,每个样例满分10分
- 样例的得分之和规整到100分区间作为该模型在该任务上的得分
- 使用GPT-4和ChatGPT(GPT-3.5)对两个系统的输出进行打分(10分制),模板如下:
The followings are ChatGPT-like systems' outputs based on a single prompt. Please rate an overall score on a ten point scale for each system and give a short explanation to justify your scores. Please try not to give the same scores for different system unless they are indistinguishable.
Prompt:
System1:
<system1-output>
System2:
<system2-output>注:优先使用GPT-4打分。由于GPT-4的交互次数限制,一部分打分由ChatGPT(gpt-3.5-turbo)进行。
File: examples/q4_7b-13b/README.md
⚠️ Plus版本起不再单独评测Q4版本的模型
中文Alpaca-7B/13B量化版本输出示例
为了快速评测相关模型的实际表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-7B和中文Alpaca-13B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。
说明:
- 以下分数应视为paired score,也就是说分数是一个相对值,而不是绝对值,是两个系统相比较得到的结果
- 基于以上说明,分数之间的大小关系有一些参考价值,而分数的绝对值没有太大参考价值
- 除多轮任务之外,所有任务均基于单轮回复进行打分(不包含任何对话历史)
- 每个样例运行2-3次,人工选取最好的一组交给机器评分以降低随机性带来的偏差
⚠️ 以下测试结果均基于*4-bit量化模型,理论效果比非量化版本差一些。*
| 测试任务 | 详细样例 | 样例数 | 中文Alpaca-7B | 中文Alpaca-13B |
|---|---|---|---|---|
| 💯总平均分 | - | 160 | 49 | 👍🏻71 |
| 知识问答 | QA.md | 20 | 53 | 👍🏻77 |
| 开放式问答 | OQA.md | 20 | 64 | 👍🏻73 |
| 数值计算、推理 | REASONING.md | 20 | 23 | 👍🏻50 |
| 诗词、文学、哲学 | LITERATURE.md | 20 | 31 | 👍🏻54 |
| 音乐、体育、娱乐 | ENTERTAINMENT.md | 20 | 36 | 👍🏻65 |
| 写信、写文章 | GENERATION.md | 15 | 65 | 👍🏻78 |
| 文本翻译 | TRANSLATION.md | 15 | 63 | 👍🏻79 |
| 多轮交互 | DIALOGUE.md | 10 | 80 | 👍🏻83 |
| 代码编程 | CODE.md | 10 | 27 | 👍🏻49 |
| 伦理、拒答 | ETHICS.md | 10 | 50 | 👍🏻100 |
运行参数
测试中使用了统一的解码参数(可能并不适合所有任务):
./main -m zh-alpaca-models/7B/ggml-model-q4_0.bin --color -f ./prompts/alpaca.txt -ins \
-b 24 -c 2048 -n 512 -t 6 \
--temp 0.2 --top_k 40 --top_p 0.9 \
--repeat_penalty 1.3打分方式
- 一共10组任务,每组任务满分100分;每组任务10-20个样例,每个样例满分10分
- 样例的得分之和规整到100分区间作为该模型在该任务上的得分
- 使用GPT-4和ChatGPT(GPT-3.5)对两个系统的输出进行打分(10分制),模板如下:
The followings are two ChatGPT-like systems' outputs. Please rate an overall score on a ten point scale for each and give explanations to justify your scores.
Prompt:
System1:
<system1-output>
System2:
<system2-output>注:优先使用GPT-4打分。由于GPT-4的交互次数限制,一部分打分由ChatGPT进行。
File: examples/f16-p7b-p13b-33b/README.md
效果对比:Alpaca-Plus-7B、Plus-13B、33B
为了快速评测相关模型的实际表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-Plus-7B、中文Alpaca-Plus-13B、中文Alpaca-33B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。
⚠️ Alpaca-Plus-7B和Alpaca-Plus-13B结果沿用之前的生成结果。33B除多轮对话之外的任务由huggingface原生接口进行解码(F16),多轮对话由llama.cpp解码(q4_0量化版)。
| 测试任务 | 详细样例 | 样例数 | Alpaca-Plus-7B | Alpaca-Plus-13B | Alpaca-33B |
|---|---|---|---|---|---|
| 💯总平均分 | - | 200 | 75.3 | 79.4 | 👍🏻82.0 |
| 知识问答 | QA.md | 20 | 70.5 | 79.5 | 👍🏻82.3 |
| 开放式问答 | OQA.md | 20 | 👍🏻80.5 | 👍🏻80 | 78.5 |
| 数值计算、推理 | REASONING.md | 20 | 51 | 61.5 | 👍🏻84.5 |
| 诗词、文学、哲学 | LITERATURE.md | 20 | 78.5 | 👍🏻81.3 | 76 |
| 音乐、体育、娱乐 | ENTERTAINMENT.md | 20 | 72.3 | 👍🏻76.8 | 72.5 |
| 写信、写文章 | GENERATION.md | 20 | 81 | 👍🏻86.5 | 79 |
| 文本翻译 | TRANSLATION.md | 20 | 86.8 | 89.3 | 👍🏻92.3 |
| 多轮交互 | DIALOGUE.md | 20 | 80.3 | 👍🏻81.3 | 78 |
| 代码编程 | CODE.md | 20 | 62.5 | 67.5 | 👍🏻84.0 |
| 伦理、拒答 | ETHICS.md | 20 | 89.8 | 90.5 | 👍🏻92.5 |
说明:
- 以上分数应视为paired score,也就是说分数是一个相对值,而不是绝对值,是多个系统相比较得到的结果
- 基于以上说明,分数之间的大小关系有一些参考价值,而分数的绝对值没有太大参考价值
- 除多轮任务之外,所有任务均基于单轮回复进行打分(不包含任何对话历史)
- 每个样例运行2-3次,人工选取最好的一组交给机器评分以降低随机性带来的偏差
运行参数
测试中使用了统一的解码参数,以下是llama.cpp的示例:
./main -m zh-alpaca-models/{Plus-7B,Plus-13B}/ggml-model-q8_0.bin --color -f ./prompts/alpaca.txt -ins \
-b 16 -c 2048 -n 512 -t 6 \
--temp 0.2 --top_k 40 --top_p 0.9 \
--repeat_penalty 1.1注:可能并不适合所有任务。实际使用时,对话、写作类等自由生成类任务可适当调高temp。
打分方式
- 一共10组任务,每组任务满分100分;每组任务20个样例,每个样例满分10分
- 样例的得分之和规整到100分区间作为该模型在该任务上的得分
- 使用GPT-4和ChatGPT(GPT-3.5)对两个系统的输出进行打分(10分制),模板如下:
The followings are ChatGPT-like systems' outputs based on a single prompt. Please rate an overall score on a ten point scale for each system and give a short explanation to justify your scores. Please try not to give the same scores for different system unless they are indistinguishable.
Prompt:
System1:
<system1-output>
System2:
<system2-output>注:优先使用GPT-4打分。由于GPT-4的交互次数限制,一部分打分由ChatGPT(gpt-3.5-turbo)进行。
File: examples/README.md
效果对比 Performance Comparison
以下分数应视为paired score,也就是说分数是一个相对值,而不是绝对值,是多个系统相比较得到的结果。详细结果见相应目录。
q4_7b-13b:对比了4-bit量化版的Alpaca-7B和13B
| 样例数 | 中文Alpaca-7B | 中文Alpaca-13B | |
|---|---|---|---|
| 💯总平均分 | 160 | 49 | 👍🏻71 |
q8_7b-13b-p7b:对比了8-bit量化版的Alpaca-7B、13B、Plus-7B
| 样例数 | 中文Alpaca-7B | 中文Alpaca-13B | 中文Alpaca-Plus-7B | |
|---|---|---|---|---|
| 💯总平均分 | 200 | 65.3 | 70.9 | 👍🏻75.3 |
q8_13b-p7b-p13b:对比了8-bit量化版的Alpaca-13B、Plus-7B、Plus-13B
| 样例数 | Alpaca-13B | Alpaca-Plus-7B | Alpaca-Plus-13B | |
|---|---|---|---|---|
| 💯总平均分 | 200 | 74.3 | 78.2 | 👍🏻80.8 |
f16_p7b-p13b-33b:对比了8-bit量化版的Alpaca-Plus-7B、Plus-13B和F16的33B
| 样例数 | Alpaca-Plus-7B | Alpaca-Plus-13B | Alpaca-33B | |
|---|---|---|---|---|
| 💯总平均分 | 200 | 75.3 | 79.4 | 👍🏻82.0 |
File: notebooks/README.md
笔记本示例 Notebooks
ceval_example_for_chinese_alpaca.ipynb
利用Chinese Alpaca模型解码C-Eval数据集的示例。
Example of decoding C-Eval dataset with Chinese Alpaca.
建议查看Colab上的最新版 / Check latest notebook:
convert_and_quantize_chinese_llama_and_alpaca.ipynb
Colab上的转换和量化中文LLaMA/Alpaca(含Plus版本)的运行示例(仅供流程参考)。
Example of conversion and quantization for Chinese LLaMA/Alpaca.
建议查看Colab上的最新版 / Check latest notebook:
pretrain_chinese_llama_lora.ipynb
Colab上的预训练脚本运行示例(仅供流程参考)。
Example of running pre-training script on Colab.
建议查看最新Wiki教程 / Check latest wiki:中文教程 / English Tutorial
finetune_chinese_alpaca_lora.ipynb
Colab上的指令精调脚本运行示例(仅供流程参考)。
Example of running instruction fine-tuning script on Colab.
建议查看最新Wiki教程 / Check latest wiki:中文教程 / English Tutorial
gradio_web_demo.ipynb
Colab上的Gradio演示示例。
Example of running the Gradio demo on Colab.
在Colab中打开 / Open the notebook in Colab:
legacy/
旧版notebook,供参考,但不会再更新。
Old notebook. Reference only, will not be updated.
File: scripts/openai_server_demo/README.md
OPENAI API DEMO
更加详细的OPENAI API信息:https://platform.openai.com/docs/api-reference
这是一个使用fastapi实现的简易的仿OPENAI API风格的服务器DEMO,您可以使用这个API DEMO来快速搭建基于中文大模型的个人网站以及其他有趣的WEB DEMO。
部署方式
安装依赖
pip install fastapi uvicorn shortuuid启动脚本
python scripts/openai_server_demo/openai_api_server.py --base_model /path/to/base_model --lora_model /path/to/lora_model --gpus 0,1参数说明
--base_model {base_model}:存放HF格式的LLaMA模型权重和配置文件的目录,可以是合并后的中文Alpaca或Alpaca Plus模型(此时无需提供--lora_model),也可以是转后HF格式后的原版LLaMA模型(需要提供--lora_model)
--lora_model {lora_model}:中文Alpaca LoRA解压后文件所在目录,也可使用🤗Model Hub模型调用名称。若不提供此参数,则只加载--base_model指定的模型
--tokenizer_path {tokenizer_path}:存放对应tokenizer的目录。若不提供此参数,则其默认值与--lora_model相同;若也未提供--lora_model参数,则其默认值与--base_model相同
--only_cpu: 仅使用CPU进行推理
--gpus {gpu_ids}: 指定使用的GPU设备编号,默认为0。如使用多张GPU,以逗号分隔,如0,1,2
--load_in_8bit: 使用8bit模型进行推理,可节省显存,但可能影响模型效果
API文档
文字接龙(completion)
有关completion的中文翻译,李宏毅教授将其翻译为文字接龙 https://www.youtube.com/watch?v=yiY4nPOzJEg
最基础的API接口,输入prompt,输出语言大模型的文字接龙(completion)结果。
API DEMO内置有alpaca prompt模板,prompt将被套入alpaca instruction模板中,这里输入的prompt应更像指令而非对话。
快速体验completion接口
请求command:
curl http://localhost:19327/v1/completions \
-H "Content-Type: application/json" \
-d '{
"prompt": "告诉我中国的首都在哪里"
}'json返回体:
{
"id": "cmpl-3watqWsbmYgbWXupsSik7s",
"object": "text_completion",
"created": 1686067311,
"model": "chinese-llama-alpaca",
"choices": [
{
"index": 0,
"text": "中国的首都是北京。"
}
]
}completion接口高级参数
请求command:
curl http://localhost:19327/v1/completions \
-H "Content-Type: application/json" \
-d '{
"prompt": "告诉我中国和美国分别各有哪些优点缺点",
"max_tokens": 90,
"temperature": 0.7,
"num_beams": 4,
"top_k": 40
}'json返回体:
{
"id": "cmpl-PvVwfMq2MVWHCBKiyYJfKM",
"object": "text_completion",
"created": 1686149471,
"model": "chinese-llama-alpaca",
"choices": [
{
"index": 0,
"text": "中国的优点是拥有丰富的文化和历史,而美国的优点是拥有先进的科技和经济体系。"
}
]
}completion接口高级参数说明
有关Decoding策略,更加详细的细节可以参考 https://towardsdatascience.com/the-three-decoding-methods-for-nlp-23ca59cb1e9d 该文章详细讲述了三种Llama会用到的Decoding策略:Greedy Decoding、Random Sampling 和 Beam Search,Decoding策略是top_k、top_p、temperature、num_beam等高级参数的基础。
prompt: 生成文字接龙(completion)的提示。
max_tokens: 新生成的句子的token长度。
temperature: 在0和2之间选择的采样温度。较高的值如0.8会使输出更加随机,而较低的值如0.2则会使其输出更具有确定性。temperature越高,使用随机采样最为decoding的概率越大。
num_beams: 当搜索策略为束搜索(beam search)时,该参数为在束搜索(beam search)中所使用的束个数,当num_beams=1时,实际上就是贪心搜索(greedy decoding)。
top_k: 在随机采样(random sampling)时,前top_k高概率的token将作为候选token被随机采样。
top_p: 在随机采样(random sampling)时,累积概率超过top_p的token将作为候选token被随机采样,越低随机性越大,举个例子,当top_p设定为0.6时,概率前5的token概率分别为{0.23, 0.20, 0.18, 0.11, 0.10}时,前三个token的累积概率为0.61,那么第4个token将被过滤掉,只有前三的token将作为候选token被随机采样。
repetition_penalty: 重复惩罚,具体细节可以参考这篇文章:https://arxiv.org/pdf/1909.05858.pdf 。
do_sample: 启用随机采样策略。默认为true。
聊天(chat completion)
聊天接口支持多轮对话
快速体验聊天接口
请求command:
curl http://localhost:19327/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user","message": "给我讲一些有关杭州的故事吧"}
],
"repetition_penalty": 1.0
}'json返回体:
{
"id": "chatcmpl-5L99pYoW2ov5ra44Ghwupt",
"object": "chat.completion",
"created": 1686143170,
"model": "chinese-llama-alpaca",
"choices": [
{
"index": 0,
"message": {
"role": "user",
"content": "给我讲一些有关杭州的故事吧"
}
},
{
"index": 1,
"message": {
"role": "assistant",
"content": "好的,请问您对杭州有什么特别的偏好吗?"
}
}
]
}多轮对话
请求command:
curl http://localhost:19327/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user","message": "给我讲一些有关杭州的故事吧"},
{"role": "assistant","message": "好的,请问您对杭州有什么特别的偏好吗?"},
{"role": "user","message": "我比较喜欢和西湖,可以给我讲一下西湖吗"}
],
"repetition_penalty": 1.0
}'json返回体:
{
"id": "chatcmpl-hmvrQNPGYTcLtmYruPJbv6",
"object": "chat.completion",
"created": 1686143439,
"model": "chinese-llama-alpaca",
"choices": [
{
"index": 0,
"message": {
"role": "user",
"content": "给我讲一些有关杭州的故事吧"
}
},
{
"index": 1,
"message": {
"role": "assistant",
"content": "好的,请问您对杭州有什么特别的偏好吗?"
}
},
{
"index": 2,
"message": {
"role": "user",
"content": "我比较喜欢和西湖,可以给我讲一下西湖吗"
}
},
{
"index": 3,
"message": {
"role": "assistant",
"content": "是的,西湖是杭州最著名的景点之一,它被誉为“人间天堂”。 <\\s>"
}
}
]
}聊天接口高级参数说明
prompt: 生成文字接龙(completion)的提示。
max_tokens: 新生成的句子的token长度。
temperature: 在0和2之间选择的采样温度。较高的值如0.8会使输出更加随机,而较低的值如0.2则会使其输出更具有确定性。temperature越高,使用随机采样最为decoding的概率越大。
num_beams: 当搜索策略为束搜索(beam search)时,该参数为在束搜索(beam search)中所使用的束个数,当num_beams=1时,实际上就是贪心搜索(greedy decoding)。
top_k: 在随机采样(random sampling)时,前top_k高概率的token将作为候选token被随机采样。
top_p: 在随机采样(random sampling)时,累积概率超过top_p的token将作为候选token被随机采样,越低随机性越大,举个例子,当top_p设定为0.6时,概率前5的token概率分别为[0.23, 0.20, 0.18, 0.11, 0.10]时,前三个token的累积概率为0.61,那么第4个token将被过滤掉,只有前三的token将作为候选token被随机采样。
repetition_penalty: 重复惩罚,具体细节可以参考这篇文章:https://arxiv.org/pdf/1909.05858.pdf 。
do_sample: 启用随机采样策略。默认为true。
文本嵌入向量(text embedding)
文本嵌入向量有很多作用,包括但不限于基于大型文档问答、总结一本书中的内容、为大语言模型找到与当前用户输入最相近的记忆等等。
请求command:
curl http://localhost:19327/v1/embeddings \
-H "Content-Type: application/json" \
-d '{
"input": "今天天气真不错"
}'json返回体:
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.003643923671916127,
-0.0072653163224458694,
0.0075545101426541805,
....,
0.0045851171016693115
],
"index": 0
}
],
"model": "chinese-llama-alpaca"
}embedding向量的长度与所使用模型hidden size相同。比如当使用7B模型时,embedding的长度为4096。
File: scripts/README.md
代码与脚本 Code and Scripts
training/
预训练与指令精调代码,Wiki:
- 预训练:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/预训练脚本
- 指令精调:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/指令精调脚本
Pre-training and instruction finetuning code, Wiki:
- Pre-training: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Pretraining-Script
- Instruction finetuning: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/SFT-Script
inference/
使用🤗transformers进行推理,Wiki:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/使用Transformers推理
Inference using 🤗transformers, Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Inference-with-Transformers
langchain/
使用LangChain进行检索式问答和文本摘要的示例,Wiki:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/与LangChain进行集成
Using LangChain for Retrieval QA and Summarization, Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Integrated-with-LangChain
openai_server_demo/
使用fastapi实现的仿OPENAI API风格的服务器,Wiki:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/API调用
A server that implements OPENAI API using fastapi, Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/API-Calls
merge_tokenizer/
中文词表扩充代码,Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/训练细节#准备工作词表扩充
Code for extending Chinese vocabulary, Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Training-Details#preparation-vocabulary-expansion
merge_llama_with_chinese_lora.py
合并LLaMA/Alpaca LoRA脚本,Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/手动模型合并与转换
Script for merging LLaMA/Alpaca LoRA. Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Manual-Conversion
merge_llama_with_chinese_lora_low_mem.py
(推荐)低资源版合并LLaMA/Alpaca LoRA脚本,Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/手动模型合并与转换
(recommended)Script for merging LLaMA/Alpaca LoRA (low-resource version). Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Manual-Conversion
crawl_prompt.py
指令数据爬取脚本,Wiki:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/训练细节#训练数据
Crawl prompt script, Wiki: https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/Training-Details#training-data