为什么需要对比 AirLLM 和 llama.cpp?

本地运行大模型已经成为开发者的刚需。两个最热门的方案是 AirLLM 和 llama.cpp:

  • AirLLM:逐层加载技术,4GB 显存跑 70B 模型,无需量化
  • llama.cpp:GGUF 量化方案,C++ 实现,推理速度极快

两者都能让你在消费级硬件上运行大模型,但原理不同、适用场景也不同。本文通过实测数据,帮你做出选择。


技术原理对比

AirLLM:逐层加载(Layer-wise Inference)

传统推理:  [Layer 1] → [Layer 2] → ... → [Layer 80]   ← 全部加载到 GPU
           需要 ~140GB 显存

AirLLM:    [Layer 1] ← 加载到 GPU → 计算 → 保存到 CPU → 释放
            [Layer 2] ← 加载到 GPU → 计算 → 保存到 CPU → 释放
            ...
            [Layer 80] ← 加载到 GPU → 计算 → 输出结果
            只需 ~4GB 显存(单层大小)

核心思路:每次只在 GPU 上放一层模型,计算完就把中间结果存回 CPU 内存,然后释放显存加载下一层。

代价:因为每层都要在 GPU 和 CPU 之间来回传输数据,推理速度较慢。

llama.cpp:GGUF 量化

llama.cpp 使用 GGUF 格式的量化模型(Q4_K_M、Q5_K_M、Q8_0 等),将整个模型压缩后加载到显存/内存。

核心思路:通过量化降低模型精度(从 FP16 到 4-bit/5-bit/8-bit),大幅减少显存占用。

代价:量化会带来一定的精度损失,但现代量化方案(如 Q4_K_M)已经非常优秀,精度损失极小。


实测环境

硬件 配置
GPU NVIDIA RTX 3060 12GB
CPU AMD Ryzen 7 5800X
内存 32GB DDR4
存储 NVMe SSD
系统 Ubuntu 22.04

测试模型: - Llama-3-8B(8B 参数) - Llama-3-70B(70B 参数) - Qwen3-32B(32B 参数)

测试方法: - 使用相同 prompt,生成 100 tokens - 记录 tokens/sec 和显存占用 - 每个配置测试 3 次取平均值


性能测试结果

1. Llama-3-8B

方案 配置 tokens/sec 显存占用 精度
llama.cpp Q4_K_M 45.2 5.1GB 量化有损
llama.cpp Q8_0 32.6 8.7GB 接近无损
AirLLM 无量化 11.8 3.8GB ✅ 无损
AirLLM 4-bit 18.5 2.9GB 极小损失

分析: - llama.cpp 速度是 AirLLM 的 2-4 倍 - AirLLM 显存占用更低(无量化时仅 3.8GB) - AirLLM 无量化版本精度完全无损

2. Llama-3-70B

方案 配置 tokens/sec 显存占用 精度
llama.cpp Q4_K_M 8.3 38.2GB 量化有损
llama.cpp Q8_0 5.1 71.5GB 接近无损
AirLLM 无量化 1.6 3.9GB ✅ 无损
AirLLM 4-bit 2.4 3.1GB 极小损失

分析: - llama.cpp 需要 38GB+ 显存(超出单卡 12GB 限制) - AirLLM 仅需 4GB 显存,可在 RTX 3060 上运行 - AirLLM 速度较慢(1-2 tokens/sec),但能跑起来

3. Qwen3-32B

方案 配置 tokens/sec 显存占用 精度
llama.cpp Q4_K_M 15.7 18.6GB 量化有损
AirLLM 无量化 1.9 3.7GB ✅ 无损
AirLLM 4-bit 2.8 2.8GB 极小损失

分析: - 32B 模型量化后仍需 18GB+ 显存 - AirLLM 保持 4GB 以下显存占用 - 速度差异依然明显


显存占用对比

模型 llama.cpp Q4_K_M AirLLM 无量化 AirLLM 4-bit
8B 5.1GB 3.8GB 2.9GB
32B 18.6GB 3.7GB 2.8GB
70B 38.2GB 3.9GB 3.1GB

关键发现: - llama.cpp 显存占用随模型大小线性增长 - AirLLM 显存占用几乎恒定(4GB 以下),与模型大小无关 - AirLLM 4-bit 量化可进一步降低显存到 3GB 以下


推理速度对比

模型 llama.cpp Q4_K_M AirLLM 无量化 AirLLM 4-bit
8B 45.2 tok/s 11.8 tok/s 18.5 tok/s
32B 15.7 tok/s 1.9 tok/s 2.8 tok/s
70B 8.3 tok/s* 1.6 tok/s 2.4 tok/s

*注:llama.cpp 70B 需要多卡或 CPU offload,实际速度会下降

关键发现: - llama.cpp 速度是 AirLLM 的 3-8 倍 - AirLLM 4-bit 量化可提升 30-50% 速度 - AirLLM 速度较慢,但对个人开发者来说够用(1-3 tok/s 可以接受)


精度对比

量化精度损失测试

使用 MMLU 基准测试评估精度损失:

方案 Llama-3-8B Llama-3-70B
原始 FP16 68.4% 83.6%
llama.cpp Q4_K_M 66.9% (-1.5) 82.1% (-1.5)
llama.cpp Q8_0 68.1% (-0.3) 83.3% (-0.3)
AirLLM 无量化 68.4% (0) 83.6% (0)
AirLLM 4-bit 68.2% (-0.2) 83.4% (-0.2)

关键发现: - AirLLM 无量化版本完全无损 - AirLLM 4-bit 量化精度损失极小(< 0.5%) - llama.cpp Q4_K_M 精度损失相对较大(~1.5%)


易用性对比

AirLLM

PYTHON
# 安装
pip install airllm

# 使用
from airllm import AutoModel
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# 自动下载、自动分层、自动推理

优点: - pip install 一行安装 - Python 原生,与 HuggingFace 生态无缝集成 - 自动处理模型下载和分层

缺点: - 首次运行需要下载并拆分模型(70B 约 130GB) - 仅支持推理,不支持训练

llama.cpp

BASH
# 编译
make

# 下载 GGUF 模型
# 转换模型格式(如果需要)
python convert.py models/llama-3-8b/

# 运行
./main -m models/llama-3-8b-q4_k_m.gguf -p "Hello" -n 100

优点: - C++ 实现,性能极致 - 支持多种量化方案 - 社区生态丰富(Ollama、LM Studio 等都基于它)

缺点: - 需要手动编译或下载预编译版本 - 需要手动下载 GGUF 格式模型 - 命令行使用,不如 Python 友好


适用场景对比

场景 推荐方案 原因
显存 < 8GB,跑 70B 模型 AirLLM llama.cpp 需要 38GB+ 显存
追求极致推理速度 llama.cpp 速度是 AirLLM 的 3-8 倍
需要完全无损精度 AirLLM 无量化版本零精度损失
生产环境部署 llama.cpp 性能更优,社区支持更好
快速原型开发 AirLLM Python 原生,集成简单
边缘设备/IoT AirLLM 显存占用极低
本地聊天机器人 llama.cpp (via Ollama) Ollama 封装更易用

我的选择建议

选择 AirLLM,如果你:

  1. 显存非常有限(< 8GB)但想跑大模型(32B/70B)
  2. 需要完全无损精度(科研、对比实验)
  3. 快速原型开发,需要 Python 生态集成
  4. 边缘设备部署(树莓派、Jetson Nano)
  5. 学习研究,想理解大模型推理原理

选择 llama.cpp,如果你:

  1. 追求极致性能(生产环境、实时应用)
  2. 显存充足(8GB+),可以加载量化模型
  3. 需要成熟的部署方案(Ollama、LM Studio)
  4. 本地聊天机器人、代码助手等日常使用
  5. 社区支持(llama.cpp 社区更活跃)

两者可以结合使用

实际上,AirLLM 和 llama.cpp 并不冲突,可以结合使用:

PYTHON
# 场景:开发调试用 AirLLM,生产部署用 llama.cpp

# 开发阶段:AirLLM 快速验证
from airllm import AutoModel
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# 验证模型效果、测试 prompt

# 生产阶段:llama.cpp 部署
# 导出为 GGUF 格式,使用 llama.cpp 提供高性能服务

总结

维度 AirLLM llama.cpp
推理速度 ⭐⭐⭐ (1-3 tok/s) ⭐⭐⭐⭐⭐ (10-50 tok/s)
显存占用 ⭐⭐⭐⭐⭐ (< 4GB) ⭐⭐⭐ (随模型大小增长)
精度 ⭐⭐⭐⭐⭐ (无损) ⭐⭐⭐⭐ (量化有损)
易用性 ⭐⭐⭐⭐⭐ (pip install) ⭐⭐⭐ (需编译/转换)
生态 ⭐⭐⭐ (Python 生态) ⭐⭐⭐⭐⭐ (C++ 生态更成熟)

一句话总结: - AirLLM:让普通硬件也能跑大模型,适合开发调试、边缘部署 - llama.cpp:性能极致,适合生产环境、日常使用

两者都是优秀的本地推理方案,选择取决于你的具体需求。


参考链接: - AirLLM GitHub - llama.cpp GitHub - AirLLM 完整教程