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)
注意:如果你用的是M1/M2,记得把Xcode升级到14以上,否则Metal后端可能编译失败。我有个同事用Xcode 13.4折腾了两天,最后升级Xcode就解决了。

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)
Windows避坑指南:我曾经在Windows上遇到一个诡异问题——编译出来的main.exe双击闪退。后来发现是缺少VC++运行库。去微软官网下载「Visual C++ Redistributable」安装就好了。

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环境变量里。这样以后在任何目录都能直接调用 mainquantize 这些工具,不用每次都cd到build目录。

嗯,环境搭建这块就这些内容。不同平台确实有些差异,但核心思路是一样的——装好CMake和编译器,然后 cmake .. && make。Windows用户稍微多花点心思在Visual Studio的配置上,其他平台基本一路绿灯。


公众号:蓝海资料掘金营,微信deep3321