1717
1818以ChatGPT、GPT-4等为代表的大语言模型(Large Language Model, LLM)掀起了新一轮自然语言处理领域的研究浪潮,展现出了类通用人工智能(AGI)的能力,受到业界广泛关注。然而,由于大语言模型的训练和部署都极为昂贵,为构建透明且开放的学术研究造成了一定的阻碍。
1919
20- 为了促进大模型在中文NLP社区的开放研究,本项目开源了** 中文LLaMA模型和经过指令精调的Alpaca大模型 ** 。这些模型** 在原版LLaMA的基础上扩充了中文词表** 并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,在中文LLaMA的基础上,本项目使用了中文指令数据进行指令精调 ,显著提升了模型对指令的理解和执行能力。
20+ 为了促进大模型在中文NLP社区的开放研究,本项目开源了** 中文LLaMA模型和指令精调的Alpaca大模型 ** 。这些模型** 在原版LLaMA的基础上扩充了中文词表** 并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,中文Alpaca模型进一步使用了中文指令数据进行精调 ,显著提升了模型对指令的理解和执行能力。
2121
2222*** 声明:本项目相关资源仅供学术研究使用。***
2323
2626- 🚀 针对原版LLaMA模型扩充了中文词表,提升了中文编解码效率
2727- 🚀 开源了使用中文文本数据预训练的中文LLaMA大模型(7B、13B)
2828- 🚀 开源了进一步经过指令精调的中文Alpaca大模型(7B、13B)
29- - 🚀 快速使用笔记本电脑(个人PC)的CPU本地部署和体验量化版大模型
29+ - 🚀 快速使用笔记本电脑(个人PC)的CPU/GPU本地部署和体验大模型
3030
31- 💡 下图给出了7B版本模型本地化部署后的实际体验效果 (动画未经加速,Apple M1 Max下实测)。
31+ 💡 下图给出了7B版本模型本地CPU部署后的实际体验效果 (动画未经加速,Apple M1 Max下实测)。
3232
3333![ ] ( ./pics/screencast.gif )
3434
3838
3939## 新闻
4040
41- ** [ 2023/04/07] 🎉🎉🎉 Release v2.0:发布13B版本中文LLaMA、Alpaca大模型,主要升级:更强的事实性、文本问答、翻译、伦理拒答等能力全面提升!更多更新内容请参考:[ Release Note] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/releases/tag/v2.0 ) **
41+ ** [ 2023/04/13] Release v2.1:添加HuggingFace推理接口、text-generation-webui接口。请参考:[ Release Note] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/releases/tag/v2.1 ) **
42+
43+ [ 2023/04/07] Release v2.0:发布13B版本中文LLaMA、Alpaca大模型,主要升级:更强的事实性、文本问答、翻译、伦理拒答等能力全面提升!更多更新内容请参考:[ Release Note] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/releases/tag/v2.0 )
4244
4345[ 2023/04/03] 添加了模型合并和量化的notebook,Colab Pro(+)用户可在线合并和下载模型。请参考:[ 合并模型] ( #合并模型 )
4446
4547[ 2023/03/31] Release v1.1:简化模型合并步骤、添加指令数据爬取脚本、关于新版本llama.cpp的重要提示。请参考:[ Release Note] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/releases/tag/v1.1 )
4648
47- [ 2023/03/28] 正式开源中文LLaMA、Alpaca大模型,目前提供7B版本下载体验 🎉🎉🎉
49+ [ 2023/03/28] 正式开源中文LLaMA、Alpaca大模型,目前提供7B版本下载体验
4850
4951## 内容导引
5052| 章节 | 描述 |
5153| ------------------------------------- | ------------------------------------------------------------ |
5254| [ ⏬模型下载] ( #模型下载 ) | 中文LLaMA、Alpaca大模型下载地址 |
5355| [ 🈴合并模型] ( #合并模型 ) | (重要)介绍如何将下载的LoRA模型与原版LLaMA合并 |
54- | [ 💻本地快速部署 ] ( #本地快速部署 ) | 介绍了如何对模型进行量化并使用个人电脑部署并体验大模型 |
56+ | [ 💻本地推理与快速部署 ] ( #本地推理与快速部署 ) | 介绍了如何对模型进行量化并使用个人电脑部署并体验大模型 |
5557| [ 💯系统效果] ( #系统效果 ) | 介绍了部分场景和任务下的使用体验效果 |
5658| [ 📝训练细节] ( #训练细节 ) | 介绍了中文LLaMA、Alpaca大模型的训练细节 |
5759| [ ⚠️局限性] ( #局限性 ) | 本项目涉及模型的局限性 |
@@ -126,7 +128,7 @@ chinese_llama_lora_7b/
126128
127129### 在线转换
128130
129- ** 🆕 经过内存优化之后,现在Colab免费用户也能在线转换7B和13B模型了!**
131+ ** 经过内存优化之后,现在Colab免费用户也能在线转换7B和13B模型了!**
130132
131133如果你熟悉Google Colab(如果有Pro以及更高订阅更佳),可以使用我们写好的Notebook在线合并和量化模型。
132134
@@ -179,18 +181,24 @@ python scripts/merge_llama_with_chinese_lora.py \
179181 --output_dir path_to_output_dir
180182```
181183
184+ 参数说明:
185+
182186- ` --base_model ` :存放HF格式的LLaMA模型权重和配置文件的目录(Step 1生成)
183187- ` --lora_model ` :中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用[ 🤗Model Hub模型调用名称] ( #Model-Hub )
184188- ` --output_dir ` :指定保存全量模型权重的目录,默认为` ./ `
185189- (可选)` --offload_dir ` :对于低内存用户需要指定一个offload缓存路径
186190
187- ## 本地快速部署
191+ ## 本地推理与快速部署
188192
189- ### llama.cpp
193+ 本项目中的模型主要支持以下三种推理和部署方式:
190194
191- 接下来以[ llama.cpp工具] ( https://github.com/ggerganov/llama.cpp ) 为例,介绍MacOS和Linux系统中,将模型进行量化并在** 本地CPU上部署** 的详细步骤。Windows则可能需要cmake等编译工具的安装(Windows用户出现模型无法理解中文或生成速度特别慢时请参考[ FAQ #6 ] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/tree/main#FAQ ) )。** 本地快速部署体验推荐使用经过指令精调的Alpaca模型,有条件的推荐使用FP16模型,效果更佳。**
195+ - [ llama.cpp] ( #llamacpp ) :提供了一种模型量化和在本地CPU上部署方式
196+ - [ 🤗Transformers] ( #使用Transformers推理 ) :提供原生transformers推理接口,支持CPU/GPU上进行模型推理
197+ - [ text-generation-webui] ( #使用text-generation-webui搭建界面 ) :提供了一种可实现前端UI界面的部署方式
192198
193- 下面以中文Alpaca-7B模型为例介绍,运行前请确保:
199+ ### llama.cpp
200+
201+ 接下来以[ llama.cpp工具] ( https://github.com/ggerganov/llama.cpp ) 为例,介绍MacOS和Linux系统中,将模型进行量化并在** 本地CPU上部署** 的详细步骤。Windows则可能需要cmake等编译工具的安装(Windows用户出现模型无法理解中文或生成速度特别慢时请参考[ FAQ #6 ] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/tree/main#FAQ ) )。** 本地快速部署体验推荐使用经过指令精调的Alpaca模型,有条件的推荐使用FP16模型,效果更佳。** 下面以中文Alpaca-7B模型为例介绍,运行前请确保:
194202
1952031 . 模型量化过程需要将未量化模型全部载入内存,请确保有足够可用内存(7B版本需要13G以上)
1962042 . 加载使用4-bit量化后的模型时(例如7B版本),确保本机可用内存大于4-6G(受上下文长度影响)
@@ -203,12 +211,10 @@ python scripts/merge_llama_with_chinese_lora.py \
203211运行以下命令对llama.cpp项目进行编译,生成` ./main ` 和` ./quantize ` 二进制文件。
204212
205213``` bash
206- git clone https://github.com/ggerganov/llama.cpp
207- cd llama.cpp
208- make
214+ git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp && make
209215```
210216
211- #### Step 2: 生成量化版本模型
217+ #### Step 2: 生成量化版本模型
212218
213219将[ 合并模型] ( #合并模型 ) (选择生成` .pth ` 格式模型)中最后一步生成的` tokenizer.model ` 文件放入` zh-models ` 目录下,模型文件` consolidated.*.pth ` 和配置文件` params.json ` 放入` zh-models/7B ` 目录下。请注意LLaMA和Alpaca的` tokenizer.model ` 不可混用(原因见[ 训练细节] ( #训练细节 ) )。目录结构类似:
214220
@@ -236,7 +242,7 @@ python convert-pth-to-ggml.py zh-models/7B/ 1
236242
237243#### Step 3: 加载并启动模型
238244
239- 运行` ./main ` 二进制文件,` -m ` 命令指定4-bit量化模型(也可加载ggml-FP16的模型)。以下是解码参数示例 (并非最优参数):
245+ 运行` ./main ` 二进制文件,` -m ` 命令指定4-bit量化或FP16的GGML模型。以下是命令示例 (并非最优参数):
240246
241247``` bash
242248./main -m zh-models/7B/ggml-model-q4_0.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3
@@ -255,9 +261,47 @@ python convert-pth-to-ggml.py zh-models/7B/ 1
255261--top_p, top_k 控制解码采样的相关参数
256262```
257263
258- ### text-generation-webui
264+ ### 使用Transformers推理
265+
266+ 如果想在不安装其他库或Python包的情况下快速体验模型效果,可以使用[ scripts/inference_hf.py] ( scripts/inference_hf.py ) 脚本启动非量化模型。该脚本支持CPU和GPU的单卡推理。以启动Chinese-Alpaca-7B模型为例,脚本运行方式如下:
267+
268+ ``` bash
269+ CUDA_VISIBLE_DEVICES={device_id} python scripts/inference_hf.py \
270+ --base_model path_to_original_llama_hf_dir \
271+ --lora_model path_to_chinese_llama_or_alpaca_lora \
272+ --with_prompt \
273+ --interactive
274+ ```
275+
276+ 如果已经执行了` merge_llama_with_chinese_lora_to_hf.py ` 脚本将lora权重合并,那么无需再指定` --lora_model ` ,启动方式更简单:
277+
278+ ``` bash
279+ CUDA_VISIBLE_DEVICES={device_id} python scripts/inference_hf.py \
280+ --base_model path_to_merged_llama_or_alpaca_hf_dir \
281+ --with_prompt \
282+ --interactive
283+ ```
284+
285+ 参数说明:
286+
287+ * ` {device_id} ` :CUDA设备编号。如果为空,那么在CPU上进行推理
288+ * ` --base_model {base_model} ` :存放HF格式的LLaMA模型权重和配置文件的目录
289+ * ` --lora_model {lora_model} ` :中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用[ 🤗Model Hub模型调用名称] ( #Model-Hub ) 。若不提供此参数,则只加载` --base_model ` 指定的模型
290+ * ` --tokenizer_path {tokenizer_path} ` :存放对应tokenizer的目录。若不提供此参数,则其默认值与` --lora_model ` 相同;若也未提供` --lora_model ` 参数,则其默认值与` --base_model ` 相同
291+ * ` --with_prompt ` :是否将输入与prompt模版进行合并。** 如果加载Alpaca模型,请务必启用此选项!**
292+ * ` --interactive ` :以交互方式启动,以便进行多次** 单轮问答** (此处不是llama.cpp中的上下文对话)
293+ * ` --data_file {file_name} ` :非交互方式启动下,按行读取` file_name ` 中的的内容进行预测
294+ * ` --predictions_file {file_name} ` :非交互式方式下,将预测的结果以json格式写入` file_name `
295+
296+ 注意事项:
297+
298+ - 因不同框架的解码实现细节有差异,该脚本并不能保证复现llama.cpp的解码效果
299+ - 该脚本仅为方便快速体验用,并未对多机多卡、低内存、低显存等情况等条件做任何优化
300+ - 如在CPU上运行7B模型推理,请确保有32GB内存;如在GPU上运行7B模型推理,请确保有20GB显存
301+
302+ ### 使用text-generation-webui搭建界面
259303
260- 接下来以[ text-generation-webui工具] ( https://github.com/oobabooga/text-generation-webui ) 为例,介绍无需合并模型即可 ** 本地化部署** 的详细步骤
304+ 接下来以[ text-generation-webui工具] ( https://github.com/oobabooga/text-generation-webui ) 为例,介绍无需合并模型即可进行 ** 本地化部署** 的详细步骤。
261305
262306``` bash
263307# 克隆text-generation-webui
@@ -284,48 +328,7 @@ shared.model = PeftModel.from_pretrained(shared.model, Path(f"{shared.args.lora_
284328
285329# 接下来就可以愉快的运行了,参考https://github.com/oobabooga/text-generation-webui/wiki/Using-LoRAs
286330python server.py --model llama-7b-hf --lora chinese-alpaca-lora-7b
287-
288- ```
289-
290- ### 使用Transformers推理
291-
292- 如果想快速体验模型效果,不安装其他库或Python包,可以使用[ scripts/inference_hf.py] ( scripts/inference_hf.py ) 在不量化的情况下启动模型。该脚本支持CPU和GPU的单卡推理。以启动Chinese-Alpaca 7B模型为例,脚本运行方式如下:
293-
294- (** 因不同框架的解码的实现细节有差异,该脚本并不能保证复现llama.cpp的解码效果** )
295-
296331```
297- CUDA_VISIBLE_DEVICES={device_id} python scripts/inference_hf.py \
298- --base_model path_to_original_llama_hf_dir \
299- --lora_model path_to_chinese_llama_or_alpaca_lora \
300- --with_prompt \
301- --interactive
302- ```
303-
304- 如果已经执行了` merge_llama_with_chinese_lora_to_hf.py ` 脚本将lora权重合并,那么无需再指定lora_model,启动方式更简单:
305-
306- ```
307- CUDA_VISIBLE_DEVICES={device_id} python scripts/inference_hf.py \
308- --base_model path_to_merged_llama_or_alpaca_hf_dir \
309- --with_prompt \
310- --interactive
311- ```
312-
313- 参数说明以及其他可选参数如下
314-
315- * ` {device_id} ` : CUDA设备编号。如果为空,那么在CPU上进行推理
316- * ` --base_model {base_model} ` : 存放HF格式的LLaMA模型权重和配置文件的目录
317- * ` --lora_model {lora_model} ` : 中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用[ 🤗Model Hub模型调用名称] ( #Model-Hub ) 。若不提供此参数,则只加载base_model
318- * ` --tokenizer_path {tokenizer_path} ` : 存放对应tokenizer的目录。若不提供此参数,则其值与lora_model相同;若也未提供lora_model参数,则其值与base_model相同
319- * ` --with_prompt ` : 是否将输入放入prompt模版中。** 如果加载Alpaca模型,请务必启用此选项!**
320- * ` --interactive ` : 以交互式方式启动。** 与llama.cpp不同,该脚本不支持多轮对话中的上下文语意理解**
321- * ` --data_file {file_name} ` : 非交互式方式启动下,按行读取file_name中的的内容进行预测
322- * ` --predictions_file {file_name} ` : 非交互式方式下,将预测的结果以json格式写入file_name
323-
324- ⚠️** 注意:该脚本仅为方便快速体验用,并未对多卡、低内存、低显存等情况等条件做任何优化。⚠️**
325-
326- ⚠️** 如在CPU上运行7B模型推理,请确保有32GB内存;如在GPU上运行7B模型推理,请确保有20GB显存** ⚠️
327-
328-
329332
330333## 系统效果
331334
@@ -562,7 +565,7 @@ python script/crawl_prompt.py output-file
562565
563566##### 问题7:Chinese-LLaMA 13B模型没法用llama.cpp启动,提示维度不一致
564567
565- 答:这与13B模型拆分成了两个文件,每个文件大小不相同有关,见 https://github.com/ymcui/Chinese-LLaMA-Alpaca/issues/133 。动手能力强的用户可以用issue提到的方法自己尝试解决 。另一方面,Chinese-LLaMA模型本身并不是为对话、交互设计,而是为进一步在中文上fine-tuning提供基底;所以也并不建议用llama .cpp加载Chinese-LLaMA模型。
568+ 答:这与13B模型拆分成了两个文件,每个文件大小不相同有关,见[ Issue # 133 ] ( https://github.com/ymcui/Chinese-LLaMA-Alpaca/issues/133 ) 。动手能力强的用户可以用该issue提到的方法自己尝试解决 。另一方面,Chinese-LLaMA模型本身并不是为对话、交互设计,而是为进一步在中文指令精调或其他任务精调提供基底,因此也并不建议用llama .cpp加载Chinese-LLaMA模型。
566569
567570
568571## 引用
0 commit comments