这次又来水一篇文章。前段时间根据群友的启发,发现了intel-analytics(https://github.com/intel-analytics)仓库下的ipexllm,ipexllm简单来说是一个用于提升英特尔设备(cpu、独显核显都能用)大语言模型运行效率的库,并且在intel-analytics仓库下也发现了基于ipexllm的 Text-Generation-WebUI。就像stable-diffusion-webui易用于SD绘图,Text-Generation-WebUI也致力于大语言模型方面的易用性,这次就分享下如何部署基于ipexllm的Text-Generation-WebUI,并且通过修改模型参数来加载GPTQ量化模型。
首先说一下为什么要用ipexllm,Text-Generation-WebUI直接用ipex也是可以部署使用的,后端采用transformers可以直接加载大语言模型,但是大语言模型之所以是大语言模型,特点就是大,大多数模型加载后,即便是A770的16G显存也是吃不消的,比如最常用的chatglm3-6b模型,总容量将近13G,加载后显存基本就满了。目前通用的解决方案是量化模型,降低精度以减少显存占用,但是目前来说transformers后端并不直接支持I卡进行模型量化,而ipexllm是支持量化的,通过量化后(int4)显存将减少将近60%,大多数6b训练集的模型显存占用可以来到6-7G,这样的话8G显卡应该是可以尝试。
1、克隆intel-analytics仓库下的基于ipexllm分支的 Text-Generation-WebUI;
2、ipex,ipexllm库;
3、Text-Generation-WebUI启动运行所需依赖,根据仓库页面,就用根目录的requirements_cpu_only.txt;
4、设置参数启动。
安装命令就很常规了,安装之前需要电脑已经安装了git和python或者conda,并已经添加了对应的环境变量。
在需要安装Text-Generation-WebUI的文件夹资源管理器地址栏中输入CMD或者powershell打开对应的命令行工具,然后依次输入以下命令(我以conda创建虚拟环境演示,直接用python可以参照https://pd.qq.com/s/ai0syqcc7,括号内的不用复制):
git clone https://github.com/intel-analytics/text-generation-webui.git (克隆仓库代码)
cd text-generation-webui (进入text-generation-webui文件夹)
conda create -p ./venv python=3.10 libuv (创建虚拟环境)
conda activate ./venv (激活虚拟环境)
pip install dpcpp-cpp-rt==2024.0.2 mkl-dpcpp==2024.0.0 onednn==2024.0.0 (安装Intel oneAPI Base Toolkit 2024.0)
pip install https://github.com/Nuullll/intel-extension-for-pytorch/releases/download/v2.1.10%2Bxpu/intel_extension_for_pytorch-2.1.10+xpu-cp310-cp310-win_amd64.whl https://github.com/Nuullll/intel-extension-for-pytorch/releases/download/v2.1.10%2Bxpu/torch-2.1.0a0+cxx11.abi-cp310-cp310-win_amd64.whl https://github.com/Nuullll/intel-extension-for-pytorch/releases/download/v2.1.10%2Bxpu/torchaudio-2.1.0a0+cxx11.abi-cp310-cp310-win_amd64.whl https://github.com/Nuullll/intel-extension-for-pytorch/releases/download/v2.1.10%2Bxpu/torchvision-0.16.0a0+cxx11.abi-cp310-cp310-win_amd64.whl (安装ipex)
pip install --pre --upgrade ipex-llm[xpu] --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/cn/ (安装ipexllm)
pip install -r requirements_cpu_only.txt (安装依赖)
python server.py --load-in-low-bit sym_int4asym_int4sym_int8fp4fp8fp16mixed_fp4mixed_fp8 --auto-launch(配置启动参数)
到这一步就算安装好了,自己准备一些大模型放在根目录的models文件夹下(可以从huggingface下载),如果以后想用命令行启动就创建如下bat脚本(python创建的参照上面帖子,区别在于激活虚拟环境的命令,powershelll的类似)
@echo off
call conda activate .\venv
if %errorlevel% neq 0 exit /b %errorlevel%
python server.py --load-in-low-bit sym_int4asym_int4sym_int8fp4fp8fp16mixed_fp4mixed_fp8 --auto-launch
if %errorlevel% neq 0 exit /b %errorlevel%
call conda deactivate
@echo
call pause
1、原生模型加载
text-generation-webui启动完成后,点击model选项卡配置加载模型;
默认使用ipexllm后端进行加载,选择一种模型,然后在load-in-low-bit下拉框选择一种模型精度加载模型,最后就可以点击模型右侧的load进行加载。load-in-low-bit有多种模型可以选择,大家可以自行测试,其中sym_int4就是默认的int4加载模式。
2、GPTQ模型加载
我相信为了省显存,大多数人应该都会选择量化模式加载模型,既然这样为何不直接使用量化后的模型呢?量化后的模型容量也会减少60%左右,比如千问1.5 7b模型原版容量是14.3G,而GPTQ-Int4模型容量是5.46G,拯救硬盘容量危机!ipex-llm页面显示可以直接加载 GGUF、 AWQ 、 GPTQ 模型,但是如果按照上述方法部署其实是无法加载 GPTQ模型的,上面的依赖并没有安装AWQ 、 GPTQ后端,所以这里需要继续安装相关软件包。我查了一些资料后,找到了解决方法,以GPTQ为例子:
官方页面显示,还需安装红框中的软件包。
下面是在激活虚拟环境中安装的步骤:
conda activate .\venv
set BUILD_CUDA_EXT=0 (设置不安装cuda相关的软件,powershell应该可以直接复制上面的代码)
pip install git+https://github.com/PanQiWei/AutoGPTQ.git@1de9ab6 (安装指定的AutoGPTQ)
pip install optimum (这步应该不用,前面的依赖会把这个安装上,并且没有0.14.0这个版本,不知道官方这个到底安的哪个)
这时候就安装好缺的依赖,准备好GPTQ-Int4的模型,打开模型目录里面的config.json,把其中的"use_exllama": true改为"use_exllama": false,如果没有use_exllama这一项就手动添加"use_exllama": false到代码quantization_config选项里面,然后1、打开text-generation-webui;2、选择GPTQ-Int4模型;3、load-in-low-bit选择asym_int4;4、load加载。
三、模型下载
常规的没有魔法如何下载模型环节:
1、现在大多数大语言模型都可以在huggingface下载到,https://hf-mirror.com很好的解决了下载访问的问题,text-generation-webui中内置了下载脚本,在红框位置输入"模型用户名/模型名称"(就是模型主页.com后面的内容)就可以下载,默认是用的huggingface,想用镜像站的话,可以把根目录下的download-model.py打开,将里面的huggingface.co替换成hf-mirror.com。不过这个脚本断点续传好像有问题,我下载了几个模型不能用。
2、国内的魔搭社区(https://modelscope.cn/),上面有一些大语言模型可以下载,详细的看模型库。
1、本文中关于量化模型的加载是我自己找的资料试出来的,没有官方答案,所以有大佬感兴趣可以自己试试,有可能有其他方法。
2、我只试了GPTQ量化模型,像GGUF、 AWQ 等还没试,感兴趣的可以自己尝试。
参考:
1、https://github.com/Nuullll/intel-extension-for-pytorch/
2、https://github.com/intel-analytics/ipex-llm/tree/main/python/llm/example/GPU/HF-Transformers-AutoModels/Advanced-Quantizations/GPTQ
3、https://github.com/QwenLM/Qwen/issues/385