用Intel集成显卡推理本地模型
llama.cpp社区基于Intel的oneAPI平台推出了 SYCL 后端,允许将模型推理的一部分负载分配给GPU来处理。 这一成果不但支持数据中心级的推理设备,还下放给了Intel消费级CPU平台的集成显卡。
这里介绍一下在Ubuntu 24.04系统完成整体部署的具体步骤。
初期准备
先安装一下必要工具。
sudo apt update
sudo apt install -y build-essential git git-lfs cmake libcurl4-openssl-dev python3-venv python3-pip wget gnupg
安装Intel显卡驱动
使用Intel官方源安装驱动。
sudo apt-get update && \
sudo apt-get install -y software-properties-common && \
sudo add-apt-repository -y ppa:kobuk-team/intel-graphics && \
sudo apt-get install -y libze-intel-gpu1 libze1 intel-metrics-discovery intel-opencl-icd clinfo intel-gsc && \
sudo apt-get install -y intel-media-va-driver-non-free libmfx-gen1 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo
执行命令:
sudo usermod -aG render $USER
sudo usermod -aG video $USER
安装完成后确认一下,这个命令的输出应该包含显卡设备名字。
clinfo | grep "Device Name"
安装Intel oneAPI编译工具链
添加 Intel GPG 公钥
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo gpg --dearmor --yes -o /usr/share/keyrings/intel-sw-products.gpg
添加 Intel APT 仓库
echo "deb [signed-by=/usr/share/keyrings/intel-sw-products.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/intel-oneapi.list
安装编译工具链
这里安装 intel-deep-learning-essentials 套件足够了。 Intel另外提供了全量套件 intel-oneapi-base-toolkit,可以按需选择。
sudo apt update && \
sudo apt install -y intel-deep-learning-essentials
启用工具链
调用命令,启用刚才安装好的工具链。
source /opt/intel/oneapi/setvars.sh
这个命令应该产生输出,显示启用的具体工具。
编译 llama.cpp
以上步骤完成后,我们就可以编译本地 llama.cpp 了。
先拉代码仓
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
安装Python依赖
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
使用CMake编译
这里使用默认的FP32类型编译。
cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx
开始编译
cmake --build build --config Release -j -v
编译成功之后,应该可以在代码仓 ./build/bin 目录中发现编译好的二进制工具。
量化模型
先拉取全量模型到本地,可以考虑使用HuggingFace,ModelScope等社区提供的设施。 我这里使用git拉取魔搭社区托管的,HuggingFace团队推出的SmolLM3模型。这是今年新出的一个3B参数小模型。
git clone https://www.modelscope.cn/HuggingFaceTB/SmolLM3-3B.git
文件类型转换
这里的模型文件不能被 llama.cpp 编译出的二进制工具直接识别,需要先转换文件格式。
在 llama.cpp 代码仓根目录下调用Python脚本
.venv/bin/python ./convert_hf_to_gguf.py \
--outfile <新模型存放的目录地址>/smollm3_3b_f32.gguf \
--outtype f32 \
<SmolLM3-3B 模型文件夹地址>
转换完成后,应该可以看到 smollm3_3b_f32.gguf 文件。
正式量化
在 llama.cpp 代码仓根目录下执行
./build/bin/llama-quantize <刚才转换出来的模型存放的目录地址>/smollm3_3b_f32.gguf <新模型存放的目录地址>/smollm3_3b_q5_k_m.gguf Q5_K_M
这里选择了 Q5_K_M 量化参数。 llama-quantize 还支持更多量化参数,具体可以使用-h参数查看。
开始使用
使用 llama-server 完成部署
./build/bin/llama-server -m <量化模型存放的目录地址>/smollm3_3b_q5_k_m.gguf --port 8080 -ngl 1
现在就可以在浏览器中打开 http://localhost:8080 开始和模型对话了!