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 开始和模型对话了!

参考资料