跳到正文

目录

AirLLM 技术拆解:单张 4GB GPU 如何跑 70B 大模型

核心判断

AirLLM 不把模型"塞进"显存,而是让模型"流过"显存。70B 参数按 Transformer 层切分后存放在磁盘,推理时只加载当前计算层进 GPU,算完丢弃,再加载下一层。GPU 只需容纳单层参数——这是 4GB 显存跑 70B 的根本原因,也是它与 vLLM、TGI、TensorRT-LLM 等"整模型驻留"路线的本质分歧。

代价同样明确:层间磁盘 I/O 和加载开销显著拉高首字延迟并限制吞吐。AirLLM 适合显存受限但对延迟容忍度高的场景——离线批处理、研究复现、个人开发者跑大模型——不适合在线实时对话。

问题背景:大模型推理的显存墙

大模型推理的显存占用由四部分组成:

  1. 模型权重:FP16 下每参数 2 字节,70B 模型约 140GB
  2. KV Cache:推理时为避免重复计算注意力键值而缓存的中间状态,随上下文长度线性增长
  3. 激活值:前向计算过程中的中间张量,受 batch size 与序列长度影响
  4. 运行时开销:CUDA context、框架运行时、显存碎片等

主流优化方向几乎都集中在缩小前两项:量化(GPTQ、AWQ、bitsandbytes)、剪枝、蒸馏、PagedAttention(vLLM 的方案)、张量并行 / 流水线并行。AirLLM 走另一条路——逐层加载:不改精度、不改结构、不改并行拓扑,只把"整模型驻留显存"替换为"一次只驻留一层"。权重总数不变,磁盘占用不变,但峰值显存需求被压到单层大小。

核心原理:逐层加载如何突破显存限制

传统推理的显存模式

主流推理框架(HuggingFace Transformers、vLLM、TGI)加载模型时,在初始化阶段把所有权重从磁盘读入 GPU 显存并驻留。70B FP16 模型约 140GB,这就是为什么一般要求多张 A100/H100 或者至少一张 80GB 的 A800。

AirLLM 的层流式模型

AirLLM 重新组织加载流程:

  1. 磁盘存储:模型按 Transformer layer 切分,每层权重(attention + FFN)单独保存为 safetensors 分片
  2. 推理循环:每生成一个 token,依次执行每一层——加载当前层权重进 GPU,完成前向计算,释放,再加载下一层
  3. 流水线掩盖 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 推理加速"来自三处叠加:

  1. I/O 时间缩短:权重体积变小,磁盘读取和 PCIe 传输字节数减少
  2. 更激进的多层预取:层变小后,磁盘带宽允许同时预取更多层到 host memory 或 pinned memory,流水线更容易"喂饱" GPU
  3. 冷启动延迟降低:模型初始化阶段不必加载所有权重,可一边推理一边从量化分片中按需恢复

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 bitsandbytes
from 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 登录。欢迎补充事实、异议与实践。