TGW是Text-Generation-Webui项目的缩写,这是2023年随着ChatGPT的火爆浪潮中,让我们能搭配开源LLM模型,在本地搭建可对话智能助手的项目,就不用整体担心源头单位的朝令夕改所产生的风险。
项目于2023年初在https://github.com/oobabooga/text-generation-webui 开源之后,至今已有近4万个星以及5000多个folks,是个十分非常热门的项目,也被视为是学习自制本地化大模型对话智能助手类型项目的入门应用。
TGW项目的主要特性如下:
提供3种交互界面:两列模式(默认)、笔记本模式和聊天模式。
多个模型后端:包括Transformers、llama.cpp(通过llama-cpp python)、ExLlamaV2、AutoGPTQ、AutoAWQ、TensorRT LLM等。
下拉菜单可以在不同模型之间快速切换。
大量扩展(内置和用户贡献),包括用于真实语音输出的Coqui TTS、用于语音输入、翻译、多模式管道、矢量数据库、稳定扩散集成等的Whisper STT。
可以与自定义角色聊天。
精确的聊天模板,用于指令跟踪模型,包括Llama-2-chat、Alpaca、Vicuna、Mistral。
LoRA:使用您自己的数据训练新的LoRA,动态加载/卸载LoRA以进行生成。
Transformers库集成:通过bitsandbytes加载4位或8位精度的模型,使用llama.cpp和Transformers采样器(llamacpp_HF加载器),使用PyTorch进行32位精度的CPU推理。
与OpenAI兼容的API服务器,带有聊天和完成端点。
事实上我们可以将TWG项目视为一套SDK开发包,因为项目还提供非常完整的使用说明,在https://github.com/oobabooga/text-generation-webui/wiki/,包括非常丰富的参数列表(03‐Parameters Tab)、与模型相关的指令与参数列表(04-Model Tab)、与OpenAI对接的API接口与范例(12-OpenAI Tab),甚至还提供一套训练LoRA模型的教程(05-Train Tab)。
更有甚者,TGW除了自己开发出一些强大的扩充(extensions)之外,还允许任何人根据他们所定义的规范,去开发自己的扩充件,然后还可以加入TGW的生态圈里,这是相当有远见与企图心的做法,可以参考07-Extension这个章节的内容。只要能把TGW玩得熟练,就能在这个基础上非常轻松地开发自己的有趣大模型应用。
由于TGW里面包含太多内容,虽然在Github项目里提供一些对应平台的安装脚本,包括start_linux.sh、start_macos.sh、start_windows.bat、start_wsl.bat等等,看起来是非常简单,但实际执行时就会遇到非常多不可预期的坑,特别是受到网络约束或带宽限制所带来的困扰。
在我们前面搭建的Jetson AI Lab的jetson-containers运行环境中,已经为我们创建好多个可以直接下载并执行的docker镜像文件,如下图所示:
现在执行以下最简单的指令试试看:
$ jetson-containers run $(autotag text-generation-webui)
会看到以下一大串的信息。如果您的设备还没下载对应的镜像文件,则会先行下载。
最后会停在下方画面:
这里看到出现“http://0.0.0.0:7860”就表示项目已经启动,我们可以在本地浏览器中输入“http://0.0.0.0:7860”,就能进入TGW的操作画面,如下图:
这样全部的操作时间就是镜像文件下载时间,非常单纯。
那现在已经可以开始让TGW变成智能助手了吗?还不行,因为我们尚未提供合适的大语言模型来预支匹配,这是下一步骤需要操作的部分。
现在我们再开启一个命令视窗,执行以下指令去下载一个小一点的模型:
$ cd <PATH>/jetson-containers
$ ./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) /bin/bash -c 'python3 download-model.py --output=/data/models/text-generation-webui TheBloke/Llama-2-7b-Chat-GPTQ'
这个指令会从https://huggingface.co里找到TheBloke/Llama-2-7b-Chat-GPTQ 模型,并且下载相关文件,如下图。
这些下载文件会存放在与容器/data相映射的jetson-containers/data/下面,请再深入到models/text-generation-webui/TheBloke_Llama-2-7b-Chat-GPTQ里面,然后与https://huggingface.co/TheBloke/Llama-2-7B-Chat-GPTQ/tree/main目录下的内容进行比对,基本上是全部的都下载了。
当模型下载完成之后,回到浏览器界面中,在”Model”标签里的左上角选项中,点击最左边“刷新”功能,点击下拉菜单中就会看到我们刚刚下载的模型,如下图所示。
选好模型之后,点击旁边的“Load”功能,中选择“llama.cpp”,这是目前性能比较好的载入器即可,然后回到前面的 Chat、Default、Notebook等功能框里,就能执行正常的TGW操作。
下面是我们用这个模型在“Chat”功能中,与 Llama-2-7b-Chat-GPTQ 模型对话的截屏,很明显它对中文的支持是不太够的。
剩下的部分,就请读者自行到HuggingFace上,筛选并下载合适的模型,然后根据设备的计算资源去调配相关参数,然后找出最合适使用的模型。
近期活动: