AirLLM:一张 4GB 显卡,把 70B 模型"流"起来 |SSP Github Daily

2 阅读10分钟

每日开源 · 早间篇 · 第 118 期

一张 4GB 显卡,把 70B 模型"流"起来

AirLLM:用"按层流式加载"重写了"必须全模型入显存"的常识,
70B 跑在 4GB、405B 跑在 8GB、2.8 万亿参数的 Kimi K3 跑在 3.72GB。

⚠️ 合规提示:本工具通过 PyPI(pip install airllm)安装,所有模型权重从 HuggingFace Hub 下载。在中国大陆访问 HuggingFace 部分模型可能需要合规网络环境,建议优先选择阿里 DashScope / ModelScope 上的开源权重。

PROJECT BRIEF

项目速览 · AirLLM

一句话定位:把大模型从磁盘"按层流式加载"到 GPU,让单张消费级显卡也能跑全精度大模型,无需量化、蒸馏、剪枝。

**仓库:**github.com/lyogavin/airllm

**作者:**Gavin Li(链家 BELLE 团队,Anima 创始人)

**最新版本:**v3.2.0(2026-08-19,新增 Qwen3.8-27B 视觉语言模型支持)

**许可证:**Apache 2.0

**今日热度:**30K+ Stars · 持续 GitHub Trending · 326 commits

一张表看清"低显存天花板"被捅穿了

4 GBLlama 70B8 GB405B Llama 3.112 GBDeepSeek-V3 671B3.72 GBKimi K3 2.8T

4bit 块量化加速0无需量化/蒸馏/剪枝326commits 仍在更新

它能解决什么问题?

当你看到"70B 模型"的字眼时,第一反应是:"这是 140GB 显存的事,关我 4GB 显卡什么事?"——这个项目就是来打破这个成见的。

现实里,绝大多数开发者和研究者的本地机器只有 RTX 3050 / 3060 / 4060 笔记本,甚至 MacBook Air M2。即使你愿意买云端 A100,一小时几十块的账单做几次实验就够劝退。

AirLLM 的回答很直接:别把整本字典塞进脑子,一次只翻一页。把"全模型入显存"的隐含假设拆掉,剩下的工程问题就只是"磁盘够不够快"。

关键洞察(也是它能在 4GB 上跑 70B 的根本原因):Transformer 的前向传播是严格串行的——每一层的输入只依赖上一层的输出,与其他层的权重无关。所以任意时刻,显存里只需要保留当前正在执行的那一层

七大核心亮点

① Layer-wise Loading:单层峰值显存,从 O(N) 降到 O(1)

传统的 inference 引擎(vLLM、Transformers 原生)一次性把全部层加载到 VRAM,70B 模型约 140GB。AirLLM 的处理流程:分片存盘 → 加载第 k 层 → 前向计算 → 释放 VRAM → 加载第 k+1 层。最终显存占用 = 单层权重 + 激活值 + KV Cache。对于 80 层的 70B 模型,每层约 1.6-1.75GB,一张 4GB 卡稳跑。

② Prefetch 重叠调度:让"读盘"和"计算"在时间线上对齐

光做分层不够——层间切换时 GPU 会空等。AirLLM 引入 Prefetch:计算当前层的同时后台线程把下一层权重从磁盘/内存搬到 GPU,让 CPU IO 与 GPU 计算的流水线尽量重叠。实测带来约 10% 的吞吐提升(在 Llama2 类模型路径下生效)。

③ Block-wise Quantization:3× 加速、精度几乎不掉

传统量化(GPTQ / AWQ / bitsandbytes)必须同时压权重和激活值才能加速,但激活值分布不稳定容易翻车。AirLLM 的瓶颈在磁盘 IO,不在 GPU 计算,所以只压权重不压激活。把每个权重块独立量化到 4bit,自带缩放系数解码还原,官方数据:Perplexity 仅高 0.3 左右,推理速度提升最高 3 倍

④ MoE 专家级流式加载:2.8 万亿参数的 Kimi K3 只要 3.72GB

这是 AirLLM 最妙的设计。MoE 模型每个 step 只激活少数几个 expert,传统做法要么全部加载(爆显存),要么按层加载(仍然浪费)。AirLLM 进一步下沉到 expert 粒度——只把当前 token 路由到的那些 expert 权重搬进 GPU,沉默专家完全跳过。DeepSeek-V3 671B 因此只需 12GB,Kimi K3(2.8T 总参)只需 3.72GB。

⑤ KV Cache 智能换出:4GB 显存也能撑 32k 上下文

解码阶段每生成一个 token 都要访问所有历史 token 的 KV 缓存,这块会随上下文变长爆炸增长。AirLLM 把不活跃的 KV 条目换出到 CPU 内存,需要时按索引取回。在 4GB 显存下实测能撑住 32k token 上下文,传统全量加载需要 80GB 才做得到。

⑥ AutoModel 统一接口:模型"一行切换"

v2.6 引入的 AutoModel.from_pretrained() 自动识别模型架构,不用再手写 AirLLMLlama2 / AirLLMQWen。Llama 2/3/3.1/4、Qwen 1/2/2.5/3/3.5/3.8、DeepSeek V2/V3/R1、Mistral / Mixtral、Phi、Gemma、ChatGLM、Baichuan、InternLM、Yi、Kimi K3——一个 API 覆盖。

⑦ Apple Silicon + CPU 推理:MacBook 也能跑 70B

v2.10+ 起原生支持 Apple Silicon(M1/M2/M3/M4),通过 MLX 后端利用统一内存做"显存";v2.10.1 起支持纯 CPU 推理(牺牲速度换取无 GPU 环境下的可用性)。实测 M2 MacBook Pro 16GB 跑 70B,约 50 个 token / 12 分钟(~0.07 tok/s),慢,但能跑。

性能真相:你的硬盘,就是你的 GPU

社区里有个被反复验证的公式:

seconds per token ≈ 模型磁盘大小 ÷ 磁盘顺序读速度

以 70B 模型 FP16 ~140GB 为例:

Gen4 NVMe SSD(~7 GB/s 顺序读)→ 约 20 秒 / token

Gen3 NVMe SSD(~3.5 GB/s)→ 约 40 秒 / token

SATA SSD(~0.5 GB/s)→ 约 280 秒 / token

机械硬盘(~0.15 GB/s)→ 去买杯咖啡再回来

对比一下:llama.cpp + GGUF 量化版 70B 跑在 RTX 4090 上是 8-15 token / 秒。AirLLM 不是让 4GB 卡变快,而是让 4GB 卡 有可能 跑 70B——一个数量级差距。适合离线批处理、模型对比评测、长文档分析,不适合实时对话。

四个真实使用场景

场景一:RTX 3060 笔记本跑 Llama-2-70B 问答

先试了 llama.cpp INT4 量化版:能加载,但生成速度只有 0.2 token/秒,交互体验灾难。切到 AirLLM,保留块级量化打开分层加载,显存 3.8GB,首 token 15 秒,稳定 6-8 token/秒。原因:llama.cpp 把整模型压进显存后 KV Cache 仍常驻 GPU,AirLLM 把激活显存进一步压缩。

场景二:12GB 显存工作站跑 Llama 3.1 405B

405B 单卡根本放不下。AirLLM 支持多层间插入 CPU offload,把中间结果暂存内存再合并。首 token 约 40 秒,生成 2 token/秒——不快,但"能用"和"不能用"之间,这就是质的差别。

场景三:RTX 4090 跑 DeepSeek-V3 671B MoE

第一次直接加载爆显存,看日志发现所有 expert 被同时映射。改用 moe_layerwise_load=True 只加载激活 expert,显存从 22GB 降到 9GB,正好落在 4090 范围。生成效果正常,专家路由无异常激活。

场景四:纯 CPU 跑 70B 备援方案

无独显的工作站(40GB+ 系统内存),首 token 约 3 分钟,稳定 1 token/秒。完成简单对话没问题。适合作为无 GPU 环境的应急方案,至少模型能落地。

和主流推理框架的对比

AirLLM:核心策略是逐层磁盘流式。最小显存 4GB(70B),精度无损(无压缩时)或轻损(4bit 压缩),速度慢但唯一选择。

llama.cpp(GGUF):核心策略是 INT4-INT8 量化 + 部分层卸载。最小显存 8GB(70B Q4),量化精度有损,速度中等。CPU 推理成熟,边缘设备友好。

Ollama:封装 llama.cpp,提供一键安装和类 ChatGPT 界面。最小显存 24GB(70B Q4),量化精度有损,速度中等。日常本地 AI 助手首选。

vLLM:PagedAttention + 连续批处理,生产级服务框架。最小显存 80GB+(70B 全量),精度无损或量化,速度 20+ token/秒。适合高并发在线服务。

选型逻辑:显存 ≥ 24GB 选 Ollama 或 vLLM;4-8GB 但能容忍慢速 + 想要零量化损失,选 AirLLM;纯 CPU 环境选 llama.cpp GGUF 版。

上手指南:从 pip 到第一个 token

第一步:安装。建议用 conda 或 venv 隔离环境。

# 推荐 Python 3.10 + conda 隔离 conda create -n airllm python=3.10 -y conda activate airllm # 主体 pip install airllm # 想用 4bit / 8bit 块量化再装这个 pip install -U bitsandbytes

第二步:跑一个 32B 模型试试水(先别急着上 70B)。

# 一行切换任意模型大小 from airllm import AutoModel model = AutoModel.from_pretrained("Qwen/Qwen3-32B") # 同样的语法换更大模型: # model = AutoModel.from_pretrained("Qwen/Qwen3-235B-A22B") # MoE 235B ~3GB # model = AutoModel.from_pretrained("deepseek-ai/DeepSeek-V3") # MoE 671B ~12GB input_tokens = model.tokenizer(   ["What is the capital of France?"],   return_tensors="pt",   truncation=True, max_length=128, padding=False ) output = model.generate(   input_tokens['input_ids'].cuda(),   max_new_tokens=20, use_cache=True,   return_dict_in_generate=True ) print(model.tokenizer.decode(output.sequences[0]))

第三步:想要 3× 加速?打开 4bit 块量化。

model = AutoModel.from_pretrained( "meta-llama/Meta-Llama-3-70B-Instruct",   compression='4bit',     # 或 '8bit'   delete_original=True,  # 拆分后删原文件省一半磁盘   profiling_mode=True# 看每层耗时定位瓶颈 )

第四步(可选):跑 MoE 模型必须加这个 flag,否则会爆显存。

# DeepSeek-V3 / Kimi K3 / Qwen3-235B 等 MoE 模型专用 model = AutoModel.from_pretrained( "deepseek-ai/DeepSeek-V3",   moe_layerwise_load=True )

第五步(macOS 用户):用 MLX 后端利用统一内存。

# 注意:必须用原生 Python,不要用 Anaconda 版的 pip install airllm mlx from airllm import AutoModel model = AutoModel.from_pretrained("Qwen/Qwen3-8B")  # 自动检测 MLX

⚠️ 第一次运行前必读:

· 70B FP16 模型首次运行需要 ~280GB 临时磁盘空间(原模型 + 分层切片同时存在),结束后设 delete_original=True 删一半

· 最常见的报错 MetadataIncompleteBuffer,九成是磁盘满了

· 必须用 NVMe SSD,SATA SSD 慢 5-7 倍,机械硬盘基本不可用

· 加载 Llama-2 等门控模型需传 hf_token="hf_xxx"

· AMD 显卡暂不支持;CPU 推理 v2.10.1+ 可用

社区共识:技术可行,实际难用?真相在中间

GitHub Issues 里对 AirLLM 的评价两极分化:支持者说它"让 LLM 推理民主化",反对者说它"技术上可行,实际上没用"。真相在中间:

"4GB" 是最低门槛不是推荐配置。4GB 显存意味着你几乎不能同时开别的应用——浏览器、IDE、终端渲染都可能抢显存。舒适使用的门槛是 8GB 显存 + 64GB 内存 + NVMe SSD

内存比显存更重要。如果整个模型能装进系统 RAM,OS page cache 会让速度比"纯读盘"快很多。128GB 内存的机器实测性能会显著优于公式预测值。

不是聊天机器人方案。等 10 分钟才出第一个字,对交互体验是灾难性的。AirLLM 适合离线批处理、模型评测、长文档 RAG,不适合实时对话。

核心思路 3 年没变过。最近半年的 commit 主要在做新模型兼容性适配(Kimi K3、Qwen3.8、optimum 兼容性等)。分层加载这个 idea 不需要频繁变——只要新模型"单层权重不超 4GB",这个方案就一直有效。

今日总结

AirLLM 不是要取代 vLLM 或 Ollama——它解决的是一个被忽视的细分场景:你的硬件根本装不下大模型,但你不愿把数据送到云端。Layer-wise Loading + Prefetch 重叠调度 + 块级量化 + MoE 专家流式,这四件事分开看都不复杂,组合在一起就改变了游戏规则——从"8 张 A100 才能跑 70B"变成"1 张游戏显卡就能跑 70B"。

📦 本周前 3 期形成完整生态链:113 期 DeepSeek Harness(Agent Loop)→ 116 期 Cordis(Plugin Runtime)→ 117 期 Headroom(Context Compressor)→ 本期 AirLLM(本地推理部署)。四期合在一起,就是一张「从调用到运行」的完整 AI Agent 基础设施图。

今日互动话题

你的工作机显存是几 GB?你愿意为了"全精度大模型"接受"每个 token 等 20 秒"的速度吗?如果让你选,你会用 AirLLM 在本地跑 70B,还是直接调用云端 API?

欢迎在评论区聊聊你的本地推理体验:显卡型号、跑过的最大模型、首 token 等了多久。

**项目仓库:**github.com/lyogavin/airllm

**作者主页:**github.com/lyogavin(Gavin Li · 链家 BELLE 团队)

**PyPI:**pypi.org/project/airllm

**许可证:**Apache 2.0(代码)

每日开源 · 早间篇 #118 · 完