2、环境搭建:在Linux/Windows/MacOS上编译llama.cpp、依赖库安装(CMake、OpenBLAS、CUDA)、常见编译错误解决。

说实话,环境搭建这一步,劝退了很多人。

我见过不少朋友,模型都下好了,结果卡在编译上,一卡就是半天。其实没那么玄乎。llama.cpp 的编译,说白了就是三件事:装好工具链、选对后端、跑 cmake。今天我就把我在三套系统上的实战经验,掰开揉碎了讲给你听。

核心要点: 无论你用什么系统,llama.cpp 的编译流程都是 git clone → cmake -B build → cmake --build build。区别只在于依赖库的安装方式和后端加速的选择。

2.1 通用依赖:CMake 与编译器

llama.cpp 用 CMake 管理构建。我个人习惯用 CMake 3.22 以上版本,太老的版本可能会报一些奇怪的语法错误。

Linux (Ubuntu/Debian):

sudo apt update
sudo apt install build-essential cmake git
# 验证版本
cmake --version
gcc --version

macOS:

# 先装 Homebrew,然后
brew install cmake git
# Xcode Command Line Tools 会自动安装 clang
xcode-select --install

Windows:

我建议直接装 Visual Studio 2022 Community,安装时勾选「使用 C++ 的桌面开发」。然后去 cmake.org 下载安装包,记得选 Windows x64 Installer

小技巧: Windows 上装完 VS 后,打开「x64 Native Tools Command Prompt for VS 2022」,所有环境变量都配好了,直接在里面跑 cmake 命令,省心很多。

2.2 后端加速库:OpenBLAS 与 CUDA

llama.cpp 默认用纯 CPU 推理,速度嘛……只能说能跑。想快起来,必须上加速库。

2.2.1 OpenBLAS(CPU 加速)

OpenBLAS 是 CPU 上性价比最高的加速方案。我在项目中遇到过,同样的模型,开 BLAS 后推理速度能快 2-3 倍。

Linux:

sudo apt install libopenblas-dev

macOS:

brew install openblas

Windows:

Windows 上装 OpenBLAS 稍微麻烦点。我推荐用 vcpkg:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install openblas:x64-windows

2.2.2 CUDA(GPU 加速)

如果你有 NVIDIA 显卡,CUDA 是首选。llama.cpp 对 CUDA 的支持已经很成熟了。

安装 CUDA Toolkit:

去 NVIDIA 官网下载 CUDA 12.x(我建议 12.2 或 12.4,兼容性最好)。安装时注意:

  • Linux 上选 runfile 安装,别用 deb 包,容易和系统包冲突
  • Windows 上选自定义安装,只勾选 CUDA 和 Development 组件
  • 装完后检查 nvcc --versionnvidia-smi

注意: nvidia-smi 显示的 CUDA 版本是驱动支持的最高版本,而 nvcc 显示的才是你实际安装的 Toolkit 版本。两者可以不同,但 Toolkit 版本不能高于驱动支持的版本。我曾经在这上面栽过跟头,编译通过但运行时崩了,查了半天才发现是版本不匹配。

2.3 编译 llama.cpp:分平台实战

好,依赖都装好了,我们开始编译。先拉代码:

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

2.3.1 Linux 编译(CPU + CUDA)

纯 CPU 版(带 OpenBLAS):

cmake -B build -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS
cmake --build build --config Release -j$(nproc)

CUDA 版:

cmake -B build -DLLAMA_CUDA=ON
cmake --build build --config Release -j$(nproc)

我的习惯: 我会先编译纯 CPU 版验证代码没问题,再编译 CUDA 版。这样如果 CUDA 编译报错,能快速定位是代码问题还是 CUDA 配置问题。

2.3.2 macOS 编译(Metal 加速)

macOS 上,Apple Silicon 芯片用 Metal 后端,速度飞起。

cmake -B build -DLLAMA_METAL=ON
cmake --build build --config Release -j$(sysctl -n hw.logicalcpu)

Intel Mac 的话,没有 Metal 加速,用 OpenBLAS 就好:

cmake -B build -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS
cmake --build build --config Release -j$(sysctl -n hw.logicalcpu)

2.3.3 Windows 编译(CUDA + OpenBLAS)

Windows 上我推荐用 PowerShellx64 Native Tools Command Prompt

CUDA 版:

cmake -B build -DLLAMA_CUDA=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

OpenBLAS 版(用 vcpkg 安装后):

cmake -B build -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS `
  -DCMAKE_TOOLCHAIN_FILE="C:/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake"
cmake --build build --config Release

2.4 常见编译错误及解决

编译报错是家常便饭。我把最常见的几个列出来,你遇到了直接对号入座。

错误信息 原因 解决方法
CUDA not found CMake 找不到 CUDA Toolkit 设置环境变量 CUDA_PATH,或指定 -DCUDAToolkit_ROOT
BLAS not found OpenBLAS 未安装或路径不对 Linux 上 sudo apt install libopenblas-dev;Windows 上用 vcpkg
fatal error: 'cuda_runtime.h' file not found CUDA 头文件路径未包含 检查 CUDA_PATH 是否指向正确的 CUDA 安装目录
undefined reference to 'cublasCreate_v2' 链接时缺少 CUDA 库 确保 -DLLAMA_CUDA=ON 已设置,且 CUDA 库路径正确
nvcc fatal: Unsupported gpu architecture 'compute_89' CUDA 版本太老,不支持新显卡架构 升级 CUDA Toolkit 到 12.x 版本
cc1plus: error: unrecognized command line option '-std=c++17' 编译器太老,不支持 C++17 Linux 上升级 gcc 到 9+;macOS 上更新 Xcode

避坑指南: 我曾经在 Ubuntu 20.04 上编译 CUDA 版,一直报 cublas_v2.h not found。折腾了半天,发现是系统默认的 gcc 版本是 9.4,而 CUDA 11.8 要求 gcc ≤ 9.3。解决办法是安装 gcc-9 和 g++-9,然后设置 export CC=gcc-9 CXX=g++-9 再编译。嗯,版本匹配问题,永远是第一道坎。

2.5 验证编译结果

编译成功后,build/bin/ 目录下会生成 main(或 main.exe)等可执行文件。跑一下看看:

./build/bin/main --help

如果能看到帮助信息,说明编译成功了。接下来就可以用 ./main -m 模型路径 -p "你好" 来测试推理了。

2.6 知识体系总览

下面这张图,概括了本章的核心逻辑。你跟着这个流程走,基本不会迷路。

llama.cpp 环境搭建知识体系 llama.cpp 源码 依赖安装 CMake + 编译器 OpenBLAS (CPU) CUDA (GPU) cmake -B build + cmake --build 验证:./build/bin/main --help 常见错误 CUDA not found BLAS not found 版本不匹配 编译器太老 Linux macOS Windows

嗯,到这里,环境搭建这部分就讲完了。你跟着步骤走,应该不会出大问题。如果卡住了,回头看看那张表格,八成能找到答案。

专注资料整理