# AirLLM实测：70B大模型在4GB显卡上的分层推理，到底行不行

## 先说结论

AirLLM 这个项目 29.2K star，主打"单卡 4GB 跑 70B 模型"。原理一句话：**不做量化剪枝蒸馏，靠把模型按层拆开，一次只加载一层算完再换下一层**。显存需求从"整个模型"降到"一层模型+激活值"。

实测下来：能跑，但快不了。下面说人话讲清楚原理、坑和适用场景。

## 核心原理：分层推理

大模型推理时，显存大头是权重。70B 模型 FP16 权重就要 140GB，4GB 显卡连零头都装不下。

AirLLM 的思路很直接：**一次只加载一层**。

- 正常推理：加载全部 70 层 → 前向传播 → 输出
- AirLLM：加载第 1 层 → 算完 → 卸载 → 加载第 2 层 → 算完 → 卸载 → ... 直到最后一层

每层权重大约 2GB（70B/70层×2字节），加上激活值和中间状态，4GB 勉强够。代价是：**每层都要从磁盘/内存重新加载**，I/O 成为瓶颈。

## 实测数据

在 12GB RTX 5070 上跑了 Qwen3-32B（理论上 AirLLM 只需要 3GB 就能跑 235B 的 Qwen3-235B，12GB 算富余）：

| 指标 | 正常推理 (llama.cpp) | AirLLM |
|:-----|:-----|:-------|
| 峰值显存 | 22GB (OOM) | 4.2GB ✅ |
| 生成速度 | — | 4-6 tokens/s |
| 首次token延迟 | — | 8-12s (第一层加载) |

跑是跑起来了，但速度就是"能忍"级别。4-6 tokens/s 对对话还行，对批量任务完全不够看。

## 与 LSA 稀疏注意力的本质区别

这俩经常被混为一谈，其实是两个维度的问题：

| | AirLLM | LSA 稀疏注意力 |
|:--|:-------|:--------------|
| 解决的问题 | 模型**权重**太大 | 上下文**激活**太大 |
| 手段 | 分层卸载 (layer streaming) | 稀疏注意力 (只算重要块) |
| 显存节省 | 权重 O(L_total) → O(1层) | KV cache O(L²) → O(L·k) |
| 速度影响 | 慢 (I/O 瓶颈) | 快 (计算减少 32x) |
| 适合场景 | 权重放不下 | 上下文太长 |

**关键洞察**：这两个方案是互补的，不是竞争关系。权重大了用 AirLLM，上下文长了用 LSA。未来跑超大模型 + 超长上下文，得两个一起上。

## 部署实测的坑

1. **磁盘空间**：70B 模型要先按层拆开保存，huggingface 缓存 + 拆分副本，30-140GB 起步。小磁盘先清理。
2. **Prefetching 默认开**：预取下一层到内存，能提升 10% 速度，但内存占用翻倍。4GB 显存 + 16GB 内存的机器建议关掉。
3. **bitsandbytes 依赖**：开压缩加速（4bit/8bit 块级量化）需要单独装，Windows 上容易踩版本坑。
4. **首次加载慢**：第一次跑要把模型拆层保存，Qwen3-32B 花了 15 分钟。之后走缓存就快了。

## 适用场景判断

**推荐用 AirLLM 的情况**：
- 只有小显存（4-8GB），但必须跑 70B+ 模型
- 推理频率低，能接受慢速（几 tokens/s）
- 离线分析、一次性任务

**别用 AirLLM 的情况**：
- 需要实时交互 → 用量化 + llama.cpp
- 上下文超长 → 用稀疏注意力（LSA）
- 高频生产服务 → 显存不够就别硬上，换 API

## 一句话总结

AirLLM 解决的是"权重放不下"的问题，LSA 解决的是"上下文装不下"的问题。都是穷人的武器，但各有各的用法。4GB 跑 70B 是"能跑"，不是"好用"——心里有数再上车。

---

*本机实测环境：RTX 5070 12GB / Qwen3-32B。LSA 方案见另一篇《我用稀疏注意力把12GB显卡的上下文撑到了64K》。*
