Text-Generation-WebUI|通用语言模型加载工具

oobabooga的text-generation-webui可以用来启动、加载、管理几乎所有主流的开源语言模型,并且提供WebUI界面,支持加载LLaMA2和其它羊驼类微调模型训练和LoRA的加载。

通用开源语言模型快速部署加载使用工具

之前为大家讲解了很多语言模型的安装部署教程,大部分语言模型官方开源库中都不提供WebUI界面,而是直接通过命令行去进行交互,使用繁琐且复杂,对于新手来说极不友好。

本次为大家介绍Github作者oobaboogatext-generation-webui项目,可以用来启动、加载、管理几乎所有主流的开源语言模型,并且可以通过WebUI轻松可视化管理各种复杂的自定义配置。

项目仓库

GitHub:oobabooga/text-generation-webui

项目特点

  • 3种接口模式:默认,笔记本,和聊天
  • 多种模型后端:tranformers,llama.cpp,AutoGPTQ,GPTQ-for-LLaMa,ExLlama,RWKV,FlexGen
  • 下拉菜单,用于快速切换不同的模型
  • LoRA:即时加载和卸载LoRAs,同时加载多个LoRAs,训练新的LoRA
  • 聊天模式下的精确指令模板,包括Alpaca,Vicuna,Open Assistant,Dolly,Koala,ChatGLM,MOSS,RWKV-Raven,Galactica,StableLM,WizardLM,Baize,Ziya,Chinese-Vicuna,MPT,INCITE,Wizard Mega,KoAlpaca,Vigogne,Bactrian,h2o,以及OpenBuddy
  • 多模态管道,包括LLaVA 和 MiniGPT-4
  • 通过bitsandbytes实现8位和4位推理
  • Transformes模型的CPU模式
  • DeepSpeed ZeRO-3 推理
  • 扩展
  • 自定义聊天角色
  • 非常高效的文本流
  • 支持 LaTeX 渲染的 Markdown 输出,例如用于 GALACTICA
  • 为 GPT-4chan 提供美观的 HTML 输出
  • API,包括用于 Websocket 流的端点

网络问题

在安装过程中,你可能即便开启了魔法上网也无法下载一些编程依赖库,关于魔法上网的相关配置问题不方便在站内讲解,请自行查看【魔法上网】的教程内容。

安装方式

官方提供了两种安装方式,推荐大家使用第一种自动安装。

如果无法自动安装或报错,又或者你的电脑基础比较好,那么推荐你使用第二种方式,手动安装。

别担心,同人种安装方式,站长都会讲。先讲最简单的自动安装,如果无法自动安装再使用第二种安装方式。

自动安装

自动安装脚本各系统的安装方便基本都是致的,本站以Windows为例。

自动安装脚本下载

注意:网盘下载仅保证当前版本可用,但未必为最新版本。如果你可以使用魔法网络,推荐点击官方下载按钮,这将会自动下载最新版本。

系统官方下载网盘下载
Windows点击下载点击下载
MacOS点击下载点击下载
Linux点击下载点击下载
WSL点击下载点击下载

选择适合自己的系统进行下载,下载完成后解压文件,解压之后你将会得到以下文件。

⚠️警告:文件的路径中不可以存在中文或特殊符号,否则可能大概率会出现报错。

.\oobabooga_windows
└─cmd_windows.bat
└─INSTRUCTIONS.TXT
└─start_windows.bat
└─update_windows.bat
└─webui.py

我们双击运行名为start_windows.bat的脚本文件,这将会自动安装相关依赖项目。

这个脚本主要用于在系统环境下自动配置和安装一些必要的软件和环境,主要流程如下:

  1. 设置脚本的工作目录为脚本文件所在目录,并添加系统路径。
  2. 检查安装路径中是否存在空格或特殊字符,如果存在则会发出警告,因为这可能会导致安装失败。
  3. 设置临时目录,以及一些其他配置,如安装目录、conda根目录、环境目录、Miniconda下载URL等。
  4. 检查是否需要安装 git 和 conda ,如果已经安装了就不需要再进行安装。
  5. 如果需要,脚本会下载并安装 Miniconda ,并设置其安装路径。
  6. 检查 Miniconda 是否成功安装,如果未找到则会给出错误提示。
  7. 创建一个新的conda环境,安装指定的Python版本。
  8. 检查conda环境是否成功创建,如果环境为空则会给出错误提示。
  9. 设置环境变量以隔离新创建的conda环境。
  10. 激活新创建的conda环境。
  11. 在新创建的conda环境中执行 webui.py 脚本。

此外,脚本中还包含一个函数 :PrintBigMessage ,用于打印大型消息,并在脚本最后一行调用 pause 命令,使命令行窗口在脚本执行完后不会立即关闭,让用户可以查看脚本的输出内容。


在你执行安装脚本过后,等待片刻,它将自动并设置环境,然后你将会看到如下内容:

What is your GPU

A) NVIDIA
B) AMD
C) Apple M Series
D) None (I want to run in CPU mode)

Input>

这是让你选择自己的GPU环境,如果你拥有英伟达显示则输入A;如果你是AMD显卡则输入B;如果你是苹果系统则输入C;如果你的GPU显卡性能不佳,可以输入D,这将会使用CPU来运行语言模型的推理。

一定要严格按照你自身的情况去选择,因为在你选择相应的系统环境之后,这个脚本将会自动下载与你系统硬件所匹配的模块依赖功能。

如果你在安装中遇到任何报错或长时间无响应等情况,可以尝试重新运行start_windows.bat脚本,如果重新运行该脚本并不能够解决问题,那么请尝试手动安装。

如果你在安装中看到如下提示,那么这代表你的安装部署没有出现任何问题。

Done!
请按任意键继续...

手动安装

在执行手动安装之前,我们还需要安装GitConda,如果您的电脑还未安装这两款软件,请先根据本站所给出的教程安装。

Git

Windows系统安装Git请参阅此文章:

Linux系统安装Git请参阅此文章:

Conda

Windows系统安装Conda请参阅此文章:

Linux系统安装Conda请参阅此文章:

项目安装

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车键,在CMD窗口中按顺序执行如下的每一条命令

首先我们需要确认一个工作目录,用来存放该项目的相关环境依赖文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki

在CMD中执行如下命令,这将会自动检测D盘是否在openai.wiki文件夹,没有则自动创建文件夹

if not exist D:\openai.wiki mkdir D:\openai.wiki

继续执行如下命令,在CMD中强制切换当前工作路径为D盘openai.wiki文件夹。

cd /d D:\openai.wiki

拉取该项目的Github仓库文件,将其下载至openai.wiki文件夹内。

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

如果您无法完成此步骤,执行后报错或者无法下载,可以下载该文件将其解压至D:\openai.wiki即可。

text-generation-webui-main

提取密码 文件说明 文件大小 476.51KB 文件格式 ZIP 资源价格 免费 下载次数 2

环境部署

在CMD中执行如下命令,强制切换至text-generation-webui的项目目录。

cd /d D:\openai.wiki\text-generation-webui

在CMD中执行下面的命令行,创建Conda虚拟环境

conda create -n textgen python=3.10.9

初始化Conda环境,防止后续操作可能存在报错等问题。

conda init cmd.exe

激活已创建的Conda环境,这样可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate textgen

关于Pytorch部分,请根据自身系统情况选择其一进行安装,不要每一个都安装!(如果你是Windows系统,直接复制第一行的命令行执行即可。)

系统GPU
显卡
命令行
WindowsNVIDIApip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
Linux/WSLNVIDIApip3 install torch torchvision torchaudio
LinuxAMDpip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
MacOS + MPS (untested)Anypip3 install torch torchvision torchaudio

执行如下命令,安装该项目的相关模块依赖库。

pip install -r requirements.txt

静静等待安装完成即可,如果出现错误那就重新执行最后这条命令,直到安装成功。

GPU加速【可选】

使用--n-gpu-layers参数启用

  • 如果你的显存足够,使用一个高数值如--n-gpu-layers 200000来将所有层卸载到 GPU。
  • 否则,从一个低数值如--n-gpu-layers 10开始,然后逐渐增加,直到内存耗尽。

要使用此功能,你需要手动编译并安装带有 GPU 支持的llama-cpp-python

Windows

在你激活textgen环境后,在命令行终端中逐行执行如下命令即可。

pip uninstall -y llama-cpp-python

set CMAKE_ARGS="-DLLAMA_CUBLAS=on"

set FORCE_CMAKE=1

pip install llama-cpp-python --no-cache-dir

Linux

在你激活textgen环境后,在命令行终端中逐行执行如下命令即可。

pip uninstall -y llama-cpp-python

CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python --no-cache-dir

macOS

在你激活textgen环境后,在命令行终端中逐行执行如下命令即可。

pip uninstall -y llama-cpp-python

CMAKE_ARGS="-DLLAMA_METAL=on" FORCE_CMAKE=1 pip install llama-cpp-python --no-cache-dir

你可以在这里找到 OpenBLAS / cuBLAS / CLBlast 的不同编译选项:https://pypi.org/project/llama-cpp-python/ ↗

性能

以下是我在 i5-12400F 上的 llama-7b int4 的性能(仅 CPU):

  • 在 33.07 秒内生成输出(6.05 个令牌/秒,200 个令牌,上下文 17)

你可以使用--threads N改变线程数。

其它问题【可选】

bitsandbytes

如果你遇到了关于bitsandbytes的报错,请参阅该部分内容,否则可跳过。

bitsandbytes >= 0.39 可能无法在较旧的NVIDIA GPU上工作。在这种情况下,您可能需要像这样降级:–load-in-8bit

Linux: pip install bitsandbytes==0.38.1

Windows: pip install https://github.com/jllllll/bitsandbytes-windows-webui/raw/main/bitsandbytes-0.38.1-py3-none-any.whl

替代方案:Docker

ln -s docker/{Dockerfile,docker-compose.yml,.dockerignore} .

cp docker/.env.example .env

#编辑 .env 并根据您的GPU型号设置 TORCH_CUDA_ARCH_LIST

docker compose up --build
  • 您需要安装 docker compose v2.17 或更高版本。请参阅此指南以获取说明。
  • 要获取其他的 docker 文件,请查看该存储库

项目更新

该项目不时会有更改,要进行更新,请使用以下命令:requirements.txt

# 激活你的Conda环境
conda activate textgen
# 切换至你的项目目录
cd text-generation-webui
# 按配置文件更新版本
pip install -r requirements.txt --upgrade

运行方式

在以后每次运行该项目时,只需要先激活我们刚刚所创建的Conda虚拟Python环境,然后运行启动文件即可。

在CMD中执行如下命令,强制切换至项目目录文件夹。

cd /d D:\openai.wiki\text-generation-webui

激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。

conda activate textgen

执行如下代码,运行程序的WebUI界面。

python server.py

执行此命令行之后,稍等片刻,将会看到命令行中输出如下内容:

(textgen) D:\openai.wiki\text-generation-webui>python server.py
bin C:\Users\openA\miniconda3\envs\textgen\lib\site-packages\bitsandbytes\libbitsandbytes_cuda117.dll
Running on local URL:  http://127.0.0.1:7860

当你看到出现一个网址,那就代表已经可以在浏览器内打开http://127.0.0.1:7860该网址,进入WebUI界面啦。

Text-Generation-WebUI|通用语言模型加载工具

网络共享

大部分人都只是正常启动该项目去使用,但该项目其实是可以脱离本机远程使用的。

假如你在台式电脑运行了该项目,但是可以躺在床上用手机去进行语言模型交互,是不是会感觉更舒服一些?

也可以分享给你的好友,让他们一起使用你部署好的语言模型进行交互。

方式命令
本地模式python server.py
局域网模式python server.py --listen
公网模式python server.py --share

本地模式

本地模型也就是你不更改任何设置,直接默认执行python server.py即可。该方式可以通过该电脑的本地localhostIP地址进行访问。

localhost就是本地的主机地址,每一台Windows电脑都会有localhost,它的默认IP地址为127.0.0.1,也可以理解为localhost=127.0.0.1,没有任何区别。

端口号

我们已经有IP地址可以访问了,那么http://127.0.0.1:7860后面的7860的作用是什么?

这个7860我们俗称为端口号,我们可以理解为一个衣柜有很多个抽屉,每个抽屉都用来存放不同的用品,7860就是电脑系统中的一个抽屉,只有指定了抽屉的号码,才可以让系统更明确你所想使用的目的。比如我们可以为再安装一个开源项目,端口号为7870,那么当我们访问http://127.0.0.1:7870时,就可以打开该开源项目的操作界面啦。

这样做的最大好处就是一个IP地址,可以同时挂起很多个项目,互不干涉。

局域网

如果你希望在当前电脑内运行该项目,然后通过其它电脑访问该项目进行运程使用该网页,可以使用以下方式进行。

正常的启动命令应该为python server.py,这次我们添加一个参数,更改为python server.py --listen

(textgen) D:\openai.wiki\text-generation-webui>python server.py --listen
bin C:\Users\openA\miniconda3\envs\textgen\lib\site-packages\bitsandbytes\libbitsandbytes_cuda117.dll
Running on local URL:  http://0.0.0.0:7860

这是我们在CMD中执行python server.py --listen后的回显,这里的IP地址由http://127.0.0.1:7870变为http://0.0.0.0:7860,这代表我们已经可以通过本机IP在局域网内使用了。

那么我们在其它电脑应该如何正常浏览和使用该项目的WebUI界面呢?首先我们需要获取已经运行该项目的电脑IP地址,可以通过CMD命令行来快速获取。

ipconfig

我们将会得到如下信息:

C:\\Users\\openA>ipconfig

Windows IP 配置

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 251e:30e:4235:7c40:c2a3:104:1338:c224
   临时 IPv6 地址. . . . . . . . . . : 251e:30e:4235:7c40:6d06:af10:74a5:5ac2
   本地链接 IPv6 地址. . . . . . . . : fe80::d324:2e9e:bf39:7b2e%19
   IPv4 地址 . . . . . . . . . . . . : 192.168.0.106
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : fe80::a236:beff:fea0:7eb8%19
                                       192.168.0.1

无线局域网适配器 WLAN:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 1:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 2:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 蓝牙网络连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

我在这段回显当中,只需要记住IPv4地址即可,也就是192.168.0.106,每台电脑所获取到的局域网地址都是不同的,因为这会通过路由器或交换机的DDNS进行自动分配,将一个IP地址分配给你的电脑进行使用,所以一定要自行获取。

现在我们已经得到了IP地址,那么我们在局域网内的其它电脑,通过访问http://192.168.0.106:7860来启动。这样做的优点就是可以用低配置电脑或手机远程操作该项目,省去多人共用一台电脑的排队困扰。

❗ 注意:局域网状态下无法安装、更新、卸载任何插件,因为每个人的需求不同,如果局域网内的用户A删除了一个局域网B用户需要使用的插件,这会导致其它用户无法运行,所以局域网状态下的任何终端用户都无法对插件拓展项进行设置。

公网模式

什么是公网?公网是公共网络的简称,我们可以通过以下表格来对比一下各种模式之间的区别。

类型描述
本地模式仅本地运行该项目的电脑可以使用语言模型交互
局域网模式在与该电脑使用同一路由器或交换机的其它终端设备上,也可以远程操作语言模型进行交互。
公网模式任何可以访问互联网的电脑或其它终端设备,都可以远程访问该项目。

在了解了公网模式的作用之后,我们对同样为启动命令添加参数。

默认启动方式为python server.py,现在我们执行python server.py --share来启动。

执行完上述命令后,稍等片刻,你将会在CMD窗口中看到如下内容:

(textgen) D:\openai.wiki\text-generation-webui>python server.py --share
2023-07-20 22:27:23 WARNING:The gradio "share link" feature uses a proprietary executable to create a reverse tunnel. Use it with care.
bin C:\Users\openA\miniconda3\envs\textgen\lib\site-packages\bitsandbytes\libbitsandbytes_cuda117.dll
Running on local URL:  http://127.0.0.1:7860
Running on public URL: <https://fbf87879-b701-31d8.gradio.live>

This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)

此时启动该项目之后,会生成一个可以直接公网访问的链接https://fbf87879-b701-31d8.gradio.live,该链接为临时链接


公网模式下的链接有效期为72小时,也就是三天的时间。

为什么有效期为72小时?因为这个操作界面的功能由Gradio提供,如果你需要无限时长的访问,则需要购买其服务。不过这一般是没有必要的,我们只需要在72小时到期之前后之后重启电脑即可刷新访问时长的限制。

❗ 注意:公网状态下无法安装、更新、卸载任何插件,因为每个人的需求不同,如果局域网内的用户A删除了一个局域网B用户需要使用的插件,这会导致其它用户无法运行,所以局域网状态下的任何终端用户都无法对插件拓展项进行设置。

下载模型

官方提供了一些主流模型的下载脚本download-model.py,但是使用起来可能对于初学者来说并不是很友好,所以站长这里跳过了,只讲一下主流的安装方法吧。

手动下载

无论你在什么地方下载的模型,也无论是什么类别的模型,放置方式都是通用的,都应该将放在.\text-generation-webui\models文件夹内。

  • 比如你在本站下载了一个名为llama-2模型,这是meta最近发布的开源语言模型,但是这个模型分为多个版本,分别为llama-2-7b-chat-hfllama-2-13b-chat-hfllama-2-70b-chat-hf。我们下载好其中一个或多个模型后,直接将这个名称为llama-2-7b-chat-hf的文件夹移动至.\text-generation-webui\models文件夹内即可。
  • 再比如,你又下载了ChatGLM26B版本模型,那么请将名为chatglm-6b的模型文件夹直接移动至.\text-generation-webui\models文件夹内即可,其它模型也是同理。

⚠️提示:总而言之,如果使用本站所提供的国内网盘模型,一定要下载所有内容,包括文件夹及名称,然后将该文件夹移动至.\text-generation-webui\models文件夹内即可。

⚠️警告:不要试图随意更改模型文件夹名称、模型名称、目录结构、缺失部分文件,这将会导致模型无法加载,或在使用过程中出现报错。

自动下载

Hugging Face 是下载模型的主要站点,本站以ChatGML为例,为大家讲解如何通过该项目自动安装语言模型。

首先,我们要访问你想下载的模型主页,比如ChatGML-6BHugging Face的地址为:https://huggingface.co/THUDM/chatglm-6b

那么我们打开这个网页,点击项目名称后面的复制按钮,这将会自动复制该项目的完整名称,比如本次复制后的内容为THUDM/chatglm-6b

Text-Generation-WebUI|通用语言模型加载工具

复制完成后,回到该项目的Model选项卡,在右侧的Download custom model or LoRA区域,粘贴我们刚刚复制的内容至此,然后点击Download按钮即可自动下载

Text-Generation-WebUI|通用语言模型加载工具

等待下载完成之后,在项目目录的.\text-generation-webui\models文件夹下,你将会看到一个名为THUDM_chatglm-6b的文件夹,这代表我们已经下载成功啦。

基础使用教程

我们目前已经安装部署完成该项目,正常启动该项目,打开WebUI界面。

python server.py

主界面打开之后,在Model选项卡中的Model选择框内,选择你需要加载的模型(站长之前把ChatGLM的模型删除了,只保存了ChatGLM2,所以就用这个给大家演示吧,操作过程都是一样的。),然后点击Load按钮。

Text-Generation-WebUI|通用语言模型加载工具

诶?报错了?不用担心,这段容易的意思为要求您在本地计算机上执行该存储库中的配置文件,确保您已阅读代码以避免恶意使用,然后设置选项 trust_remote_code=True 以消除此错误。我们不必理会,勾选该界面中的☑️trust-remote-code选项,然后重新点击Load按钮即可信息该模型存储库。

随后我们将在界面的右侧可以看到Loading chatglm2-6b提示,这代表已经开始加载了,加载速度取决于你的模型大小硬盘是否为SSD,以及GPU硬件是否够好。

Text-Generation-WebUI|通用语言模型加载工具

稍等片刻,当界面右侧的Loading chatglm2-6b提示变为Successfully loaded chatglm2-6b,这代表我们已经加载成功啦。

Text-Generation-WebUI|通用语言模型加载工具

接下来,直接输入文字内容,就可以获得正常的交互输出了。

Text-Generation-WebUI|通用语言模型加载工具

这就是最基本的使用方式了,在所有参数都几乎在默认的情况下。

高级使用教程

此项目存在多种模式切换,每个模式的选项卡也存在部分区域,默认情况下的选项卡分别为模型对话模型参数模型设定模型训练界面设置,其它模式大同小异。

Model|模型设定

我们按照使用顺序来讲解使用教程,用到哪里说哪里。

Text-Generation-WebUI|通用语言模型加载工具

无论你怎么使用,都是应该先加载模型的,本次讲解所使用的模型以llama-2-7b-chat-hf为例,只要模型文件放置正确,那么你肯定可以在Model选项框中找到相应的模型名称,选择正常的就好。

此时不要着急点击Load按钮加载模型,我们先看一下其它设置。

  • Model loader
    • 手动选择模型加载器,如果的模型不在列表当中,那么你可以不更改,默认使用Transformers可以运行大部分模型。
  • gpu-memory in MiB for device
    • 每个 GPU 分配的最大 GPU 内存(以 GiB 为单位)
  • cpu-memory in MiB
    • 为离线权重分配的最大 CPU 内存(以 GiB 为单位)
  • compute_dtype
    • 4 位的计算数据类型。有效选项:bfloat16、float16、float32。
  • quant_type
    • 4 位的量化类型。有效选项:nf4、fp4。
  • 加载选项
    • cpu
      • 使用 CPU 生成文本。警告:在 CPU 上进行训练速度极慢。
    • load-in-8bit
      • 以 8 位精度加载模型(使用 bitsandbytes)。
    • bf16
      • 以 bfloat16 精度加载模型。需要 NVIDIA Ampere GPU。
    • auto-devices
      • 自动将模型分割到可用的 GPU 和 CPU 上。
    • disk
      • 如果模型对您的 GPU 和 CPU 组合而言太大,将剩余层发送到磁盘上。
    • load-in-4bit
      • 以 4 位精度加载模型(使用 bitsandbytes)。
    • use_double_quant
      • 使用双重量化。
  • trust-remote-code
    • 信任远程代码,一般情况下ChatGLMFalcon需要勾选此项。
  • Autoload the model
    • 在模型列表下拉框选择模型后,是否立即加载?
    • 如果勾选此项,选项模型后不用点击Load按钮。

关于Download custom model or LoRA选项,就是自动下载模型啦,之前有讲过,这里略过。

说了这么多,其实只要你的电脑硬件不是太差,直接选择模型,然后点击Load按钮加载即可,其它都保持默认。

如果你希望更改部分内容,上面站长已经写的很清楚了,自己改一改就好了。

Chat settings|聊天设置

当你的UI设置为聊天模式时,可以看到如下聊天模板,站长汉化了一下界面,方便大家进行理解,自己使用的时候肯定是英文版的,但不重要,因为位置几乎是一致的。

Text-Generation-WebUI|通用语言模型加载工具

你可以理解为这是SD绘画的Prompt预设功能,直接设置一个角色,比如调教一个猫娘,以后和你对话的AI机器人将会被猫娘所代替。

站长对猫娘和角色不是很感兴趣,大家自己研究吧,因为这部分也没有什么难度。

Parameters|模型参数

Text-Generation-WebUI|通用语言模型加载工具

我们可以在Generation parameters preset选项中看到一个下拉菜单,默认值为simpe-1,通过这个选项我们可以快速加载一些预设,以下是一些预设的推荐。

根据Preset Arena实验的结果,以下是最佳预设值:

  • 指令操作|Instruction following:
    1. Divine Intellect
    2. Big O
    3. simple-1
    4. Space Alien
    5. StarChat
    6. Titanic
    7. tfs-with-top-a
    8. Asterism
    9. Contrastive Search
  • 聊天|Chat:
    1. Midnight Enigma
    2. Yara
    3. Shortwave
    4. Kobold-Godlike

常用参数

这部分内容太过于复杂,参数实在太多,以下仅讲解部分内容。所以关于本页参数中未讲到的部分,可以【点击此处】查阅中文解释,且更专业。

Temperature:用于控制输出随机性的主要因素。0表示确定性(只使用最可能的token)。较高的值表示更多的随机性。

top_p:如果不设置为1,则选择概率总和小于此数字的token。较高的值表示更大的可能随机结果的范围。

top_k:类似于top_p,但是只选择最有可能的top_k个token。较高的值表示更大的可能随机结果的范围。

typical_p:如果不设置为1,则仅选择相对于随机token出现概率至少大于该值的token,给定先前文本。

epsilon_cutoff:以1e-4为单位;合理的值为3。将概率低于此阈值的token排除在采样之外。应与top_p、top_k和eta_cutoff同时设置为0。

eta_cutoff:以1e-4为单位;合理的值为3。应与top_p、top_k和epsilon_cutoff同时设置为0。

repetition_penalty:用于惩罚重复先前token的指数惩罚因子。1表示无惩罚,较高的值表示较少的重复,较低的值表示较多的重复。

repetition_penalty_range:考虑用于重复惩罚的最近的token的数量。0表示使用所有token。

encoder_repetition_penalty:也称为“幻觉过滤器”。用于惩罚不在先前文本中的token。较高的值表示更有可能保持在上下文中,较低的值表示更有可能发散。

no_repeat_ngram_size:如果不设置为0,则指定完全禁止重复的token集的长度。较高的值表示阻止较长的短语重复,较低的值表示阻止单词或字母的重复。在大多数情况下,只使用0或较高的值是一个好主意。

min_length:生成的最小长度(以token为单位)。

penalty_alpha:通过将其设置为大于零并取消“do_sample”选项来启用对比搜索。它应与较低的top_k值一起使用,例如,top_k = 4。


针对不同模型,仅部分参数可用,以下是各模型可用参数的示例

llama.cpp

llama.cpp仅可使用以下参数:

  • temperature
  • top_p
  • top_k
  • repetition_penalty
  • tfs
  • mirostat_mode
  • mirostat_tau
  • mirostat_eta

ExLlama

ExLlama仅可使用以下参数:

  • temperature
  • top_p
  • top_k
  • repetition_penalty
  • repetition_penalty_range
  • typical_p

RWKV

RWKV仅在通过旧的.pth权重加载时使用以下参数:

  • temperature
  • top_p
  • top_k

Training|模型训练

站长这电脑2080TI的显卡,能让最低配的语言模型跑起来都不错了,训练这一块有心无力,所以不讲,跳过。

Text-Generation-WebUI|通用语言模型加载工具

Session|会话设置

此部分是用来进行高级配置的,最常用的就是可以在Mode选项框切换模式,如果你加载的是对话模型,推荐切换为Chat模式,然后点击Apply and restart即可生效。

至于其它功能,都是和API相关的了,对于会用API的人来说,下面的内容解释起来也没有意义,因为他们都会;对于不会API的人,讲了也没用,哈哈,所以跳过了。

Text-Generation-WebUI|通用语言模型加载工具

模型对话

说了这么多,也该说一说对话方面的操作了,以下分别是默认模式笔记模式聊天模式的各模型对话界面,UI大同小异,功能不尽相同。

Text-Generation-WebUI|通用语言模型加载工具
默认模式
Text-Generation-WebUI|通用语言模型加载工具
笔记模式
Text-Generation-WebUI|通用语言模型加载工具
聊天模式

无论哪一种模式,都是发送内容返回内容,没有太大的区别,翻译后的界面如下。

Text-Generation-WebUI|通用语言模型加载工具

低配加载|CUDA&GPU内存不足

如果您的GPU无法容纳16位模型,请按以下顺序尝试以下方法:

以8位模式加载模型

python server.py --load-in-8bit

以4位模式加载模型

python server.py --load-in-4bit

将模型分配到GPU和CPU上

python server.py --auto-devices

如果您可以使用此命令加载模型,但在尝试生成文本时出现内存不足的错误,请逐渐限制分配给GPU的内存量,直到错误停止发生:

python server.py --auto-devices --gpu-memory 10
python server.py --auto-devices --gpu-memory 9
python server.py --auto-devices --gpu-memory 8

其中的数字以GiB为单位。

为了更精细的控制,您还可以明确指定单位为MiB:

python server.py --auto-devices --gpu-memory 8722MiB
python server.py --auto-devices --gpu-memory 4725MiB
python server.py --auto-devices --gpu-memory 3500MiB

将层发送到磁盘缓存

作为最后的尝试,您可以将模型分配到GPU、CPU和磁盘上:

python server.py --auto-devices --disk

使用此方法,能够将一个30b模型加载到RTX 3090中,但生成1个单词需要10秒。

DeepSpeed(实验性)

除了上述方法外,减少模型的GPU内存使用的另一种替代方法是使用DeepSpeed ZeRO-3优化。

使用这种方法,已经能够在不到6GB VRAM的情况下加载一个6b模型(GPT-J 6B)。文本生成的速度非常不错,远远优于使用--auto-devices --gpu-memory 6的效果。

据我所知,目前DeepSpeed仅适用于Linux。如果你是Windows系统,那么可跳过此部分的内容了。


安装DeepSpeed:

conda install -c conda-forge mpi4py mpich

pip install -U deepspeed

启动Web UI时,将python替换为deepspeed --num_gpus=1,并添加--deepspeed标志。示例:

deepspeed --num_gpus=1 server.py --deepspeed --chat --model gpt-j-6B

命令行参数

以下是一些能用命令行参数,以及针对个别模型的特殊参数,可以在你启动时就通过添加指定参数而修改默认设置。

比如我们在加载模型时可能需要勾选trust_remote_code=True选项,但是如果我们在启动时使用python server.py --trust-remote-code,那就代表启动后界面中的☑️trust-remote-code选项是被默认开启的,不用再手动设置,其实标志的使用方式几乎与此相同。

基本设置

标志描述
-h--help显示此帮助消息并退出。
--notebook以笔记本模式启动 Web UI,输出将写入与输入相同的文本框中。
--chat以聊天模式启动 Web UI。
--multi-user多用户模式。聊天历史记录不会保存或自动加载。警告:此功能仍处于高度实验阶段。
--character CHARACTER在聊天模式下默认加载的角色名称。
--model MODEL默认加载的模型名称。
--lora LORA [LORA ...]要加载的 LoRA 列表。如果要加载多个 LoRA,请使用空格分隔名称。
--model-dir MODEL_DIR包含所有模型的目录路径。
--lora-dir LORA_DIR包含所有 LoRA 的目录路径。
--model-menu在终端中显示模型菜单,当首次启动 Web UI 时。
--no-stream不实时流式传输文本输出。
--settings SETTINGS_FILE从此 yaml 文件加载默认界面设置。有关示例,请参阅settings-template.yaml。如果创建名为settings.yaml的文件,则默认加载该文件,无需使用--settings标志。
--extensions EXTENSIONS [EXTENSIONS ...]要加载的扩展列表。如果要加载多个扩展,请使用空格分隔名称。
--verbose将提示打印到终端。

模型加载器

标志描述
--loader LOADER手动选择模型加载器,否则将自动检测。有效选项:transformers、autogptq、gptq-for-llama、exllama、exllama_hf、llamacpp、rwkv、flexgen

加速|transformers

标志描述
--cpu使用 CPU 生成文本。警告:在 CPU 上进行训练速度极慢。
--auto-devices自动将模型分割到可用的 GPU 和 CPU 上。
--gpu-memory GPU_MEMORY [GPU_MEMORY ...]每个 GPU 分配的最大 GPU 内存(以 GiB 为单位)。示例:--gpu-memory 10为单个 GPU,--gpu-memory 10 5为两个 GPU。您还可以设置以 MiB 为单位的值,例如--gpu-memory 3500MiB
--cpu-memory CPU_MEMORY为离线权重分配的最大 CPU 内存(以 GiB 为单位),与上述相同。
--disk如果模型对您的 GPU 和 CPU 组合而言太大,将剩余层发送到磁盘上。
--disk-cache-dir DISK_CACHE_DIR用于保存磁盘缓存的目录。默认为cache/
--load-in-8bit以 8 位精度加载模型(使用 bitsandbytes)。
--bf16以 bfloat16 精度加载模型。需要 NVIDIA Ampere GPU。
--no-cache在生成文本时将use_cache设置为False。这会略微减少 VRAM 的使用,但性能会有所下降。
--xformers使用 xformer 的内存高效 attention。这应该增加您的 tokens/s。
--sdp-attention使用 torch 2.0 的 sdp attention。
--trust-remote-code在加载模型时将 trust_remote_code 设置为 True。ChatGLM 和 Falcon 需要此选项。

加速 4 位

⚠️ 目前在 Windows 上需要最低计算能力为 7.0。

标志描述
--load-in-4bit以 4 位精度加载模型(使用 bitsandbytes)。
--compute_dtype COMPUTE_DTYPE4 位的计算数据类型。有效选项:bfloat16、float16、float32。
--quant_type QUANT_TYPE4 位的量化类型。有效选项:nf4、fp4。
--use_double_quant使用双重量化。

llama.cpp

标志描述
--threads要使用的线程数。
--n_batch在调用 llama_eval 时,批处理的最大提示令牌数。
--no-mmap禁止使用 mmap。
--mlock强制系统将模型保留在内存中。
--cache-capacity CACHE_CAPACITY最大缓存容量。示例:2000MiB、2GiB。如果没有单位提供,将假定为字节。
--n-gpu-layers N_GPU_LAYERS要转移到 GPU 的层数。仅当 llama-cpp-python 使用 BLAS 编译时才有效。将其设置为 1000000000 可以将所有层都转移到 GPU 上。
--n_ctx N_CTX提示上下文的大小。
--llama_cpp_seed SEEDllama-cpp 模型的种子。默认为 0(随机)。

AutoGPTQ

标志描述
--triton使用 Triton。
--no_inject_fused_attention禁用融合注意力,这将减少 VRAM 的使用,但推理速度较慢。
--no_inject_fused_mlpTriton 模式下:禁用融合 MLP,这将减少 VRAM 的使用,但推理速度较慢。
--no_use_cuda_fp16这可以在某些系统上提高模型速度。
--desc_act对于没有 quantize_config.json 的模型,此参数用于定义是否在 BaseQuantizeConfig 中设置 desc_act。

ExLlama

标志描述
--gpu-split用于模型层的每个 GPU 设备要使用的 VRAM(以 GB 为单位)的逗号分隔列表,例如20,7,7
--max_seq_len MAX_SEQ_LEN最大序列长度。
--compress_pos_emb COMPRESS_POS_EMB位置嵌入压缩因子。通常应设置为 max_seq_len / 2048。
--alpha_value ALPHA_VALUENTK RoPE 缩放的位置嵌入 alpha 因子。与上述相同。使用此参数或 compress_pos_emb,不要同时使用两者。

GPTQ-for-LLaMa

标志描述
--wbits WBITS使用指定精度(以位为单位)加载预量化模型。支持 2、3、4 和 8。
--model_type MODEL_TYPE预量化模型的模型类型。当前支持 LLaMA、OPT 和 GPT-J。
--groupsize GROUPSIZE组大小。
--pre_layer PRE_LAYER [PRE_LAYER ...]要分配给 GPU 的层数。设置此参数可启用 4 位模型的 CPU 离线。对于多 GPU,请使用空格分隔的数字,例如--pre_layer 30 60
--checkpoint CHECKPOINT量化检查点文件的路径。如果未指定,将自动检测。
--monkey-patch应用用于使用 LoRA 的量化模型的 monkey patch。
--quant_attn(triton)启用量化 attention。
--warmup_autotune(triton)启用热身自动调整。
--fused_mlp(triton)启用融合 MLP。

FlexGen

标志描述
--percent PERCENT [PERCENT ...]FlexGen:分配百分比。必须是由空格分隔的 6 个数字(默认值:0、100、100、0、100、0)。
--compress-weightFlexGen:是否压缩权重(默认值:False)。
--pin-weight [PIN_WEIGHT]FlexGen:是否固定权重(将其设置为 False 可以减少 20% 的 CPU 内存)。

DeepSpeed

标志描述
--deepspeed通过 Transformers 集成启用使用 DeepSpeed ZeRO-3 进行推理。
--nvme-offload-dir NVME_OFFLOAD_DIRDeepSpeed:用于 ZeRO-3 NVME offloading 的目录。
--local_rank LOCAL_RANKDeepSpeed:分布式设置的可选参数。

RWKV

标志描述
--rwkv-strategy RWKV_STRATEGYRWKV:加载模型时要使用的策略。示例:“cpu fp32”、“cuda fp16”、“cuda fp16i8”。
--rwkv-cuda-onRWKV:编译 CUDA 内核以提高性能。

Gradio

标志描述
--listen使 Web UI 可从本地网络访问。
--listen-host LISTEN_HOST服务器将使用的主机名。
--listen-port LISTEN_PORT服务器将使用的监听端口。
--share创建公共 URL。这对于在 Google Colab 或类似环境中运行 Web UI 很有用。
--auto-launch启动时在默认浏览器中打开 Web UI。
--gradio-auth USER:PWD设置 gradio 的身份验证,如 “username:password”;或以逗号分隔多个,如 “u1:p1,u2:p2,u3:p3”
--gradio-auth-path GRADIO_AUTH_PATH设置 gradio 身份验证文件路径。该文件应以以下格式包含一个或多个用户:密码对:”u1:p1,u2:p2,u3:p3″

API

标志描述
--api启用 API 扩展。
--public-api使用 Cloudfare 为 API 创建公共 URL。
--api-blocking-port BLOCKING_PORT阻塞式 API 的监听端口。
--api-streaming-port STREAMING_PORT流式 API 的监听端口。

多模态

标志描述
--multimodal-pipeline PIPELINE要使用的多模态管道。示例:llava-7b、llava-13b。

总结

写这一篇教程是真的要命,实在太长了。后续该项目如果有其它功能性的更新,站长也会在这里重写,这篇文章写了两天,下课!

此文章由OpenAI开源维基百科原创发布,如若转载请注明出处:https://openai.wiki/text-generation-webui.html

(0)
上一篇 2023-07-21 12:17
下一篇 2023-07-21 15:28

相关推荐

  • SkyChat

    SkyChat是由昆仑万维所公开的开源AIGC全系列算法与模型,“昆仑天工”旗下模型包括天工巧汇、天工乐府SkyMusic、天工妙笔、天工智码SkyCode,涵盖图像、音乐、文本、编程等多模态内容。

    其它模型 2022-12-20
    022.0K
  • Baichuan2|开源语言模型百川2代

    Baichuan2是百川智能推出的新一代开源大语言模型,采用2.6万亿Tokens的高质量语料训练。在多个权威的中文、英文和通用、领域效果较佳。包含7B、13B的Base和Chat版本,可免费商用。

    2023-09-13
    002.5K
  • MLC LLM|多平台开源语言模型

    MLC LLM是一个通用的解决方案,可以在各种硬件后端和本地应用程序上原生部署任何语言模型,目前该模型支持IOS苹果、安卓、Windows、Linux和浏览器等全平台设备部署安装运行,非常方便。

    2023-06-11
    002.3K
  • MiniGPT-4|图像对话模型

    MiniGPT-4使用一个投影层将冻结视觉编码器与冻结的LLM对齐,通过传统预训练和自我生成方式构建高质量图像文本对,再在小型数据集上进行微调训练,该模型在视觉语言任务中表现出了很好的效果。

    2023-04-20
    0154.3K
  • GPT4All-UI|对话机器人

    基于Flask Web应用程序的聊天界面,可与基于llamacpp的聊天机器人(如GPT4all、vicuna等)进行交互。使用Nomic-AI高级库与GPT4all模型进行通信,确保无缝高效的通信。

    2023-04-16
    032.8K

回复 Tthasvl

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(10条)

  • 谢谢站长
    谢谢站长 2023-07-22 17:17

    模型训练虽然2080ti带不起来,但能不能请站长也讲讲,大体流程是怎么样的呢?哪怕是一个simple demo case都可以,主要就是涉及到怎么给GPT喂知识,并保存下来

    • PhiltreX
      PhiltreX 2023-07-23 15:15

      @谢谢站长其实最主要的问题是,我这里也没有推理过,我连最小的LLaMA-7B都无法加载,所以无法知道自己的方式是否正确,能否成为教程的一部分。

  • NSG
    NSG 2023-07-24 10:31

    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 53.8M 100 53.8M 0 0 4244k 0 0:00:13 0:00:13 –:–:– 4964k
    Installing Miniconda to D:\迅雷下载\oobabooga_windows\installer_files\conda
    Miniconda version:
    ‘”D:\迅雷下载\oobabooga_windows\installer_files\conda\_conda.exe”‘ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。

    Miniconda not found.

  • Tthasvl
    Tthasvl 2023-07-28 17:29

    在我使用这个工具,加载模型,点击Load之后出现了如下所示报错。请问该怎么解决?

    CUDA out of memory. Tried to allocate 32.00 MiB (GPU 0; 8.00 GiB total capacity; 5.57 GiB already allocated; 1.38 GiB free; 5.57 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

  • 一只飞向巴黎的猪i
    一只飞向巴黎的猪i 2023-10-25 16:52

    为什么我的 trust-remote-code 不能勾选

  • 一只飞向巴黎的猪i
    一只飞向巴黎的猪i 2023-10-25 18:07

    我重新下载模型的时候出现Invalid model name format 是什么原因啊

  • 一只飞向巴黎的猪i
    一只飞向巴黎的猪i 2023-10-26 09:46

    站长我尝试使用你给的方法量化模型,但永远提示我Traceback (most recent call last): File “D:\openai.wiki\text-generation-webui\server.py”, line 68, in load_model_wrapper shared.model, shared.tokenizer = load_model(shared.model_name, loader) File “D:\openai.wiki\text-generation-webui\modules\models.py”, line 79, in load_model output = load_func_maploader File “D:\openai.wiki\text-generation-webui\modules\models.py”, line 219, in huggingface_loader model = LoaderClass.from_pretrained(checkpoint, **params) File “D:\Anaconda3\envs\textgen\lib\site-packages\transformers\models\auto\auto_factory.py”, line 488, in from_pretrained return model_class.from_pretrained( File “D:\Anaconda3\envs\textgen\lib\site-packages\transformers\modeling_utils.py”, line 2842, in from_pretrained raise ValueError( ValueError: Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to fit the quantized model. If you want to dispatch the model on the CPU or the disk while keeping these modules in 32-bit, you need to set load_in_8bit_fp32_cpu_offload=True and pass a custom device_map to from_pretrained. Check https://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-cpu-and-gpu for more details.,我看了这个文档但还是不知道去哪设置

  • dffff001
    dffff001 2023-12-28 16:40

    请问能否出一个界面汉化的教程?谢谢!

  • Ethereal
    Ethereal 2024-01-21 17:50

    请问公网访问可以自定义ip来进行访问吗?应该如何设置

微信