Run Qwen2 on Intel GPU with Text Generation WebUI

Intel Arc A770使用ipex-llm运行Qwen2大模型

Run Qwen2 on Intel GPU with Text Generation WebUI

本文参考:

ipex-llm项目 简单来说是一个Pytorch库,intel的CPU\iGPU\ARCGPU能够运行llm的基石 https://github.com/intel-analytics/ipex-llm
I卡上部署Text Generation WebUI官方教程(本文主要参考) https://github.com/intel-analytics/ipex-llm/blob/main/docs/mddocs/Quickstart/webui_quickstart.md#run-text-generation-webui-on-intel-gpu
Qwen2大模型 https://huggingface.co/Qwen/Qwen2-7B-Instruct

思路

  • 安装ipex-llm
  • 安装text-generation-webui
  • 通过webui下载所需大模型并运行

1. 安装ipex-llm

参考:https://github.com/intel-analytics/ipex-llm/blob/main/docs/mddocs/Quickstart/install_windows_gpu.md

第一步,先确认显卡驱动正确安装,且驱动版本不低于31.0.101.5122。如果低于此版本,请访问
https://www.intel.com/content/www/us/en/download/785597/intel-arc-iris-xe-graphics-windows.html
下载新的驱动程序,建议下载WHQL认证的版本,相对可靠性更高。

我使用的版本: 32.0.101.5768 (WHQL Certified) 

第二步,安装好python或者conda,并正确配置环境变量。建议使用conda,可以灵活配置各种虚拟环境以适应不同项目对python版本的差异性需求。官方文档里使用的Miniforge是个很优秀很轻量的conda安装器,这里同样推荐使用。

第三步,打开Miniforge Prompt

创建一个名字叫llm的python环境

conda create -n llm python=3.11 libuv

激活刚刚创建的llm环境

conda activate llm

使用pip命令安装ipex-llm

pip install --pre --upgrade ipex-llm[xpu] --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/cn/

2. 安装text-generation-webui

第一步,点击此链接将此webui项目下载至本地并解压缩
https://github.com/intel-analytics/text-generation-webui/archive/refs/heads/ipex-llm.zip
最终路径如下(官方文档中放在了C盘,但后续下载大模型文件也在此目录下,如在C盘会过多占用系统盘空间,所以个人建议放到非系统盘下):

E:\text-generation-webui

第二步,打开Miniforge Prompt激活llm环境,进入项目目录安装依赖

conda activate llm
cd E:\text-generation-webui
pip install -r requirements_cpu_only.txt
pip install -r extensions/openai/requirements.txt

注意1:Miniforge Prompt打开后的默认路径是在C盘的User路径下,此时不能直接cd到E:\text-generation-webui,需要使用cd .. 命令逐级回到C: 根目录后,使用

E:

将盘符改为E:之后再cd E:\text-generation-webui

注意2:执行两个依赖安装命令时可能会遇到权限不足的问题,此时使用管理员模式运行Miniforge Prompt,重新激活llm环境重新进入目录下执行即可

第三步,设置oneApi变量,如果是Arc独显:

set SYCL_CACHE_PERSISTENT=1

如果是核心显卡(独显用户千万别设置这个!!):

set BIGDL_LLM_XMX_DISABLED=1

第四步,启动服务
不需要API服务:

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

需要API服务:

python server.py --load-in-4bit --api --api-port 5000 --listen

使用load-in-4bit选项,模型将进行优化并以 4 位精度运行。有关其他格式和精度的配置,请参阅此链接

运行完成如下图所示说明成功运行了
----_20240730163048

4. 使用webui安装Qwen2-7b-instruct

点击moedl标签页,在Download model or LoRA下方的输入框中填写huggingface的项目路径

Qwen/Qwen2-7B-Instruct

点击Download(页面上看不到下载进度,可以在命令行界面看)。
下载完成后,点击Model右侧的蓝色刷新按钮,然后在model下拉菜单中选择Qwen/Qwen2-7B-Instruct,选中后,将Model Loader设置为IPEX-LLM,勾选load-on-4bit选项(能有效缩减所需显存体积)

以上设置完成后,点击Load。等待加载成功后即可愉快聊天了。

注意1:load失败如果最终返回KeyError: 'qwen2',请升级transformer版本transformers>=4.37.0

pip install transformers==4.37.0

(别忘了先激活llm环境哦!)

怪问题

内存溢出问题

加载模型实际上分为两步,先从硬盘读取到内存中,再从内存读取到显存中,如果内存不够大,在Load过程中就会报错,此时可以适当加大虚拟内存解决(会导致load变慢,但不影响load后的使用)
----_20240730164915

通过上图曲线可以看到,我32G内存差点成为瓶颈,加载时的内存占用从30%去到了90%多,等模型弯完全加载到显存后占用才回复正常