# 前言

之前部署的 ChatGLM 用来当私人助手还行,但是要是把他当做聊天对象的话真的不是一般的出戏

于是我在网上又找到了一款新模型「Chinese-LLaMA-Alpaca-2」

在初步测试之后,用来聊天是基本没有问题的(测试参数为 7B 4bit 量化),要是使用 13B 全精度推理应该会好很多

注:这里使用的是二代版本而不是一代版本,一代采用的是 Lora 权重 + 基底 LLaMA,需要手动合并并且无法商用,二代采用基于 Meta 发布的可商用大模型 Llama-2 开发,遵守相关协议下可以商用

# 介绍

项目地址 https://github.com/ymcui/Chinese-LLaMA-Alpaca-2

官方介绍:

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

更多介绍请移步至项目地址

# 部署

这里有中文LLaMA-2Alpaca-2 两个模型供大家选择,因为我已经有 ChatGLM,只需要一个能聊天的 AI,所以我部署的是 Alpaca-2

下面是两个模型的对比区别:

对比项 中文 LLaMA-2 中文 Alpaca-2
模型类型 基座模型 指令 / Chat 模型(类 ChatGPT)
已开源大小 1.3B、7B、13B 1.3B、7B、13B
训练类型 Causal-LM (CLM) 指令精调
训练方式 7B、13B:LoRA + 全量 emb/lm-head 1.3B:全量 7B、13B:LoRA + 全量 emb/lm-head 1.3B:全量
基于什么模型训练 原版 Llama-2(非 chat 版) 中文 LLaMA-2
训练语料 无标注通用语料(120G 纯文本) 有标注指令数据(500 万条)
词表大小 [1] 55,296 55,296
上下文长度 [2] 标准版:4K(12K-18K)长上下文版:16K(24K-32K) 标准版:4K(12K-18K)长上下文版:16K(24K-32K)
输入模板 不需要 需要套用特定模板 [3],类似 Llama-2-Chat
适用场景 文本续写:给定上文,让模型生成下文 指令理解:问答、写作、聊天、交互等
不适用场景 指令理解 、多轮聊天等 文本无限制自由生成

[1] 本项目一代模型和二代模型的词表不同,请勿混用。二代 LLaMA 和 Alpaca 的词表相同。
[2] 括号内表示基于 NTK 上下文扩展支持的最大长度。
[3] Alpaca-2 采用了 Llama-2-chat 系列模板(格式相同,提示语不同),而不是一代 Alpaca 的模板,请勿混用。
[4] 不建议单独使用 1.3B 模型,而是通过投机采样搭配更大的模型(7B、13B)使用。

大家根据自己的需求选择即可,因为官方没有提供 4bit 量化模型,所以我选择 7B 模型 + 在线量化的方式部署

如果大家手头有原版 Llama-2 模型基底,则可以只下载官方的 Lora 模型,完成合并即可

我这里为了方便起见选择「完整 Chinese-Alpaca-2-7B 模型」

官方目前提供三种模型下载方式:百度网盘、Google 云盘、Huggingface

后两种下载方法在国内无法通过正常方式使用,有条件的朋友推荐后两种,当然如果你有百度网盘会员也可以采用第一种方式下载

长上下文版模型,官方推荐以长文本为主的下游任务使用,有需求的朋友也可以选择这类模型


# 下载模型

这里采用 Huggingface 下载方式

在合适位置使用 git 进行 clone

1
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/hfl/chinese-alpaca-2-7b

模型总共有 13 多 G,所以为了保险起见,这里跳过 clone lfs 文件,等待 clone 完成。

clone 完成后手动在 https://huggingface.co/hfl/chinese-alpaca-2-7b 仓库内下载有 LFS 标记的模型文件和 tokenizer.model 文件

下载完成后建议手动对 LFS 模型文件进行 SHA256 校验

注:请保证下载的模型名与仓库内的模型名称一致(部分下载软件可能会对文件进行重命名操作)

# 配置用户交互界面

这里采用对用户比较友好的 text generation webui 作为用户交互界面

项目地址:https://github.com/oobabooga/text-generation-webui

首先将仓库 clone 至本地(请勿包含中文路径)

1
git clone https://github.com/oobabooga/text-generation-webui

clone 完成运行根目录下的start_windows.bat 启动安装脚本

注:安装请保证网络环境优秀!!!优秀的网络环境可以节省至少一半以上的安装时间!!!

安装脚本启动后会依次安装 conda,Pytorch 等环境以及 python 依赖,需要 10-20 分钟左右

Nvidia 显卡记得安装对应的 CUDA 程序 https://developer.nvidia.com/cuda-downloads

等待安装完成…

# 启动模型

一切就绪后,将下载好的模型文件夹放入 text-generation-webui 根目录下models 文件夹

运行start_windows.bat 脚本启动 UI 界面

等待一会,当出现 Running on local URL: http://127.0.0.1:XXXX 时访问该地址

在打开的网页中,选择Model ,在 Model 中下拉选择已下载的模型,勾选 load-in-4bit,然后点击 Load 加载模型

2023-11-23_164129

# 模型配置

选择Parameters

# Generation

这里你可以配置模型的各项参数,temperature,top_p 等等

官方也有预设可以提供直接选择

  • 对于 Instruct(指示模式):Divine Intellect, Big O, simple-1, Space Alien, StarChat, Titanic, tfs-with-top-a, Asterism, Contrastive Search (only works for the Transformers loader at the moment).
  • 对于 Chat(聊天模式):Midnight Enigma, Yara, Shortwave.

当然你也可以点击旁边的骰子图标来随机一个

# Character(适用于 Chat 与 Chat-instruct 模式)

这里可以设置 AI 的人设,你可以将它设置为你的小助手,或者是 猫娘(bushi ,亦或是一起探险的好伙伴

Context 内可以填写 AI 的 prompt,至于怎么写 prompt,就要看各位的自我发挥咯~

当然也有生成 prompt 的相关网站,https://toolsaday.com/writing/character-generator 这个网站感觉还行

设置完成后可以选择将人设其保存下来,方便以后使用

Greeting 内可以填写 AI 的开场白,或者是故事背景,自我发挥即可

最右边还可以设置 AI 和你的个性头像,加深带入感

# Instruct template( 适用于 Chat-instruct 与 Instruct 模式)

这里也是设置 AI 的人设选项卡,下面为官方的设置

依次选择Parameters -> Instruction template ,在Instruction template 中下拉选择Llama-v2 ,并将 Context 输入框中的Answer the questions. 提示语替换为You are a helpful assistant. 你是一个乐于助人的助手。

设置完成后也可以保存,方便以后使用

# 使用

选择Chat 选项卡,进入聊天页面(当然你也可以选择 default 和 notebook,只是我个人觉得 Chat 页面更好用而已)

这里简单介绍输入框左边的菜单选项

Start new chat:顾名思义,开始一段新对话

Send dummy messageSend dummy reply:这两说白了就是伪造聊天记录,一个伪造你发送的内容,一个伪造回复你的内容,并没有经过模型处理,但也不能完全认定为伪造,有时候对调整 AI 对话走向有正向的效果

Impersonate:让 AI 根据上下文推理出你需要说的话(说白了就是自导自演哈哈哈哈,或者当你词穷和无语时,试试让 AI 自导自演一下?)

Continue:继续未完成的对话,当对话一次可能太长导致生成中断,可以使用它来继续生成对话

Regenerate:给 AI 一次重新组织语言的机会

下方是官方的解释:

Generate: sends your message and makes the model start a reply.
Stop: stops an ongoing generation as soon as the next token is generated (which can take a while for a slow model).
Continue: makes the model attempt to continue the existing reply. In some cases, the model may simply end the existing turn immediately without generating anything new, but in other cases, it may generate a longer reply.
Regenerate: similar to Generate, but your last message is used as input instead of the text in the input field. Note that if the temperature/top_p/top_k parameters are low in the “Parameters” tab of the UI, the new reply may end up identical to the previous one.
Remove last reply: removes the last input/output pair from the history and sends your last message back into the input field.
Replace last reply: replaces the last reply with whatever you typed into the input field. Useful in conjunction with “Copy last reply” if you want to edit the bot response.
Copy last reply: sends the contents of the bot’s last reply to the input field.
Impersonate: makes the model generate a new message on your behalf in the input field, taking into consideration the existing chat history.
Send dummy message: adds a new message to the chat history without causing the model to generate a reply.
Send dummy reply: adds a new reply to the chat history as if the model had generated this reply. Useful in conjunction with “Send dummy message”.
Start new chat: starts a new conversation while keeping the old one saved. If you are talking to a character that has a “Greeting” message defined, this message will be automatically added to the new history.
Send to default: sends the entire chat prompt up to now to the “Default” tab.
Send to notebook: sends the entire chat prompt up to now to the “Notebook” tab.

其他的各种玩法就需要大家自己自行探索了~

# 后记

请遵守当地的法律法规,请勿将 AI 用于非法用途!!!