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 的思路,把”单卡跑大模型”从不可能变成了可工程化的现实。如果你被显存卡住,不妨一试。

🔗 https://github.com/lyogavin/airllm

评论区

0 条评论

登录后可评论。