前言
现在流行玩大模型,跟风玩了一下本地化部署。HP ProBook 450 G10笔记本,i51340P+16G,Win11家庭版,简单架了一个Ollama+Open WebUI环境,纯CPU试了Qwen2.5的0.5B、1.5B、3B、7B、14B,模型越大回复就越靠谱,也回复越慢,到了7B就要等老半天才有消息返回,于是想用核显的GPU来参与运算。
概述
花了几天摸索,各类文档内容看着比较乱,大致总结如下:
- 英特尔有提供ipex-llm库来实现英特尔核显GPU加速。ipex-llm/README.zh-CN.md at main · intel-analytics/ipex-llm · GitHub
- 对英特尔的显卡驱动版本有要求,31.0.101.5122。我本机是13代Cpu,Iris的显卡,驱动升级后满足要求。
- 英特尔官网对7代-10代的CPU核显提供的最高驱动版本为31.0.101.2130,我在另一台i7-9700T(核显UHD Graphics 630)上运行ipex-llm会报错,提示"InvalidModule: Invalid SPIR-V module: unsupported SPIR-V version number 'unknown (66560)'. Range of supported/known SPIR-V versions is 1.0 (65536) - 1.3 (66304)",因此至少需要11代CPU的核显才能加速。
- 用ipex-llm[cpp]为Ollama提供支持,使用ipex-llm内置的Ollama简单方便。
主要过程
- 显卡驱动升级:到英特尔官网下载最新显卡驱动并安装。请在任务管理器确认所使用的核显型号,确定属于最新驱动支持的范围「链接」
conda create -n llm-cpp python=3.11
conda activate llm-cpp
pip install --pre --upgrade ipex-llm[cpp]
mkdir llama-cpp
cd llama-cpp
init-llama-cpp.bat
init-ollama.bat
- 运行Ollama:如果Miniforge Prompt命令行窗口当前目录不在llama-cpp内,需要先使用cd命令进入llama-cpp文件夹,然后执行环境配置与服务启动。(注:服务期间此窗口不可关闭,结束Ollama服务可以按Ctrl+C中断运行)
conda activate llm-cpp
cd llama-cpp
set OLLAMA_NUM_GPU=999
set no_proxy=localhost,127.0.0.1
set ZES_ENABLE_SYSMAN=1
set SYCL_CACHE_PERSISTENT=1
set SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1
ollama serve
使用
- 到Ollama官网,找个准备使用的大模型,我这里选择的是阿里的大模型qwen2.5Tags · qwen2.5,示例使用1.5b-instruct调教版本,复制运行命令行“ollama run qwen2.5:1.5b-instruct”。
- 新开一个Miniforge Prompt命令行窗口(此时Ollama服务窗口应仍在继续运行中),进入llama-cpp目录,执行“ollama run qwen2.5:1.5b-instruct”,会自动下载模型文件,完毕后即可与大模型对话。可以在任务管理器观察到GPU被调用。
- 使用浏览器,访问本机11434端口,通过API方式访问Ollama。
问题
- 运行qwen2.5:14b-instruct,提示资源不足,运行失败。
- 运行qwen2.5:7b-instruct,能运行,速度还行,但在连续做大量推理后,比如写长篇作文,写着写着后面的内容就写成其它的内容了,比如报告、试题之类,无休无止,强行结束。
- 换了llama3.1:8b-instruct-q4_K_M,和qwen2.5:7b一样,能运行,大量推理后回复内容出错。
- 修改Ollama启动参数set OLLAMA_NUM_GPU=0,纯CPU方式来跑qwen2.5:7b和llama3.1:8b,慢,但输出的内容基本正常。
- 修改Ollama启动参数set OLLAMA_NUM_GPU=10,放一部分运算到GPU中,可见GPU未跑满,略微速度提升,CPU占满。
结束语
纯CPU情况顶多能跑个3b的模型,要想内容更加精准有效,14b应该是个比较折中的选择。通过对Ollama参数的优化,相信能够充分发挥出硬件资源的作用,欢迎大家共同探讨交流。