2、环境搭建:在Linux/Mac/Windows上编译llama.cpp,依赖库安装与常见问题
好,咱们正式开始动手了。这一章我带你走一遍llama.cpp的编译流程。说实话,编译这玩意儿本身不复杂,但不同操作系统下的小坑确实不少。我当年第一次在Windows上折腾时,光一个CMake版本不对就卡了半小时。嗯,咱们今天就把这些坑提前填上。
2.1 核心依赖库一览
在动手编译前,先搞清楚llama.cpp依赖什么。说白了,它本身是个纯C/C++项目,依赖非常轻量。核心就这几样:
| 依赖库 | 作用 | 备注 |
|---|---|---|
| CMake (≥3.20) | 构建系统 | 推荐3.24以上,我遇到过3.18版本解析失败的情况 |
| C/C++编译器 | 编译源码 | GCC/Clang/MSVC均可 |
| make / ninja | 执行构建 | Linux/Mac自带,Windows需额外安装 |
| curl (可选) | 模型下载 | 没有也能手动下载 |
我个人习惯是先把CMake升到最新版。为什么?因为llama.cpp的构建脚本会用到一些较新的CMake特性,版本太低直接报错,你查半天都不知道错在哪。
2.2 Linux环境编译
Linux是最省心的平台,没有之一。我建议用Ubuntu 20.04或22.04,CentOS 7的话需要额外升级GCC。
2.2.1 安装依赖
# Ubuntu/Debian
sudo apt update
sudo apt install build-essential cmake git
# CentOS/RHEL
sudo yum install epel-release
sudo yum install gcc gcc-c++ make cmake3 git
# 注意:CentOS的cmake3需要软链接到cmake
sudo ln -s /usr/bin/cmake3 /usr/bin/cmake
这里有个坑——CentOS默认的GCC版本是4.8,太老了。llama.cpp需要C++17支持,至少GCC 8以上。我曾经在客户服务器上踩过这个雷,编译到一半报了一堆模板错误。解决方案是用devtoolset:
sudo yum install centos-release-scl
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++
scl enable devtoolset-9 bash
2.2.2 编译llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake ..
make -j$(nproc)
搞定。就这么简单。如果你有NVIDIA显卡想用CUDA加速,加个参数:
cmake .. -DLLAMA_CUDA=ON
make -j$(nproc)
-j$(nproc) 会自动使用所有CPU核心编译,速度翻倍。我一般还会加 LLAMA_NATIVE=ON 来针对当前CPU做优化。
2.3 Mac环境编译
Mac用户分两类:Intel芯片和老款Apple Silicon(M1/M2/M3)。两者编译方式略有不同。
2.3.1 安装Homebrew和依赖
# 安装Homebrew(如果没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装依赖
brew install cmake git
Xcode Command Line Tools也要装上,不然没有编译器:
xcode-select --install
2.3.2 编译(Intel Mac)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake ..
make -j$(sysctl -n hw.logicalcpu)
2.3.3 编译(Apple Silicon)
M系列芯片有专门的优化,用Metal加速。我个人在M1 Max上测试过,推理速度比CPU模式快3-4倍。
cmake .. -DLLAMA_METAL=ON
make -j$(sysctl -n hw.logicalcpu)
2.4 Windows环境编译
Windows是最折腾的,但也不是不能搞。我推荐两种方式:
2.4.1 方式一:使用Visual Studio(推荐)
安装Visual Studio 2022 Community版,记得勾选「使用C++的桌面开发」工作负载。然后装CMake:
# 用winget安装(Windows 10/11自带)
winget install Kitware.CMake
# 或者去 https://cmake.org/download/ 下载安装包
打开「Developer Command Prompt for VS 2022」,然后:
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -G "Visual Studio 17 2022" -A x64
cmake --build . --config Release
编译好的exe在 build\bin\Release 目录下。
2.4.2 方式二:使用MinGW(轻量级)
如果你不想装庞大的Visual Studio,可以用MinGW:
# 安装MSYS2,然后执行
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc git
# 打开MSYS2 MinGW64终端
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -G "MinGW Makefiles"
mingw32-make -j$(nproc)
2.5 常见编译错误与解决方案
我把这些年遇到的典型问题整理了一下,你遇到类似情况可以直接对照:
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
CMake 3.18 or higher is required |
CMake版本太低 | 升级CMake到3.20+ |
fatal error: 'cstdint' file not found |
编译器太老,不支持C++17 | 升级GCC到8+,或安装VS 2022 |
undefined reference to 'ggml_cuda_mul_mat' |
CUDA路径不对 | 设置 -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc |
error: 'Metal' is not supported |
macOS版本太低或Xcode太旧 | 升级到macOS 12+,Xcode 14+ |
LLAMA_CUDA: not found |
没装CUDA Toolkit | 从NVIDIA官网下载安装CUDA 11.7+ |
2.6 验证编译结果
编译完成后,先跑个简单的测试。我个人习惯用 --help 看看能不能正常输出:
# Linux/Mac
./main --help
# Windows
main.exe --help
如果能看到一堆参数说明,恭喜你,环境搭建成功了。接下来就可以下载模型开始推理了。
build/bin 目录加到PATH环境变量里。这样以后在任何目录都能直接调用 main、quantize 这些工具,不用每次都cd到build目录。
嗯,环境搭建这块就这些内容。不同平台确实有些差异,但核心思路是一样的——装好CMake和编译器,然后 cmake .. && make。Windows用户稍微多花点心思在Visual Studio的配置上,其他平台基本一路绿灯。
公众号:蓝海资料掘金营,微信deep3321