28,946 ⭐ 的 AirLLM:4GB 显存跑 70B 模型,没有量化,没有蒸馏,没有剪枝
28,946 ⭐ 的 AirLLM:4GB 显存跑 70B 模型,没有量化,没有蒸馏,没有剪枝
今日 +833 ⭐ | 单卡消费级 GPU 即可运行
https://github.com/lyogavin/airllm
我一直觉得”单卡跑 70B 大模型”是个噱头——要不就是用了量化(精度损失),要不就是用了蒸馏(能力缩水),要不就是剪枝(功能残缺)。
AirLLM 说不。
不用量化,不用蒸馏,不用剪枝,就是原版模型,在单张 4GB 显存的卡上跑。
这个 28.9k Star 的项目最近又更新了:支持了 Kimi K3(2.8T 参数)在单卡 3.72GB 显存运行——而且是端到端实测,不是跑个 hello world 那种 Demo。
它是怎么做到的?
核心思路是分层加载(layer-wise loading)。
大模型推理的瓶颈是显存:70B 参数的模型,FP16 需要 ~140GB,INT8 需要 ~70GB,都不是单卡能塞下的。
AirLLM 把模型按层拆分,推理时只把当前需要的层加载进显存,下一层要用了再换进来。由于 Transformer 的特性,层与层之间有依赖关系但没有计算耦合,换层和计算可以重叠进行——Prefetch 隐藏了 IO 开销。
官方说这套方法能让推理速度达到 3 倍加速,而且精度损失”几乎可忽略”。
现在能跑哪些模型
| 模型 | 参数量 | 所需显存 |
|---|---|---|
| Llama3 70B | 70B | 4GB |
| Llama3.1 405B | 405B | 8GB |
| DeepSeek-V3 | 671B | ~12GB |
| Qwen3-235B | 235B | ~3GB |
| Kimi K3 | 2.8T | < 4GB |
Sparse MoE 模型(Kimi K3、DeepSeek-V3)特别适合这套方案:token 一次只路由到少数专家 expert,不需要激活整个层,显存占用更低。
代码有多简单?
from airllm import AutoModel
# 一行加载,不需要指定模型类
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# 换成 235B 也只要改一行
# model = AutoModel.from_pretrained("Qwen/Qwen3-235B-A22B")
input_text = ['What is the capital of United States?']
input_tokens = model.tokenizer(input_text, return_tensors="pt",
return_attention_mask=False, truncation=True,
max_length=128, padding=False)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=20,
use_cache=True,
return_dict_in_generate=True)
output = model.tokenizer.decode(generation_output.sequences[0])
print(output)
安装:pip install airllm。Kimi K3 还需要额外装 compressed-tensors flash-attn(官方强制要求 flash attention)。
值得关注的版本演进
- 2026/07:Kimi K3 支持,3.72GB 端到端实测
- 2026/06:v3.0,FP8 支持,DeepSeek-V3(671B)~12GB 可跑
- 2024/07:Llama3.1 405B 支持,8GB 单卡
- 2023/12:MacOS 支持 70B 模型
适合谁用
- 没有 A100/H100 的个人开发者:想跑大模型验证想法,没有高端卡
- 本地实验:数据不能上云,但需要跑大模型做 RAG 或推理
- 边缘部署:特定场景需要本地大模型能力,硬件受限
总结:AirLLM 不是魔法,是工程。其 layer-wise loading + prefetch 重叠 IO 的思路,把”单卡跑大模型”从不可能变成了可工程化的现实。如果你被显存卡住,不妨一试。
评论区
登录后可评论。