2. 环境搭建:在 Windows / Linux / macOS 上编译与安装 llama.cpp
说实话,环境搭建往往是入坑的第一个坎,也是劝退最多人的地方。我之前带过几个新人,光是在编译器版本上就卡了一整天。其实 llama.cpp 的设计已经很良心了——纯 C++17,依赖极少,跨平台思路也很统一。你只要把「获取源码 → 安装依赖 → CMake 配置 → 编译 → 验证」这条线捋清楚,基本半小时内就能跑起来。
2.1 前置依赖
先别急着敲命令,把工具链准备好。我个人习惯在开始前统一检查一遍,免得编译到一半报错还要回头装东西。
| 平台 | 编译器 | CMake 版本 | 额外工具 |
|---|---|---|---|
| Linux | GCC ≥ 10 或 Clang ≥ 12 | ≥ 3.20 | make / ninja, git |
| macOS | Apple Clang (Xcode 14+) | ≥ 3.20 | Xcode Command Line Tools |
| Windows | MSVC 2022 或 MinGW-w64 (GCC 12+) | ≥ 3.22 | Git for Windows, PowerShell |
xcode-select --install,不然连 clang 都找不到。
2.2 获取源码
源码直接从 GitHub 拉,没什么花头。我建议用 --depth 1 浅克隆,省时间省磁盘,毕竟我们目前只需要编译,不需要看完整历史。
git clone --depth 1 https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
如果你网络不好,也可以去 Releases 页面下载源码压缩包。但后续更新时还得手动下,不如 Git 方便。
2.3 Linux 编译——最省心的平台
Linux 下编译基本是「一条龙」体验。我个人最常用的是这种基础配置:
mkdir build && cd build
cmake ..
make -j$(nproc)
完事。编译完成后,./bin/main 就是推理入口。如果你想用 BLAS 加速 CPU 推理(说白了就是把矩阵乘法交给优化库),可以这样:
cmake .. -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS
make -j$(nproc)
为什么推荐 OpenBLAS?因为它 apt 就能装,不需要折腾。我有个项目在至强服务器上测过,开启 BLAS 后推理速度提升了大约 40%,还是挺香的。
-DLLAMA_BLAS_VENDOR=MKL 或 -DLLAMA_HIPBLAS=ON。但初次搭建建议先用 OpenBLAS 跑通,后续再折腾更高级的加速。
2.4 macOS 编译——为 Apple Silicon 量身定制
macOS 用户最关心的肯定是 Metal 加速。苹果的 M 系列芯片用统一内存,llama.cpp 对 Metal 的支持已经非常成熟了。我第一版在 M1 Max 上跑 7B 模型,开启 Metal 后首 token 延迟直接压到 80ms 左右,当时还是很惊喜的。
mkdir build && cd build
cmake .. -DLLAMA_METAL=ON
make -j$(sysctl -n hw.logicalcpu)
这里注意两点:
- 一定要安装 Xcode Command Line Tools,否则找不到 Metal 框架。
-j后面的核数可以用sysctl -n hw.logicalcpu动态获取,别写死。
如果你用的是 Intel Mac,Metal 也能用,但效果不如 Apple Silicon 明显。这时候我更推荐直接用 CPU 模式,或者试试 Vulkan 后端(需要自己编译 MoltenVK,稍微麻烦些)。
2.5 Windows 编译——两种路径,任你选择
Windows 稍微复杂点,但有两条成熟的路子。我两种都试过,给你对比一下:
| 方式 | 工具链 | 优点 | 缺点 |
|---|---|---|---|
| MSVC + CMake | Visual Studio 2022 | 官方支持最完整,CUDA 绑定方便 | 安装包大,首次配置稍慢 |
| MinGW-w64 + CMake | GCC 13 / Clang 16 | 轻量,与 Linux 命令习惯一致 | 部分 GPU 后端需要额外 patch |
MSVC 路径(推荐新手)
打开「Developer PowerShell for VS 2022」,然后:
mkdir build; cd build
cmake .. -DLLAMA_BUILD_TESTS=OFF
cmake --build . --config Release
注意这里用了 cmake --build 而不是 make,因为 Windows 下默认生成的是 Visual Studio 解决方案。你加 --config Release 确保编译优化版本,否则默认 Debug 跑起来慢不少。
MinGW 路径(适合 Linux 老手)
用 MSYS2 或者直接装 Git Bash 自带的 MinGW-w64:
mkdir build && cd build
cmake .. -G "MinGW Makefiles" -DLLAMA_BUILD_TESTS=OFF
mingw32-make -j$(nproc)
个人习惯:如果只做 CPU 推理,我更喜欢 MinGW,因为命令行操作和 Linux 完全一致,脚本可以复用。但如果要用 CUDA 或者 cuBLAS,乖乖走 MSVC,兼容性最好。
D:\项目\llama.cpp 下,CMake 配置阶段各种诡异报错,最后发现是中文路径惹的祸。llama.cpp 的构建脚本对 Unicode 路径支持不够好,尽量用纯英文路径。
2.6 编译选项详解——按需定制
llama.cpp 的 CMake 选项大概有二十多个,但真正常用的就这几个。我整理了一张表,你可以对照自己的硬件来选择:
| 选项 | 作用 | 适用场景 |
|---|---|---|
-DLLAMA_METAL=ON |
启用 Apple Metal GPU 加速 | macOS (尤其 Apple Silicon) |
-DLLAMA_CUBLAS=ON |
启用 NVIDIA CUDA + cuBLAS | Windows/Linux 有 N 卡的用户 |
-DLLAMA_CLBLAST=ON |
启用 OpenCL 通用 GPU 加速 | AMD / Intel 显卡或移动 GPU |
-DLLAMA_BLAS=ON |
启用 BLAS 库加速 CPU 推理 | 所有 CPU,尤其服务器场景 |
-DLLAMA_AVX2=ON/OFF |
手动控制 AVX2 指令集 | 老旧 CPU 需要关闭 |
-DCMAKE_BUILD_TYPE=Release |
编译优化版本 | 默认就是 Release,Debug 仅供调试 |
嗯,这里有个小坑你要注意:-DLLAMA_CUBLAS=ON 在 Windows 上必须搭配 MSVC,MinGW 目前支持不完整。我之前用 MinGW 试过,链接阶段报一堆符号错误,换成 MSVC 一次过。
2.7 验证安装——“hello world”阶段
编译完别急着跑大模型。先确认可执行文件是好的:
# Linux / macOS
./bin/main --help
# Windows (MSVC)
.\bin\Release\main.exe --help
如果能正常打印帮助信息,说明环境搭建成功了。这时候你可以找一个很小的 GGUF 模型来跑跑看(比如 TinyLlama 的 1.1B 版本),确认推理流程没问题。
./bin/main -m ../models/tinyllama-1.1b.Q4_K_M.gguf -p "Hello, world" -n 32这条命令会加载模型,基于 "Hello, world" 续写 32 个 token。如果能看到输出,恭喜你,llama.cpp 已经跑起来了。
2.8 全平台编译流程总览
为了让你对整个过程有个整体观感,我把各平台的共同路径整理成了一张流程图。核心逻辑完全一样,只是工具链和加速选项有差异。
这张图把整个流程串起来了。你看,不管用什么平台,前两步完全一样,只在 CMake 配置环节根据硬件选择不同的加速选项。这就是 llama.cpp 的设计哲学——核心统一,硬件适配留给编译开关。
2.9 常见编译问题速查
最后,我把之前带新人时最常遇到的几个问题列出来,你如果遇到类似现象可以对照着解决:
- "找不到
" 或 "未定义的引用" :通常是子模块没拉全。试试git submodule update --init --recursive。 - "CMake Error: No CUDA toolset found":装了 CUDA 但没装 VS 的 CUDA 扩展。Windows 下必须用
-DLLAMA_CUBLAS=ON配合 MSVC。 - "线程报错 / 段错误":大部分是编译时用了
-DLLAMA_AVX2=ON但 CPU 不支持。保守做法是关掉它,或者用-DLLAMA_AVX=ON降级。 - "Metal 编译报错":macOS 用户检查 Xcode 版本,至少 14.3 以上。我曾用 13.x 编译,Metal 后端死活过不了。
-D 选项,用纯 CPU 模式跑通。确认环境没问题后再开 BLAS 或 GPU 加速。这样万一出问题,你能快速定位是硬件加速的锅,还是环境本身的问题。
好了,到这一步,你的 llama.cpp 应该已经能编译通过了。接下来就可以真正开始玩模型了。记住:环境搭建只是手段,不是目的。跑通之后多试试不同的编译选项组合,找到最适合你硬件的那一套。