前言
本文以 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 Kernel | 3.10.0-1160.119.1.el7.x86_64 |
| CentOS | 7.9.2009 |
| GCC | 9.3.1 |
| G++ | 9.3.1 |
| CMake | 3.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 软件源
1 2
| yum install centos-release-scl -y
|
- 由于 CentOS 7 的 SCL 软件源已经停止维护,原来的软件源地址不可用,因此需要更换为阿里云的 SCL 软件源
1 2 3 4 5 6
| ls -l /etc/yum.repos.d/*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
| 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
| 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
|
1 2 3 4 5 6 7 8
| yum clean all
yum makecache
yum repolist
|
特别注意
上面配置阿里云的 SCL 软件源时,暂时使用了 gpgcheck=0,这仅用于排查仓库签名问题;正式使用建议恢复 GPG 校验并配置可信密钥。
1 2 3 4 5 6 7 8 9 10 11
| yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++
scl enable devtoolset-9 bash
gcc --version
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 优化版本
AVX2 指令集的作用
- AVX2(Advanced Vector Extensions 2)是 Intel 提供的一种 CPU SIMD(单指令多数据)指令集扩展技术,支持使用 256 位寄存器同时处理多个数据,从而提高数据并行计算效率。
- 对于 llama.cpp 等大模型推理程序,AVX2 可以加速矩阵运算、向量计算等操作,提升 CPU 推理性能,减少模型计算耗时。
编译源码
编译准备
- G++:准备 G++ 9 或更高版本
- CPU:确认是否支持 AVX2 指令集
- CMake:建议使用较新的版本(如
3.27.7)
编译步骤
1 2 3 4 5
| git clone https://github.com/ggml-org/llama.cpp.git
cd 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 |
其中重点关注:
llama-cli:命令行推理程序。llama-server:提供 HTTP API 服务。- 具体生成的可执行文件,以所选 llama.cpp 版本为准
部署模型