/Chinese-LLaMA-Alpaca-2

中文 LLaMA-2 & Alpaca-2 大模型二期项目 (Chinese LLaMA-2 & Alpaca-2 LLMs)

Primary LanguagePythonApache License 2.0Apache-2.0

🇨🇳中文 | 🌐English | 📖文档/Docs | ❓提问/Issues | 💬讨论/Discussions | ⚔️竞技场/Arena



GitHub GitHub release (latest by date) GitHub top language

本项目基于Meta发布的可商用大模型Llama-2开发,是中文LLaMA&Alpaca大模型的第二期项目,开源了中文LLaMA-2基座模型和Alpaca-2指令精调大模型。这些模型在原版Llama-2的基础上扩充并优化了中文词表,使用了大规模中文数据进行增量预训练,进一步提升了中文基础语义和指令理解能力,相比一代相关模型获得了显著性能提升。相关模型支持4K上下文并可通过NTK方法最高扩展至18K+。

本项目主要内容:

  • 🚀 针对Llama-2模型扩充了新版中文词表,开源了中文LLaMA-2和Alpaca-2大模型
  • 🚀 开源了预训练脚本、指令精调脚本,用户可根据需要进一步训练模型
  • 🚀 使用个人电脑的CPU/GPU快速在本地进行大模型量化和部署体验
  • 🚀 支持🤗transformers, llama.cpp, text-generation-webui, LangChain, vLLM等LLaMA生态
  • 目前已开源的模型:Chinese-LLaMA-2-7B, Chinese-Alpaca-2-7B (更大的模型可先参考一期项目)


多模态中文LLaMA&Alpaca大模型 | 多模态VLE | 中文MiniRBT | 中文LERT | 中英文PERT | 中文MacBERT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner | 蒸馏裁剪一体化GRAIN

新闻

[2023/08/02] 添加FlashAttention-2训练支持,基于vLLM的推理加速支持,提供长回复系统提示语模板等。详情查看📚 v1.1版本发布日志

[2023/07/31] 正式发布Chinese-LLaMA-2-7B(基座模型),使用120G中文语料增量训练(与一代Plus系列相同);进一步通过5M条指令数据精调(相比一代略微增加),得到Chinese-Alpaca-2-7B(指令/chat模型)。详情查看📚 v1.0版本发布日志

[2023/07/19] 🚀启动中文LLaMA-2、Alpaca-2开源大模型项目

内容导引

章节 描述
💁🏻‍♂️模型简介 简要介绍本项目相关模型的技术特点
⏬模型下载 中文LLaMA-2、Alpaca-2大模型下载地址
💻推理与部署 介绍了如何对模型进行量化并使用个人电脑部署并体验大模型
💯系统效果 介绍了模型在部分任务上的效果
📝训练与精调 介绍了如何训练和精调中文LLaMA-2、Alpaca-2大模型
❓常见问题 一些常见问题的回复

模型简介

本项目推出了基于Llama-2的中文LLaMA-2以及Alpaca-2系列模型,相比一期项目其主要特点如下:

📖 经过优化的中文词表

  • 一期项目中,我们针对一代LLaMA模型的32K词表扩展了中文字词(LLaMA:49953,Alpaca:49954),以期进一步提升模型对中文文本的编解码效率
  • 在本项目中,我们重新设计了新词表(大小:55296),进一步提升了中文字词的覆盖程度,同时统一了LLaMA/Alpaca的词表,避免了因混用词表带来的问题

⚡ 基于FlashAttention-2的高效注意力

  • FlashAttention-2是高效注意力机制的一种实现,相比其一代技术具有更快的速度和更优化的显存占用
  • 当上下文长度更长时,为了避免显存爆炸式的增长,使用此类高效注意力技术尤为重要
  • 本项目的所有模型均使用了FlashAttention-2技术进行训练

🚄 基于NTK的自适应上下文扩展技术

  • 一期项目中,我们实现了基于NTK的上下文扩展技术,可在不继续训练模型的情况下支持更长的上下文
  • 在上述基础上,我们进一步设计了方便的自适应经验公式,无需针对不同的上下文长度设置相应超参
  • 本项目模型原生支持4K上下文,利用上述技术可扩展至12K,并最高支持扩展至18K+(精度有一定损失)

🤖 简化的中英双语系统提示语

  • 一期项目中,中文Alpaca系列模型使用了Stanford Alpaca的指令模板和系统提示语
  • 初步实验发现,Llama-2-Chat系列模型的默认系统提示语未能带来统计显著的性能提升,且其内容过于冗长
  • 本项目中的Alpaca-2系列模型简化了系统提示语,同时遵循Llama-2-Chat指令模板,以便更好地适配相关生态

模型下载

模型选择指引

下面是中文LLaMA-2和Alpaca-2模型的基本对比以及建议使用场景。

对比项 中文LLaMA-2 中文Alpaca-2
训练方式 传统CLM 指令精调
模型类型 基座模型 指令/Chat模型(类ChatGPT)
训练语料 无标注通用语料 有标注指令数据
词表大小[1] 55,296 55,296
输入模板 不需要 需要套用特定模板[2],类似Llama-2-Chat
适用场景 文本续写:给定上文,让模型生成下文 指令理解:问答、写作、聊天、交互等
不适用场景 指令理解 、多轮聊天等 文本无限制自由生成

[1] 本项目一代模型和二代模型的词表不同,请勿混用。二代LLaMA和Alpaca的词表相同。
[2] Alpaca-2采用了Llama-2-chat系列模板(格式相同,提示语不同),而不是一代Alpaca的模板,请勿混用。

完整模型下载

以下是完整版模型,直接下载即可使用,无需其他合并步骤。推荐网络带宽充足的用户。

模型名称 类型 训练数据 大小 下载地址
Chinese-LLaMA-2-7B 基座模型 120G通用文本 13GB [百度网盘]
[Google Drive]
[HuggingFace]
Chinese-Alpaca-2-7B 指令模型 5M条指令 13GB [百度网盘]
[Google Drive]
[HuggingFace]

LoRA模型下载

以下是LoRA模型,与上述完整模型一一对应。需要注意的是LoRA模型无法直接使用,必须按照教程与重构模型进行合并。推荐网络带宽不足,手头有原版Llama-2且需要轻量下载的用户。

模型名称 类型 训练数据 重构模型 大小 LoRA下载地址
Chinese-LLaMA-2-LoRA-7B 基座模型 120G通用文本 Llama-2-7B-hf 1.1GB [百度网盘]
[Google Drive]
[HuggingFace]
Chinese-Alpaca-2-LoRA-7B 指令模型 5M条指令 Llama-2-7B-hf 1.1GB [百度网盘]
[Google Drive]
[HuggingFace]

由于LoRA模型无法单独使用,必须与原版Llama-2进行合并才能转为完整模型,以便进行模型推理、量化或者进一步训练。请选择以下方法对模型进行转换合并。

  • 在线转换:Colab用户可利用本项目提供的notebook进行在线转换并量化模型
  • 手动转换:离线方式转换,生成不同格式的模型,以便进行量化或进一步精调

推理与部署

本项目中的相关模型主要支持以下量化、推理和部署方式。

工具 特点 CPU GPU 量化 GUI API vLLM 教程
llama.cpp 丰富的量化选项和高效本地推理 link
🤗Transformers 原生transformers推理接口 link
Colab Demo 在Colab中启动交互界面 link
仿OpenAI API调用 仿OpenAI API接口的服务器Demo link
text-generation-webui 前端Web UI界面的部署方式 link
LangChain 适合二次开发的大模型应用开源框架 link

: LangChain框架支持,但教程中未实现;详细说明请参考LangChain官方文档。

⚠️ 一代模型相关推理与部署支持将陆续迁移到本项目,届时将同步更新相关教程。

系统效果

生成效果评测

为了更加直观地了解模型的生成效果,本项目仿照Fastchat Chatbot Arena推出了模型在线对战平台,可浏览和评测模型回复质量。对战平台提供了胜率、Elo评分等评测指标,并且可以查看两两模型的对战胜率等结果。题库来自于一期项目人工制作的200题,以及在此基础上额外增加的题目。生成回复具有随机性,受解码超参、随机种子等因素影响,因此相关评测并非绝对严谨,结果仅供晾晒参考,欢迎自行体验。部分生成样例请查看examples目录

测试模型包括:

📊 模型在线对战http://chinese-alpaca-arena.ymcui.com

客观效果评测

本项目还在“NLU”类客观评测集合上对相关模型进行了测试。这类评测的结果不具有主观性,只需要输出给定标签(需要设计标签mapping策略),因此可以评测大模型的部分NLU能力。本项目在C-Eval评测数据集上测试了相关模型效果,其中验证集包含1.3K个选择题,测试集包含12.3K个选择题,涵盖52个学科。从以下结果可以看出本项目推出的模型相比一期模型具有显著性能优势,甚至在大部分指标上超越了之前的Plus-13B系列模型。

LLaMA系列模型之间对比:

模型 Valid (zero-shot) Valid (5-shot) Test (zero-shot) Test (5-shot)
Chinese-LLaMA-2-7B 28.2 36.0 30.3 34.2
Chinese-LLaMA-Plus-13B 27.3 34.0 27.8 33.3
Chinese-LLaMA-Plus-7B 27.3 28.3 26.9 28.4

Alpaca系列模型之间对比:

模型 Valid (zero-shot) Valid (5-shot) Test (zero-shot) Test (5-shot)
Chinese-Alpaca-2-7B 41.3 42.9 40.3 39.5
Chinese-Alpaca-Plus-13B 43.3 42.4 41.5 39.9
Chinese-Alpaca-Plus-7B 36.7 32.9 36.4 32.3

需要注意的是,综合评估大模型能力仍然是亟待解决的重要课题,单个数据集的结果并不能综合评估模型性能。合理辩证地看待大模型相关评测结果有助于大模型技术的良性发展。推荐用户在自己关注的任务上进行测试,选择适配相关任务的模型。

C-Eval推理代码请参考本项目 >>> 📚 GitHub Wiki

量化效果评测

以Chinese-LLaMA-2-7B为例,对比不同精度下的模型大小、PPL(困惑度)、C-Eval效果,方便用户了解量化精度损失。PPL以4K上下文大小计算,C-Eval汇报的是valid集合上zero-shot和5-shot结果。

精度 模型大小 PPL C-Eval
FP16 12.9 GB 8.1797 28.2 / 36.0
8-bit量化 6.8 GB 8.2884 26.8 / 35.4
4-bit量化 3.7 GB 8.8581 25.5 / 32.8

特别地,以下是在llama.cpp下不同量化方法的评测数据,供用户参考,速度以ms/tok计。具体细节见Wiki

F16 Q4_0 Q4_1 Q4_K Q5_0 Q5_1 Q5_K Q6_K Q8_0
PPL 8.640 8.987 9.175 8.836 8.730 8.776 8.707 8.671 8.640
Size 12.91G 3.69G 4.08G 3.92G 4.47G 4.86G 4.59G 5.30G 6.81G
CPU Speed 117 39 44 43 48 51 50 54 65
GPU Speed 53 17 18 20 n/a n/a 25 26 n/a

训练与精调

预训练(中文LLaMA-2训练)和指令精调(中文Alpaca-2训练)相关内容请参考对应Wiki。

常见问题

请在提Issue前务必先查看FAQ中是否已存在解决方案。

问题1:本项目和一期项目的区别?
问题2:模型能否商用?
问题3:接受第三方Pull Request吗?
问题4:为什么不对模型做全量预训练而是用LoRA?
问题5:二代模型支不支持某些支持一代LLaMA的工具?

具体问题和解答请参考本项目 >>> 📚 GitHub Wiki

引用

如果您使用了本项目的相关资源,请参考引用本项目的技术报告: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(一期项目)的contributor以及关联项目和人员

免责声明

本项目基于由Meta发布的Llama-2模型进行开发,使用过程中请严格遵守Llama-2的开源许可协议。如果涉及使用第三方代码,请务必遵从相关的开源许可协议。模型生成的内容可能会因为计算方法、随机因素以及量化精度损失等影响其准确性,因此,本项目不对模型输出的准确性提供任何保证,也不会对任何因使用相关资源和输出结果产生的损失承担责任。如果将本项目的相关模型用于商业用途,开发者应遵守当地的法律法规,确保模型输出内容的合规性,本项目不对任何由此衍生的产品或服务承担责任。

局限性声明

虽然本项目中的模型具备一定的中文理解和生成能力,但也存在局限性,包括但不限于:

  • 可能会产生不可预测的有害内容以及不符合人类偏好和价值观的内容
  • 由于算力和数据问题,相关模型的训练并不充分,中文理解能力有待进一步提升
  • 暂时没有在线可互动的demo(注:用户仍然可以自行在本地部署)

问题反馈

如有疑问,请在GitHub Issue中提交。礼貌地提出问题,构建和谐的讨论社区。

  • 在提交问题之前,请先查看FAQ能否解决问题,同时建议查阅以往的issue是否能解决你的问题。
  • 提交问题请使用本项目设置的Issue模板,以帮助快速定位具体问题。
  • 重复以及与本项目无关的issue会被stable-bot处理,敬请谅解。