CentOS 7 使用 llama.cpp 部署本地大模型

前言

本文以 CentOS 7.9 为例,介绍 llama.cpp 的编译安装与大模型部署,默认采用 CPU 推理方式,不依赖 NVIDIA 显卡驱动和 CUDA 环境。如果需要使用 GPU 推理,则需要在编译时启用 llama.cpp 的 CUDA 后端,并确保 NVIDIA 显卡驱动、CUDA Toolkit、CUDA Runtime 以及 GPU 硬件架构之间满足版本兼容要求。例如,较新版本的 CUDA 通常要求更高版本的 NVIDIA 显卡驱动(部分 CUDA 12.x 版本需要 525 或更高版本,具体取决于 CUDA 小版本)。需要注意,CentOS 7.9 默认的 G++ 版本是 4.8.5,如果 CUDA 的版本也比较老旧,可能无法满足最新版本 llama.cpp CUDA 后端的编译要求。因此,如果希望在该环境中使用 GPU 推理(加速),通常需要升级 NVIDIA 显卡驱动和 CUDA 工具链,并选择与之兼容的 llama.cpp 版本。

相关资源

系统环境

软件名称版本信息
Linux Kernel3.10.0-1160.119.1.el7.x86_64
CentOS7.9.2009
GCC9.3.1
G++9.3.1
CMake3.27.7

准备工作

安装 CMake

  • llama.cpp 官方采用 CMake 作为项目构建工具,因此在编译源码之前,需要提前安装 CMake,并确保其版本满足当前 llama.cpp 的构建要求。
  • 建议从 CMake 官方渠道安装较新版本,避免因 CMake 版本过低导致项目配置或编译失败。
  • CMake 的安装步骤,可参考 《Linux 安装 CMake 3 》。

切换 G++ 版本

CentOS 7.9 自带 G++ 4.8.5,不建议直接用其编译当前最新版本的 llama.cpp;即使关闭 CUDA、只编译 CPU 推理版本,也不能保证编译通过。因为 llama.cpp 的 CPU 后端虽不依赖 CUDA,但仍使用较新的 C++ 特性和编译器能力,而 G++ 4.8.5 对现代 C++ 标准支持不足。推荐解决方案是:无需升级 CentOS 7.9,也无需升级系统自带的 G++ 版本,而是额外安装新版本 G++(如 G++ 9 或更高版本),并通过环境变量切换 C++ 编译器;CentOS 7 可尝试使用 SCL Devtoolset 来切换 C++ 编译器环境。

安装 SCL 软件源

  • 安装 SCL 软件源
1
2
# 安装软件源
yum install centos-release-scl -y
  • 由于 CentOS 7 的 SCL 软件源已经停止维护,原来的软件源地址不可用,因此需要更换为阿里云的 SCL 软件源
1
2
3
4
5
6
# 查看 SCL 仓库配置文件
ls -l /etc/yum.repos.d/*SCL*

# 备份 SCL 仓库配置文件
cp /etc/yum.repos.d/CentOS-SCLo-scl.repo /etc/yum.repos.d/CentOS-SCLo-scl.repo.bak
cp /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo.bak
1
2
3
4
5
6
7
8
# 编辑 SCL 仓库配置文件,更改(直接覆盖)仓库配置
vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
enabled=1
gpgcheck=0
1
2
3
4
5
6
7
8
# 编辑 SCL 仓库配置文件,更改(直接覆盖)仓库配置
vi /etc/yum.repos.d/CentOS-SCLo-scl.repo

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
enabled=1
gpgcheck=0
  • 清理并构建 YUM 缓存
1
2
3
4
5
6
7
8
# 清理所有 YML 缓存(包括元数据和软件包缓存)
yum clean all

# 重新构建 YUM 缓存
yum makecache

# 列出已启用的软件仓库及其软件包数量
yum repolist

特别注意

上面配置阿里云的 SCL 软件源时,暂时使用了 gpgcheck=0,这仅用于排查仓库签名问题;正式使用建议恢复 GPG 校验并配置可信密钥。

安装 Devtoolset

1
2
3
4
5
6
7
8
9
10
11
# 安装 G++ 9
yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++

# 启用 G++ 9
scl enable devtoolset-9 bash

# 检查 G++ 版本
gcc --version

# 检查 G++ 版本
g++ --version

Devtoolset 的作用

  • Devtoolset 是 Red Hat / CentOS 提供的软件开发工具集,主要用于在不升级系统原有编译器的情况下,安装和使用较新版本的 GCC、G++ 等开发工具。
  • 例如:CentOS 7 默认的 G++ 版本是 4.8.5,通过安装 Devtoolset,可以额外使用 G++ 9,而不影响系统原有的 G++ 4.8.5。

检查 AVX 指令集

  • 检查 CPU 是否支持 AVX 指令集,如果输出结果包含 avx2,则后面可以考虑编译 llama.cpp 的 AVX2 优化版本
1
2
# 检查 CPU 是否支持 AVX2 指令集
lscpu | grep -i avx

AVX2 指令集的作用

  • AVX2(Advanced Vector Extensions 2)是 Intel 提供的一种 CPU SIMD(单指令多数据)指令集扩展技术,支持使用 256 位寄存器同时处理多个数据,从而提高数据并行计算效率。
  • 对于 llama.cpp 等大模型推理程序,AVX2 可以加速矩阵运算、向量计算等操作,提升 CPU 推理性能,减少模型计算耗时。

编译源码

编译准备

  • G++:准备 G++ 9 或更高版本
  • CPU:确认是否支持 AVX2 指令集
  • CMake:建议使用较新的版本(如 3.27.7)

编译步骤

  • (1) 下载 llama.cpp 源码
1
2
3
4
5
# 拉取源码
git clone https://github.com/ggml-org/llama.cpp.git

# 进入源码目录
cd llama.cpp
  • (2) 编译 CPU 版的 llama.cpp
1
2
3
4
5
6
7
8
9
10
11
12
# 生成构建文件
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_CUDA=OFF \
-DGGML_NATIVE=OFF \
-DGGML_AVX=ON \
-DGGML_AVX2=ON \
-DGGML_FMA=ON \
-DGGML_F16C=ON

# 正式编译源码
cmake --build build --config Release -j$(nproc)

编译参数说明:

参数作用
GGML_CUDA=OFF关闭 CUDA,使用 CPU 推理
GGML_NATIVE=OFF不自动检测并优化当前 CPU
GGML_AVX=ON启用 AVX
GGML_AVX2=ON启用 AVX2
GGML_FMA=ON启用 FMA
GGML_F16C=ON启用 F16C
  • (3) 编译完成后,检查生成的可执行文件:
1
ls -lh build/bin/

其中重点关注:

  • llama-cli:命令行推理程序。
  • llama-server:提供 HTTP API 服务。
  • 具体生成的可执行文件,以所选 llama.cpp 版本为准

部署模型