`https://github.com/ymcui/Chinese-LLaMA-Alpaca#%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD`

以ChatGPT、GPT-4等为代表的大语言模型(Large Language Model, LLM)掀起了新一轮自然语言处理领域的研究浪潮,展现出了类通用人工智能(AGI)的能力,受到业界广泛关注。然而,由于大语言模型的训练和部署都极为昂贵,为构建透明且开放的学术研究造成了一定的阻碍。

为了促进大模型在中文NLP社区的开放研究,本项目开源了中文LLaMA模型和指令精调的Alpaca大模型。这些模型在原版LLaMA的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,中文Alpaca模型进一步使用了中文指令数据进行精调,显著提升了模型对指令的理解和执行能力。详细内容请参考技术报告(Cui, Yang, and Yao, 2023)

本项目主要内容:

  • 针对原版LLaMA模型扩充了中文词表,提升了中文编解码效率
  • 开源了使用中文文本数据预训练的中文LLaMA以及经过指令精调的中文Alpaca
  • 开源了预训练脚本、指令精调脚本,用户可根据需要自行进一步训练
  • 快速使用笔记本电脑(个人PC)的CPU/GPU本地量化和部署体验大模型
  • 支持transformersllama.cpptext-generation-webuiLlamaChatLangChainprivateGPT等生态
  • 目前已开源的模型版本:7B(标准版、Plus版)、13B(标准版、Plus版)

下图是中文Alpaca-7B模型在本地CPU量化部署后的实际体验效果(GIF未加速,M1 Max下实测)。


多模态VLE | 中文MiniRBT | 中文LERT | 中英文PERT | 中文MacBERT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner

新闻

[2023/05/16] v3.2版本: 添加指令精调脚本、LangChain支持、基于Gradio的本地Demo等。

[2023/05/10] v3.1版本: 发布中文LLaMA/Alpaca Plus-13B,使用了更大语料训练,相比基础版各项能力显著提升。

[2023/04/28] v3.0版本: 发布中文LLaMA/Alpaca Plus版本(7B),使用了更大的语料进行训练,相比基础版各项能力显著提升。另外还进一步完善了评测流程、添加了预训练脚本等。

往期新闻

内容导引

章节 描述
模型下载 中文LLaMA、Alpaca大模型下载地址
合并模型 (重要)介绍如何将下载的LoRA模型与原版LLaMA合并
本地推理与快速部署 介绍了如何对模型进行量化并使用个人电脑部署并体验大模型
系统效果 介绍了部分场景和任务下的使用体验效果
训练细节 介绍了中文LLaMA、Alpaca大模型的训练细节
FAQ 一些常见问题的回复
️局限性 本项目涉及模型的局限性

模型下载

用户须知(必读)

Facebook官方发布的LLaMA模型禁止商用,并且官方没有正式开源模型权重(虽然网上已经有很多第三方的下载地址)。为了遵循相应的许可,目前暂时无法发布完整的模型权重,敬请各位理解(目前国外也是一样)。Facebook完全开放模型权重之后,本项目会及时更新相关策略。这里发布的是LoRA权重,可以理解为原LLaMA模型上的一个“补丁”,两者进行合并即可获得完整版权重。以下中文LLaMA/Alpaca LoRA模型无法单独使用,需要搭配原版LLaMA模型。请参考本项目给出的合并模型步骤重构模型。

我应该选什么模型?

下面是中文LLaMA和Alpaca模型的基本对比以及建议使用场景(包括但不限于),更多内容见训练细节

推荐使用Plus版,模型体积与基础版相同,但使用了更多数据进行训练。

对比项 中文LLaMA 中文Alpaca
训练方式 传统CLM 指令精调
训练语料 无标注通用语料 有标注指令数据
词表大小[3] 49953 49954=49953+1(pad token)
输入模板 不需要 需要符合模板要求[1]
适用场景 ️ 文本续写:给定上文内容,让模型继续写下去,生成下文 1、指令理解(问答、写作、建议等)
2、多轮上下文理解(聊天等)
不适用场景  指令理解 、多轮聊天等 文本无限制自由生成
llama.cpp 使用-p参数指定上文 使用-ins参数启动指令理解+聊天模式
text-generation-webui 不适合chat模式 使用--cpu可在无显卡形式下运行,若生成内容不满意,建议修改prompt
LlamaChat 加载模型时选择"LLaMA" 加载模型时选择"Alpaca"
HF推理代码 无需添加额外启动参数 启动时添加参数 --with_prompt
web-demo代码 不适用 直接提供Alpaca模型位置即可;支持多轮对话
LangChain示例 / privateGPT 不适用 直接提供Alpaca模型位置即可
已知问题 如果不控制终止,则会一直写下去,直到达到输出长度上限。[2] 目前版本模型生成的文本长度相对短一些,比较惜字如金。可在指令中要求详细回答。[2]

[1] llama.cpp/LlamaChat/HF推理代码/web-demo代码/LangChain示例等已内嵌,无需手动添加模板。
[2] 如果出现了模型回答质量特别低、胡言乱语、不理解问题等情况,请检查是否针对场景使用了正确的模型和正确的启动参数。
[3] 经过指令精调的Alpaca会比LLaMA多一个pad token,因此请勿混用LLaMA/Alpaca词表。

中文LLaMA模型

中文LLaMA模型在原版的基础上扩充了中文词表,使用了中文通用纯文本数据进行二次预训练。

模型名称 训练数据 重构模型[1] 大小[2] LoRA下载[3]
Chinese-LLaMA-7B 通用20G 原版LLaMA-7B 770M [百度网盘]
[Google Drive]
Chinese-LLaMA-Plus-7B ️ 通用120G 原版LLaMA-7B 790M [百度网盘]
[Google Drive]
Chinese-LLaMA-13B 通用20G 原版LLaMA-13B 1G [百度网盘]
[Google Drive]
Chinese-LLaMA-Plus-13B ️ 通用120G 原版LLaMA-13B 1G [百度网盘]
[Google Drive]

中文Alpaca模型

中文Alpaca模型在上述中文LLaMA模型的基础上进一步使用了指令数据进行精调。如希望体验类ChatGPT对话交互,请使用Alpaca模型,而不是LLaMA模型。

模型名称 训练数据 重构模型[1] 大小[2] LoRA下载[3]
Chinese-Alpaca-7B 指令2M 原版LLaMA-7B 790M [百度网盘]
[Google Drive]
Chinese-Alpaca-Plus-7B ️ 指令4M 原版LLaMA-7B &
Chinese-LLaMA-Plus-7B
[4]
1.1G [百度网盘]
[Google Drive]
Chinese-Alpaca-13B 指令3M 原版LLaMA-13B 1.1G [百度网盘]
[Google Drive]
Chinese-Alpaca-Plus-13B ️ 指令4.3M 原版LLaMA-13B &
Chinese-LLaMA-Plus-13B[4]
1.3G [百度网盘]
[Google Drive]

Model Hub

可以在Model Hub下载以上所有模型,并且使用transformersPEFT调用中文LLaMA或Alpaca LoRA模型。以下模型调用名称指的是使用.from_pretrained()中指定的模型名称。

模型名 模型调用名称 链接
Chinese-LLaMA-7B ziqingyang/chinese-llama-lora-7b Model Hub Link
Chinese-LLaMA-Plus-7B ziqingyang/chinese-llama-plus-lora-7b Model Hub Link
Chinese-LLaMA-13B ziqingyang/chinese-llama-lora-13b Model Hub Link
Chinese-LLaMA-Plus-13B ziqingyang/chinese-llama-plus-lora-13b Model Hub Link
Chinese-Alpaca-7B ziqingyang/chinese-alpaca-lora-7b Model Hub Link
Chinese-Alpaca-Plus-7B ziqingyang/chinese-alpaca-plus-lora-7b Model Hub Link
Chinese-Alpaca-13B ziqingyang/chinese-alpaca-lora-13b Model Hub Link
Chinese-Alpaca-Plus-13B ziqingyang/chinese-alpaca-plus-lora-13b Model Hub Link

脚注及其他说明

[1] 重构需要原版LLaMA模型,去LLaMA项目申请使用或参考这个PR。因版权问题本项目无法提供下载链接。

[2] 经过重构后的模型大小比同等量级的原版LLaMA大一些(主要因为扩充了词表)。

[3] 下载后务必检查压缩包中模型文件的SHA256是否一致,请查看SHA256.md

[4] Alpaca-Plus模型的合并方法略有不同,请参考合并教程

压缩包内文件目录如下(以Chinese-LLaMA-7B为例):

  1. chinese_llama_lora_7b/
  2. - adapter_config.json # LoRA权重配置文件
  3. - adapter_model.bin # LoRA权重文件
  4. - special_tokens_map.json # special_tokens_map文件
  5. - tokenizer_config.json # tokenizer配置文件
  6. - tokenizer.model # tokenizer文件

以下是各原模型和4-bit量化后的大小,转换相应模型时确保本机有足够的内存和磁盘空间(最低要求):

模型版本 7B 13B 33B 65B
原模型大小(FP16) 13 GB 24 GB 60 GB 120 GB
量化后大小(8-bit) 7.8 GB 14.9 GB - -
量化后大小(4-bit) 3.9 GB 7.8 GB 19.5 GB 38.5 GB

合并模型

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

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

具体内容请参考本项目 >>> GitHub Wiki

本地推理与快速部署

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

推理和部署方式 特点 平台 CPU GPU 量化加载 图形界面 教程
llama.cpp 丰富的量化选项和高效本地推理 通用 链接
Transformers 原生transformers推理接口 通用 链接
text-generation-webui 前端Web UI界面的部署方式 通用 链接
LlamaChat macOS下的图形交互界面(需搭配llama.cpp模型) MacOS 链接
LangChain LLM应用开发框架,适用于进行二次开发 通用 链接
privateGPT 基于LangChain的多文档本地问答框架 通用 链接

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

具体内容请参考本项目 >>> GitHub Wiki

系统效果

为了快速评测相关模型的实际表现,本项目在给定相同的prompt的情况下,在一些常见任务上对比测试了本项目的中文Alpaca-7B、中文Alpaca-13B、中文Alpaca-Plus-7B、中文Alpaca-Plus-13B的效果。生成回复具有随机性,受解码超参、随机种子等因素影响。以下相关评测并非绝对严谨,测试结果仅供晾晒参考,欢迎自行体验。详细评测结果请查看examples目录

测试任务 样例数 Alpaca-13B Alpaca-Plus-7B Alpaca-Plus-13B
总平均分 200 74.3 78.2 80.8
知识问答 20 70 74 79
开放式问答 20 77 77 77
数值计算、推理 20 61 61 60
诗词、文学、哲学 20 65 76 76
音乐、体育、娱乐 20 68 73 80
写信、写文章 20 83 82 87
文本翻译 20 84 87 90
多轮交互 20 88 89 89
代码编程 20 65 64 70
伦理、拒答 20 82 99 100

训练细节

整个训练流程包括词表扩充、预训练和指令精调三部分。

具体内容请参考本项目 >>> GitHub Wiki

FAQ

FAQ中给出了常见问题的解答,请在提Issue前务必先查看FAQ。

  1. 问题1:为什么不能放出完整版本权重?
  2. 问题2:后面会有33B65B的版本吗?
  3. 问题3:一些任务上效果不好!
  4. 问题4:为什么要扩充词表?直接在原版LLaMA上用中文预训练不行吗?
  5. 问题5:回复内容很短
  6. 问题6Windows下,模型无法理解中文、生成速度很慢等问题
  7. 问题7Chinese-LLaMA 13B模型没法用llama.cpp启动,提示维度不一致
  8. 问题8Chinese-Alpaca-Plus效果很差
  9. 问题9:模型在NLU类任务(文本分类等)上效果不好

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

局限性

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

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

引用

如果您觉得本项目对您的研究有所帮助或使用了本项目的代码或数据,请参考引用本项目的技术报告:https://arxiv.org/abs/2304.08177

  1. @article{chinese-llama-alpaca,
  2. title={Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca},
  3. author={Cui, Yiming and Yang, Ziqing and Yao, Xin},
  4. journal={arXiv preprint arXiv:2304.08177},
  5. url={https://arxiv.org/abs/2304.08177},
  6. year={2023}
  7. }

致谢

本项目基于以下开源项目二次开发,在此对相关项目和研究开发人员表示感谢。

基础模型、代码 量化、推理、部署 数据
LLaMA by Facebook
Alpaca by Stanford
alpaca-lora by @tloen
llama.cpp by @ggerganov
LlamaChat by @alexrozanski
text-generation-webui by @oobabooga
pCLUE and MT data by @brightmart

Episode: The current logo is automatically generated by GPT-4 with the DALL·E plugin (previously generated by midjourney).

免责声明

本项目相关资源仅供学术研究之用,严禁用于商业用途。 使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目不对其准确性作出保证。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。

本项目由个人及协作者业余时间发起并维护,因此无法保证能及时回复解决相应问题。

问题反馈

如有问题,请在GitHub Issue中提交。

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

[转帖][github]Chinese-LLaMA-Alpaca Public的更多相关文章

  1. [转帖]GitHub上整理的一些工具

    GitHub上整理的一些工具   技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 inf ...

  2. 使用 GitHub 和 Hexo 搭建个人独立博客

      Wordpress这类博客系统功能强大,可对与我只想划拉的写点东西的人,感觉大材小用了.而且wp需要部署,网站的服务器也会带来问题,国内的服务器首先需要备案,费用不低:国外服务器访问速度受影响.近 ...

  3. git与github安装、配置、pull、push

    操作系统是Ubuntu 16.04 LTS 64bit 1 安装git (1)安装 sudo apt-get install git-core (2)一些全局变量的初始化 在本地建立一个文件夹,然后做 ...

  4. Github 使用

    创建repository 可以在Github上无限制使用public repository进行源代码管理,创建一个repository很简单,不多说了. 获取代码到本地 首先要安装Git,然后使用命令 ...

  5. Octopress创建GitHub Pages——基于代码托管的静态博客

    Github Pages是静态网页来的,官方也半认可了它的博客用途,代码挂在github上,随时都可以更改,算是不错的一种尝试,因为它是静态的,所以在表现上会自由得多,但是,同样因为它是静态的,管理上 ...

  6. github如何添加ssh

    1.运行git Bash 输入如下命令: $ cd ~/.ssh $ ls 输入这2个命令 ,我们可以看到 id_rsa.pub 或 id_dsa.pub 这2个文件已经存在了,id_rsa 是私钥, ...

  7. 通过TortoiseGit来使用Github或Visual Studio Online版本控制管理

    一.前言 关于Git源码不再多阐述,它就是一款开源分布式版本控制工具,它在源码管理领土上目前为止,使用者比例很大,越来越多的人使用该工具来管理项目源码,且相当多的开源的项目都移步到Github中,如: ...

  8. 使用hexo搭建博客并上传GitHub

    之前在博客园.简书.CSDN等地儿都开过博,一篇文章写好了,我希望能在几个平台可以同步发布,可是操作起来成本不低.几个平台下的富文本编辑器比较起来还是博客园更顺手,看着更舒服,尤其是代码块的操作灵活. ...

  9. GitHub+Octopress搭建免费blog

    生成github公钥 检查ssh公钥设置: 如果id_rsa*文件不存在,跳到第三步: $ cd .ssh $ ls 备份原来的ssh key: 备份旧数据,备份后删除旧数据: $ mkdir key ...

  10. Online IDE & Public URLs & turbo

    Online IDE powered by Visual Studio Code https://stackblitz.com/ https://www.polymer-project.org/3.0 ...

随机推荐

  1. POJ 3003 DP 寻路 记录路径

    POJ 3003 DP 寻路 记录路径 我一开始把M看成是每个a_i的上限了,这是致命的,因为这个题dfs暴力搜索+剪枝是过不了的因为M<=40,全部状态有2的四十次幂. 正解是DP,设dp[i ...

  2. C++产生N以内的随机整数

    C++产生N(这里N=100)以内的随机整数的例子: #include <iostream> #include <ctime> using namespace std; int ...

  3. 华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流

    本文分享自华为云社区<华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流(体验用户招募中)>,作者:华为云PaaS服务小智. 打破传统开发模式,API编排应运而生 ...

  4. 5步带你掌握工作流Activiti框架的使用

    摘要:本文通过一个工作流Activiti框架的具体使用示例,具体详尽的介绍了工作流Activiti框架的使用方式. 本文分享自华为云社区<一个使用示例,五个操作步骤!从此轻松掌握项目中工作流的开 ...

  5. 抖音"凶猛"的幕后英雄,火山引擎 DataTester 累计做过 150 万次 A/B 测试

    在国内互联网领域,字节跳动是最为推崇 A/B 测试的公司,旗下"抖音"."今日头条"两大最著名产品,连 APP 的名字都是来源于 A/B 测试. A/B 测试( ...

  6. Solon 路由的 Url 大小写匹配与事项注意

    Solon 路由器对 url 的匹配默认是 "忽略大小写" 的.如果有需要,可以强制开启:v2.2.14 后支持 @SolonMain public class App{ publ ...

  7. 怎么用 Solon 开发基于 undertow jsp tld 的项目?(新)

    Solon 开发 jsp 项目是非常简单的,只要改用 jetty 启动器 或者 undertow 启动器,其它也没特别之处了.此文用 undertow + jsp + tld 这个套路搞一把: 一. ...

  8. Solon cloud 使用融断器 sentinel 或 guava 或 semaphore

    Solon Cloud 是一套防腐层的架构方案.提供统一的接口定义和配置设计,从而实现不同框架统一体验的效果. 目前,已适配的融断器有三个插件且体验方式完全相同,分别是: sentinel-solon ...

  9. AIGC加速迭代,云栖大会视频云「媒体服务」专场与你共话云智深度融合

    2023杭州·云栖大会 倒计时5天! 阿里云视频云 5大并行Session 11场话题演讲 深度演绎云智融合的全面进化 「媒体服务」Tech专场 重磅议题剧透来袭 01 「媒体服务」Tech • 新数 ...

  10. jdk1.8(java8)新特性

    借鉴之:https://blog.csdn.net/qq_28410283/article/details/80601495 Lambda 表达式: //1.Lambda 表达式,也可称为闭包,它是推 ...