Skip to content

Commit b471db1

Browse files
committed
add transformers and text-generation-webui interfaces
1 parent c3f58ca commit b471db1

File tree

2 files changed

+122
-71
lines changed

2 files changed

+122
-71
lines changed

README.md

Lines changed: 63 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
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

@@ -26,9 +26,9 @@
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

@@ -38,20 +38,22 @@
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

195203
1. 模型量化过程需要将未量化模型全部载入内存,请确保有足够可用内存(7B版本需要13G以上)
196204
2. 加载使用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
286330
python 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

Comments
 (0)