AirLLM 技术拆解:单张 4GB GPU 如何跑 70B 大模型
posts posts 2026-07-19T03:10:00+08:00AirLLM 通过逐层加载策略,让 70B 参数大模型在单张 4GB 显存 GPU 上完成推理,无需量化或剪枝。本文拆解其核心原理、压缩加速机制与适用边界。技术笔记LLM, 显存优化, 推理优化, 低资源核心判断
AirLLM 不把模型"塞进"显存,而是让模型"流过"显存。70B 参数按 Transformer 层切分后存放在磁盘,推理时只加载当前计算层进 GPU,算完丢弃,再加载下一层。GPU 只需容纳单层参数——这是 4GB 显存跑 70B 的根本原因,也是它与 vLLM、TGI、TensorRT-LLM 等"整模型驻留"路线的本质分歧。
代价同样明确:层间磁盘 I/O 和加载开销显著拉高首字延迟并限制吞吐。AirLLM 适合显存受限但对延迟容忍度高的场景——离线批处理、研究复现、个人开发者跑大模型——不适合在线实时对话。
问题背景:大模型推理的显存墙
大模型推理的显存占用由四部分组成:
- 模型权重:FP16 下每参数 2 字节,70B 模型约 140GB
- KV Cache:推理时为避免重复计算注意力键值而缓存的中间状态,随上下文长度线性增长
- 激活值:前向计算过程中的中间张量,受 batch size 与序列长度影响
- 运行时开销:CUDA context、框架运行时、显存碎片等
主流优化方向几乎都集中在缩小前两项:量化(GPTQ、AWQ、bitsandbytes)、剪枝、蒸馏、PagedAttention(vLLM 的方案)、张量并行 / 流水线并行。AirLLM 走另一条路——逐层加载:不改精度、不改结构、不改并行拓扑,只把"整模型驻留显存"替换为"一次只驻留一层"。权重总数不变,磁盘占用不变,但峰值显存需求被压到单层大小。
核心原理:逐层加载如何突破显存限制
传统推理的显存模式
主流推理框架(HuggingFace Transformers、vLLM、TGI)加载模型时,在初始化阶段把所有权重从磁盘读入 GPU 显存并驻留。70B FP16 模型约 140GB,这就是为什么一般要求多张 A100/H100 或者至少一张 80GB 的 A800。
AirLLM 的层流式模型
AirLLM 重新组织加载流程:
- 磁盘存储:模型按 Transformer layer 切分,每层权重(attention + FFN)单独保存为 safetensors 分片
- 推理循环:每生成一个 token,依次执行每一层——加载当前层权重进 GPU,完成前向计算,释放,再加载下一层
- 流水线掩盖 I/O:异步预取把下一层加载与当前层计算重叠
70B 模型(以 Llama 3 70B 为例)FP16 下约 80 层,每层权重约 1.7GB。加上 attention 的临时激活和 KV Cache,峰值显存由"单层权重 + 当前层 KV Cache + 激活"决定——这就是 4GB 跑 70B 的来源。
和主流方案对比
| 方案 | 显存占用 | 精度损失 | 适用硬件 |
|---|---|---|---|
| 整模型 FP16 加载 | 140GB(70B) | 无 | 多卡 80GB 或 H100 |
| GPTQ/AWQ 4bit | ~40GB(70B) | 轻微 | 单卡 48GB |
| vLLM PagedAttention | 同整模型 | 无 | 多卡高端 |
| AirLLM 逐层 | ~4GB(70B) | 无 | 单卡 4GB |
| AirLLM + 4bit 压缩 | ~1.5–2GB(70B) | 轻微 | 单卡 2GB |
逐层加载没有量化精度损失,不依赖特殊硬件,对显存极小的设备(消费级 GPU、Apple Silicon 入门款)特别友好。
压缩加速:4bit/8bit block-wise quantization 的 3x 加速
逐层加载解决了"显存放不下"的问题,但代价是吞吐下降——每层都要做一次磁盘到 GPU 的搬运。AirLLM v2 引入块级量化作为可选加速档。
压缩机制
4bit/8bit block-wise quantization 在逐层加载的基础上,对每层权重再做 4bit 或 8bit 量化。量化在加载过程中完成(边加载边反量化),显存里驻留的仍然是反量化后的 FP16/BF16 张量,计算图保持 FP16 精度。压缩效果是把磁盘上的层大小减到原来的 1/4(4bit)或 1/2(8bit),单层加载时间成比例下降。
3x 加速的来源
官方声称的"最高 3x 推理加速"来自三处叠加:
- I/O 时间缩短:权重体积变小,磁盘读取和 PCIe 传输字节数减少
- 更激进的多层预取:层变小后,磁盘带宽允许同时预取更多层到 host memory 或 pinned memory,流水线更容易"喂饱" GPU
- 冷启动延迟降低:模型初始化阶段不必加载所有权重,可一边推理一边从量化分片中按需恢复
3x 是上限值,受磁盘速度(NVMe SSD 优于 HDD)、PCIe 世代(4.0/5.0)、CPU 解压能力影响很大。HDD 或慢速网络盘上做逐层加载,速度会被 I/O 直接打回原形。
v3.0 的新能力
2026 年 6 月发布的 v3.0 把这条路线继续推进:
- FP8 模型原生支持:原生加载 FP8 精度的预训练模型,权重体积比 FP16 再小一半
- DeepSeek-V3(671B):MoE 架构的 671B 模型,FP8 下通过逐层加载只需约 12GB 显存
- Qwen3-235B 与 Kimi K3:同为 MoE 架构,分别只需约 3GB、3.7GB 显存
- 更强的预取调度:对 MoE 模型的 expert routing 做了优化,只加载当前 token 实际路由到的专家层,避免预取未激活的专家
性能权衡:延迟 vs 显存的取舍
逐层加载本质上是用延迟换显存。
首字延迟显著放大
生成是逐层的,延迟却不只是"单层加载"的量级。以 70B FP16、4GB GPU 为例:每生成一个 token 都要依次读完整份模型(约 140GB),即使有预取掩盖,I/O 等待也会把单 token 时间推到秒级甚至数十秒(见下文磁盘测算),对比整模型驻留时毫秒级。对交互式对话(期望 100ms–500ms 首字响应),这个延迟通常不可接受。
吞吐受限但可批处理
单流推理下,逐层加载的吞吐主要受 I/O 限制。但 AirLLM 支持多流批处理——同一时刻跑多个独立推理流,每一层的计算和另一流的 I/O 可以错峰,对总吞吐有改善。离线场景(一次性生成几千条数据、长文摘要、数据集标注)下,这种取舍是划算的。
磁盘是新的"显存"
AirLLM 把显存约束转嫁到磁盘带宽和容量。模型权重的"工作集"仍在磁盘上,只是把"全量驻留显存"换成了"按层滚动"。这里有两个容易被低估的现实:
磁盘速度决定单 token 耗时。 每生成一个 token,都要把整份模型读一遍。粗略看,单 token 耗时 ≈ 模型磁盘体积 ÷ 磁盘读速。以 70B FP16(约 140GB)为例:Gen4 NVMe(约 7GB/s)约 20 秒,Gen3 NVMe(约 3.5GB/s)约 40 秒,SATA SSD(约 0.5GB/s)则到分钟级——HDD 基本不可用。社区实测 70B 常见 5–35 秒/token,慢速盘上更高。对比之下,llama.cpp 在 RTX 4090 上量化 70B 能到 8–15 token/s。这就是"AirLLM 不是让 70B 变快,而是让它在 4GB 显卡上变得可能"这句实话的由来。
逐层切分会占用大量磁盘。 推理前需把模型按层切分成独立 safetensors 分片,磁盘占用约翻倍,且持续预留缓存空间。好在有 delete_original 选项可在切分后删除原始权重回收空间。因此:
- 模型文件必须常驻本地磁盘,不能放在慢速网络盘
- NVMe SSD 几乎是必需品,SATA SSD 也能跑但延迟更高
- Apple Silicon 走 unified memory 架构,SSD 吞吐也不错
适用场景与边界
典型适用场景
- 个人开发者在小显存设备上跑大模型:MacBook 16GB、Apple Silicon、单张消费级显卡(3060/4060 8GB、3060 12GB 等)
- 离线批量推理:数据标注、批量摘要、长文档分析,对单条延迟不敏感
- 研究和复现:低预算实验室验证 70B+ 模型行为
- 资源受限环境部署:在没有 80GB 级显卡的边缘节点或开发机上提供大模型能力
- 显存扩容前的临时方案:采购 80GB 显卡前先用 AirLLM 跑起来
不适合的场景
- 实时对话 / 聊天产品:首字延迟太高
- 高并发在线服务:逐层 I/O 会成为瓶颈,QPS 受限
- 需要低延迟流式输出逐字显示的场景:可以输出流式,但每个字的间隔仍受逐层加载影响
- 极慢磁盘或网络盘:I/O 会被打回原形
安装与上手
pip install airllm
# 使用 4bit/8bit 块级压缩加速时,还需安装量化内核依赖
pip install -U bitsandbytesfrom airllm import AutoModel
# 不量化:完整精度,仅逐层加载
model = AutoModel.from_pretrained("meta-llama/Meta-Llama-3-70B-Instruct")
# 需要更快时叠加块级压缩(精度损失极小,瓶颈是权重 IO)
from airllm import AutoModel
model = AutoModel.from_pretrained("meta-llama/Meta-Llama-3-70B-Instruct", compression="4bit")接口与 HuggingFace AutoModel 高度一致,仅需替换 import 即可,无需手动切分模型。常用参数还有 layer_shards_saving_path(指定分片保存目录)与 delete_original(切分后删除原始权重释放磁盘)。支持 Linux 与 Apple Silicon macOS(走 MLX),模型覆盖 Llama 3.x/4、Qwen3、DeepSeek V2/V3、Phi-4、Gemma、ChatGLM、Mistral 等主流架构。
结论
AirLLM 的路线是:不压模型,只压显存驻留时间。把整模型加载变成 Transformer 层的流式管道,用磁盘带宽和异步预取掩盖单层加载开销,换来极低的峰值显存需求。
v2 引入块级量化后变得更实用,v3 加入 FP8 与 MoE 路由优化后扩展到 671B 级别。对显存受限、延迟不敏感的离线推理与研究场景,AirLLM 是当下最务实的选择;对实时在线服务,vLLM、TGI、TensorRT-LLM 仍是更优解。
理解 AirLLM 的关键不在于"用了什么魔法",而在于重新定义了推理的显存假设:GPU 显存不需要装得下整个模型,只需要装得下一层。
参与讨论
使用 GitHub 登录。欢迎补充事实、异议与实践。
讨论暂时无法加载。