通用开源语言模型快速部署加载使用工具
之前为大家讲解了很多语言模型的安装部署教程,大部分语言模型官方开源库中都不提供WebUI界面,而是直接通过命令行去进行交互,使用繁琐且复杂,对于新手来说极不友好。
本次为大家介绍Github作者oobabooga
的text-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为例。
自动安装脚本下载
注意:网盘下载仅保证当前版本可用,但未必为最新版本。如果你可以使用魔法网络,推荐点击官方下载按钮,这将会自动下载最新版本。
选择适合自己的系统进行下载,下载完成后解压文件,解压之后你将会得到以下文件。
⚠️警告:文件的路径中不可以存在中文或特殊符号,否则可能大概率会出现报错。
.\oobabooga_windows └─cmd_windows.bat └─INSTRUCTIONS.TXT └─start_windows.bat └─update_windows.bat └─webui.py
我们双击运行名为start_windows.bat
的脚本文件,这将会自动安装相关依赖项目。
这个脚本主要用于在系统环境下自动配置和安装一些必要的软件和环境,主要流程如下:
- 设置脚本的工作目录为脚本文件所在目录,并添加系统路径。
- 检查安装路径中是否存在空格或特殊字符,如果存在则会发出警告,因为这可能会导致安装失败。
- 设置临时目录,以及一些其他配置,如安装目录、conda根目录、环境目录、Miniconda下载URL等。
- 检查是否需要安装 git 和 conda ,如果已经安装了就不需要再进行安装。
- 如果需要,脚本会下载并安装 Miniconda ,并设置其安装路径。
- 检查 Miniconda 是否成功安装,如果未找到则会给出错误提示。
- 创建一个新的conda环境,安装指定的Python版本。
- 检查conda环境是否成功创建,如果环境为空则会给出错误提示。
- 设置环境变量以隔离新创建的conda环境。
- 激活新创建的conda环境。
- 在新创建的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! 请按任意键继续...
手动安装
在执行手动安装之前,我们还需要安装Git
和Conda
,如果您的电脑还未安装这两款软件,请先根据本站所给出的教程安装。
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
环境部署
在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 显卡 | 命令行 |
---|---|---|
Windows | NVIDIA | pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 |
Linux/WSL | NVIDIA | pip3 install torch torchvision torchaudio |
Linux | AMD | pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2 |
MacOS + MPS (untested) | Any | pip3 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
项目更新
该项目不时会有更改,要进行更新,请使用以下命令: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界面啦。
网络共享
大部分人都只是正常启动该项目去使用,但该项目其实是可以脱离本机远程使用的。
假如你在台式电脑运行了该项目,但是可以躺在床上用手机去进行语言模型交互,是不是会感觉更舒服一些?
也可以分享给你的好友,让他们一起使用你部署好的语言模型进行交互。
方式 | 命令 |
---|---|
本地模式 | python server.py |
局域网模式 | python server.py --listen |
公网模式 | python server.py --share |
本地模式
本地模型也就是你不更改任何设置,直接默认执行python server.py
即可。该方式可以通过该电脑的本地localhost
或IP地址
进行访问。
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-hf
|llama-2-13b-chat-hf
|llama-2-70b-chat-hf
。我们下载好其中一个或多个模型后,直接将这个名称为llama-2-7b-chat-hf
的文件夹移动至.\text-generation-webui\models
文件夹内即可。 - 再比如,你又下载了
ChatGLM2
的6B
版本模型
,那么请将名为chatglm-6b
的模型文件夹直接移动至.\text-generation-webui\models
文件夹内即可,其它模型也是同理。
⚠️提示:总而言之,如果使用本站所提供的国内网盘模型,一定要下载所有内容,包括文件夹及名称,然后将该文件夹移动至.\text-generation-webui\models
文件夹内即可。
⚠️警告:不要试图随意更改模型文件夹名称、模型名称、目录结构、缺失部分文件,这将会导致模型无法加载,或在使用过程中出现报错。
自动下载
Hugging Face 是下载模型的主要站点,本站以ChatGML
为例,为大家讲解如何通过该项目自动安装语言模型。
首先,我们要访问你想下载的模型主页
,比如ChatGML-6B
在Hugging Face
的地址为:https://huggingface.co/THUDM/chatglm-6b
那么我们打开这个网页,点击项目名称后面的复制
按钮,这将会自动复制该项目的完整名称
,比如本次复制后的内容为THUDM/chatglm-6b
。
复制完成后,回到该项目的Model选项卡
,在右侧的Download custom model or LoRA
区域,粘贴
我们刚刚复制的内容至此
,然后点击Download
按钮即可自动下载
。
等待下载完成之后,在项目目录的.\text-generation-webui\models
文件夹下,你将会看到一个名为THUDM_chatglm-6b
的文件夹,这代表我们已经下载成功啦。
基础使用教程
我们目前已经安装部署完成该项目,正常启动该项目,打开WebUI界面。
python server.py
待主界面
打开之后,在Model选项卡
中的Model选择框
内,选择
你需要加载的模型
(站长之前把ChatGLM的模型删除了,只保存了ChatGLM2,所以就用这个给大家演示吧,操作过程都是一样的。),然后点击Load
按钮。
诶?报错了?不用担心,这段容易的意思为要求您在本地计算机上执行该存储库中的配置文件,确保您已阅读代码以避免恶意使用,然后设置选项 trust_remote_code=True 以消除此错误。
我们不必理会,勾选该界面中的☑️trust-remote-code
选项,然后重新点击Load
按钮即可信息该模型存储库。
随后我们将在界面的右侧可以看到Loading chatglm2-6b
提示,这代表已经开始加载了,加载速度
取决于你的模型大小
与硬盘
是否为SSD
,以及GPU
硬件是否够好。
稍等片刻,当界面右侧的Loading chatglm2-6b
提示变为Successfully loaded chatglm2-6b
,这代表我们已经加载成功啦。
接下来,直接输入文字内容,就可以获得正常的交互输出了。
这就是最基本的使用方式了,在所有参数都几乎在默认的情况下。
高级使用教程
此项目存在多种模式
切换,每个模式的选项卡
也存在部分区域,默认情况下的选项卡分别为模型对话
|模型参数
|模型设定
|模型训练
|界面设置
,其它模式大同小异。
Model|模型设定
我们按照使用顺序来讲解使用教程,用到哪里说哪里。
无论你怎么使用,都是应该先加载模型
的,本次讲解所使用的模型以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
- 使用双重量化。
- cpu
- trust-remote-code
- 信任远程代码,一般情况下
ChatGLM
和Falcon
需要勾选此项。
- 信任远程代码,一般情况下
- Autoload the model
- 在模型列表下拉框选择模型后,是否立即加载?
- 如果勾选此项,选项模型后不用点击Load按钮。
关于Download custom model or LoRA
选项,就是自动下载模型啦,之前有讲过,这里略过。
说了这么多,其实只要你的电脑硬件不是太差,直接选择模型
,然后点击Load
按钮加载
即可,其它都保持默认。
如果你希望更改部分内容,上面站长已经写的很清楚了,自己改一改就好了。
Chat settings|聊天设置
当你的UI设置为聊天模式时,可以看到如下聊天模板,站长汉化了一下界面,方便大家进行理解,自己使用的时候肯定是英文版的,但不重要,因为位置几乎是一致的。
你可以理解为这是SD绘画的Prompt预设功能,直接设置一个角色,比如调教一个猫娘,以后和你对话的AI机器人将会被猫娘所代替。
站长对猫娘和角色不是很感兴趣,大家自己研究吧,因为这部分也没有什么难度。
Parameters|模型参数
我们可以在Generation parameters preset选项中看到一个下拉菜单,默认值为simpe-1,通过这个选项我们可以快速加载一些预设,以下是一些预设的推荐。
根据Preset Arena实验的结果,以下是最佳预设值:
- 指令操作|Instruction following:
- Divine Intellect
- Big O
- simple-1
- Space Alien
- StarChat
- Titanic
- tfs-with-top-a
- Asterism
- Contrastive Search
- 聊天|Chat:
- Midnight Enigma
- Yara
- Shortwave
- 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的显卡,能让最低配的语言模型跑起来都不错了,训练这一块有心无力,所以不讲,跳过。
Session|会话设置
此部分是用来进行高级配置的,最常用的就是可以在Mode选项框
内切换模式
,如果你加载的是对话模型,推荐切换为Chat
模式,然后点击Apply and restart
即可生效。
至于其它功能,都是和API相关的了,对于会用API的人来说,下面的内容解释起来也没有意义,因为他们都会;对于不会API的人,讲了也没用,哈哈,所以跳过了。
模型对话
说了这么多,也该说一说对话方面的操作了,以下分别是默认模式
|笔记模式
|聊天模式
的各模型对话界面,UI大同小异,功能不尽相同。
无论哪一种模式,都是发送内容
,返回内容
,没有太大的区别,翻译后的界面如下。
低配加载|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_DTYPE | 4 位的计算数据类型。有效选项:bfloat16、float16、float32。 |
--quant_type QUANT_TYPE | 4 位的量化类型。有效选项: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 SEED | llama-cpp 模型的种子。默认为 0(随机)。 |
AutoGPTQ
标志 | 描述 |
---|---|
--triton | 使用 Triton。 |
--no_inject_fused_attention | 禁用融合注意力,这将减少 VRAM 的使用,但推理速度较慢。 |
--no_inject_fused_mlp | Triton 模式下:禁用融合 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_VALUE | NTK 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-weight | FlexGen:是否压缩权重(默认值:False)。 |
--pin-weight [PIN_WEIGHT] | FlexGen:是否固定权重(将其设置为 False 可以减少 20% 的 CPU 内存)。 |
DeepSpeed
标志 | 描述 |
---|---|
--deepspeed | 通过 Transformers 集成启用使用 DeepSpeed ZeRO-3 进行推理。 |
--nvme-offload-dir NVME_OFFLOAD_DIR | DeepSpeed:用于 ZeRO-3 NVME offloading 的目录。 |
--local_rank LOCAL_RANK | DeepSpeed:分布式设置的可选参数。 |
RWKV
标志 | 描述 |
---|---|
--rwkv-strategy RWKV_STRATEGY | RWKV:加载模型时要使用的策略。示例:“cpu fp32”、“cuda fp16”、“cuda fp16i8”。 |
--rwkv-cuda-on | RWKV:编译 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。 |
总结
写这一篇教程是真的要命,实在太长了。后续该项目如果有其它功能性的更新,站长也会在这里重写,这篇文章写了两天,下课!
模型训练虽然2080ti带不起来,但能不能请站长也讲讲,大体流程是怎么样的呢?哪怕是一个simple demo case都可以,主要就是涉及到怎么给GPT喂知识,并保存下来
@谢谢站长 其实最主要的问题是,我这里也没有推理过,我连最小的LLaMA-7B都无法加载,所以无法知道自己的方式是否正确,能否成为教程的一部分。
% 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.
@NSG 路径中别存在中文字符试一下
在我使用这个工具,加载模型,点击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
为什么我的 trust-remote-code 不能勾选
我重新下载模型的时候出现Invalid model name format 是什么原因啊
站长我尝试使用你给的方法量化模型,但永远提示我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.,我看了这个文档但还是不知道去哪设置
请问能否出一个界面汉化的教程?谢谢!
请问公网访问可以自定义ip来进行访问吗?应该如何设置