以ChatGPT、GPT-4等为代表的大语言模型(Large Language Model, LLM)掀起了新一轮自然语言处理领域的研究浪潮,展现出了类通用人工智能(AGI)的能力,受到业界广泛关注。然而,由于大语言模型的训练和部署都极为昂贵,为构建透明且开放的学术研究造成了一定的阻碍。
为了促进大模型在中文NLP社区的开放研究,本项目开源了中文LLaMA模型和指令精调的Alpaca大模型。这些模型在原版LLaMA的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,中文Alpaca模型进一步使用了中文指令数据进行精调,显著提升了模型对指令的理解和执行能力。详细内容请参考技术报告(Cui, Yang, and Yao, 2023)。
本项目主要内容:
- 🚀 针对原版LLaMA模型扩充了中文词表,提升了中文编解码效率
- 🚀 开源了使用中文文本数据预训练的中文LLaMA以及经过指令精调的中文Alpaca(7B、13B)
- 🚀 快速使用笔记本电脑(个人PC)的CPU/GPU本地量化和部署体验大模型
- 🚀 支持🤗transformers, llama.cpp, text-generation-webui, LlamaChat等生态
💡 下图是中文Alpaca-7B模型在本地CPU量化部署后的实际体验效果(GIF未加速,M1 Max下实测)。
多模态VLE | 中文MiniRBT | 中文LERT | 中英文PERT | 中文MacBERT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner
[2023/04/18] Release v2.2:添加LlamaChat支持(macOS图形界面)、中文词表以及LLaMA Tokenizer的词表扩充脚本、文档移至GitHub Wiki、添加技术报告等。请参考:Release Note
[2023/04/13] Release v2.1:添加HuggingFace推理接口、text-generation-webui接口。请参考:Release Note
[2023/04/07] Release v2.0:发布13B版本中文LLaMA、Alpaca大模型,主要升级:更强的事实性、文本问答、翻译、伦理拒答等能力全面提升!更多更新内容请参考:Release Note
[2023/04/03] 添加了模型合并和量化的notebook,Colab Pro(+)用户可在线合并和下载模型。请参考:合并模型
[2023/03/31] Release v1.1:简化模型合并步骤、添加指令数据爬取脚本、关于新版本llama.cpp的重要提示。请参考:Release Note
[2023/03/28] 正式开源中文LLaMA、Alpaca大模型,目前提供7B版本下载体验
章节 | 描述 |
---|---|
⏬模型下载 | 中文LLaMA、Alpaca大模型下载地址 |
🈴合并模型 | (重要)介绍如何将下载的LoRA模型与原版LLaMA合并 |
💻本地推理与快速部署 | 介绍了如何对模型进行量化并使用个人电脑部署并体验大模型 |
💯系统效果 | 介绍了部分场景和任务下的使用体验效果 |
📝训练细节 | 介绍了中文LLaMA、Alpaca大模型的训练细节 |
❓FAQ | 一些常见问题的回复 |
本项目涉及模型的局限性 |
Facebook官方发布的LLaMA模型禁止商用,并且官方没有正式开源模型权重(虽然网上已经有很多第三方的下载地址)。为了遵循相应的许可,目前暂时无法发布完整的模型权重,敬请各位理解(目前国外也是一样)。Facebook完全开放模型权重之后,本项目会及时更新相关策略。这里发布的是LoRA权重,可以理解为原LLaMA模型上的一个“补丁”,两者进行合并即可获得完整版权重。
提醒:以下中文LLaMA/Alpaca LoRA模型无法单独使用,需要搭配原版LLaMA模型[1]。请参考本项目给出的合并模型步骤重构模型。
下面是中文LLaMA和Alpaca模型的基本对比以及建议使用场景(包括但不限于),更多细节见训练细节。
对比项 | 中文LLaMA | 中文Alpaca |
---|---|---|
训练方式 | 传统CLM | 指令精调 |
训练语料 | 无标注通用语料 | 有标注指令数据 |
输入模板 | 不需要 | 需要符合模板要求[1] |
适用场景 ✔️ | 文本续写:给定上文内容,让模型继续写下去,生成下文 | 1、指令理解(问答、写作、建议等) 2、多轮上下文理解(聊天等) |
不适用场景 ❌ | 指令理解 、多轮聊天等 | 文本无限制自由生成 |
llama.cpp | 使用-p 参数指定上文 |
使用-ins 参数启动指令理解+聊天模式 |
text-generation-webui | 不适合chat模式 | 使用--cpu 可在无显卡形式下运行,若生成内容不满意,建议修改prompt |
LlamaChat | 加载模型时选择"LLaMA" | 加载模型时选择"Alpaca" |
HF推理代码 | 无需添加额外启动参数 | 启动时添加参数 --with_prompt |
已知问题 | 如果不控制终止,则会一直写下去,直到达到输出长度上限。[2] | 目前版本模型生成的文本长度相对短一些,比较惜字如金。[2] |
[1] llama.cpp/LlamaChat/HF推理代码等已内嵌,无需手动添加模板。
[2] 如果出现了模型回答质量特别低、胡言乱语、不理解问题等情况,请检查是否针对场景使用了正确的模型和正确的启动参数。
中文LLaMA模型在原版的基础上扩充了中文词表,使用了中文通用纯文本数据进行二次预训练。
模型名称 | 类型 | 重构所需模型 | 大小[2] | LoRA下载地址 | SHA256[3] |
---|---|---|---|---|---|
Chinese-LLaMA-7B | 通用 | 原版LLaMA-7B[1] | 770M | [百度网盘] [Google Drive] |
39b86b......fe0e60 |
Chinese-LLaMA-13B | 通用 | 原版LLaMA-13B[1] | 1G | [百度网盘] [Google Drive] |
3d6dee......e5199b |
中文Alpaca模型在上述中文LLaMA模型的基础上进一步使用了指令数据进行精调。如希望体验类ChatGPT对话交互,请使用Alpaca模型,而不是LLaMA模型。
模型名称 | 类型 | 重构所需模型 | 大小[2] | LoRA下载地址 | SHA256[3] |
---|---|---|---|---|---|
Chinese-Alpaca-7B | 指令精调 | 原版LLaMA-7B[1] | 790M | [百度网盘] [Google Drive] |
9bb5b6......ce2d87 |
Chinese-Alpaca-13B | 指令精调 | 原版LLaMA-13B[1] | 1.1G | [百度网盘] [Google Drive] |
45c92e......682d91 |
可以在🤗Model Hub下载以上所有模型,并且使用transformers和PEFT调用中文LLaMA或Alpaca LoRA模型。以下模型调用名称指的是使用.from_pretrained()
中指定的模型名称。
模型名 | 模型调用名称 | 链接 |
---|---|---|
Chinese-LLaMA-7B | ziqingyang/chinese-llama-lora-7b | Model Hub Link |
Chinese-LLaMA-13B | ziqingyang/chinese-llama-lora-13b | Model Hub Link |
Chinese-Alpaca-7B | ziqingyang/chinese-alpaca-lora-7b | Model Hub Link |
Chinese-Alpaca-13B | ziqingyang/chinese-alpaca-lora-13b | Model Hub Link |
[1] 原版LLaMA模型需要去LLaMA项目申请使用或参考这个PR。因版权问题本项目无法提供下载链接。
[2] 经过重构后的模型大小比同等量级的原版LLaMA大一些(主要因为扩充了词表)。
[3] 下载后务必检查压缩包的SHA256是否一致,完整值请查看SHA256.md。
压缩包内文件目录如下(以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文件
以下是各原模型和4-bit量化后的大小,转换相应模型时确保本机有足够的内存和磁盘空间(最低要求):
7B | 13B | 33B | 65B | |
---|---|---|---|---|
原模型大小(FP16) | 13 GB | 24 GB | 60 GB | 120 GB |
量化后大小(4-bit) | 3.9 GB | 7.8 GB | 19.5 GB | 38.5 GB |
为了将LoRA模型与原版LLaMA进行合并以便进行推理或继续训练,目前提供了两种方式:
具体内容请参考本项目 >>> 📚 GitHub Wiki
本项目中的模型主要支持以下四种推理和部署方式:
- llama.cpp:提供了一种模型量化和在本地CPU上的部署方式
- 🤗Transformers:提供原生transformers推理接口,支持CPU/GPU上进行模型推理
- text-generation-webui:提供了一种可实现前端Web UI界面的部署方式
- LlamaChat:提供了一种macOS下的图形交互界面,可加载LLaMA、Alpaca等模型
具体内容请参考本项目 >>> 📚 GitHub Wiki
为了快速评测相关模型的实际表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-7B和中文Alpaca-13B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。详细评测结果请查看examples/README.md。
以下测试结果均基于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 |
整个训练流程包括词表扩充、预训练和指令精调三部分。词表扩充的代码请参考merge_tokenizers.py。预训练和指令精调代码参考了🤗transformers中的run_clm.py和Stanford Alpaca项目中数据集处理的相关部分。
具体内容请参考本项目 >>> 📚 GitHub Wiki
FAQ中给出了常见问题的解答,请在提Issue前务必先查看FAQ。
具体内容请参考本项目 >>> 📚 GitHub Wiki
虽然本项目中的模型相比原版LLaMA和Alpaca在中文理解和生成能力上得到显著提升,但也存在以下局限性:
- 可能会产生不可预测的有害内容以及不符合人类偏好和价值观的内容
- 由于算力和数据问题,相关模型的训练并不充分,中文理解能力有待进一步提升
- 暂时没有在线可互动的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}
}
本项目基于以下开源项目二次开发,在此对相关项目和研究开发人员表示感谢。
- Facebook LLaMA: https://github.com/facebookresearch/llama
- Stanford Alpaca: https://github.com/tatsu-lab/stanford_alpaca
- alpaca-lora by @tloen: https://github.com/tloen/alpaca-lora
- llama.cpp by @ggerganov: https://github.com/ggerganov/llama.cpp
- pCLUE and translation data by @brightmart: https://github.com/brightmart/nlp_chinese_corpus
- LlamaChat by @alexrozanski: https://github.com/alexrozanski/LlamaChat
Episode: Logo中的小羊驼是由midjourney自动生成,并由Mac自带的预览工具自动抠出来的。
本项目相关资源仅供学术研究之用,严禁用于商业用途。 使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目不对其准确性作出保证。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。
本项目由个人及协作者业余时间发起并维护,因此无法保证能及时回复解决相应问题。
如有问题,请在GitHub Issue中提交。
- 在提交问题之前,请先查看FAQ能否解决问题,同时建议查阅以往的issue是否能解决你的问题。
- 提交问题请使用本项目设置的Issue模板
- 重复以及与本项目无关的issue会被stable-bot处理,敬请谅解。
- 礼貌地提出问题,构建和谐的讨论社区。