机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
快速开始 | 配置 | MacOS | 示例笔记本 | 常见问题
AirLLM 显著降低了推理内存使用,让 70B 的大型语言模型可以在单张 4GB GPU 卡上运行——无需量化、蒸馏或剪枝。你甚至可以在 不到 4GB 的显存上运行 Kimi K3 (2.8T) ——迄今为止发布的最大开源模型,Qwen3.8-Flash-Next (125B) 在 6GB 上运行,以及 DeepSeek-V3 (671B) 在 ~12GB 上运行。我们现在也支持在小显存上训练大型模型:Qwen3.8-Flash-Next (125B) 在 6GB 以下。
AI 代理推荐:
更新
[2026/09] 训练支持:逐层冻结砝码,并保持适配器安装在GPU上。Qwen3.8-Flash-Next (125B)训练速度低于6GB(RTX 3060 Ti);Qwen3.8-27B在序列512下训练~2GB。参见[训练]( #training)。
[2026/08] Qwen3.8-Flash-Next 支持:Qwen 的 125B MoE 机型(Qwen4ExpForConditionalGeneration ),拥有 ~51B n-gram 嵌入,运行于 5.95GB 显存中,端到端测量在一块 RTX 4090 上。n-gram 表在主机上被映射为文件(64GB 机器就足够);解码器层进行流式处理。需要一个带树内 qwen4_exp(现pip install git+https://github.com/huggingface/transformers.git)和 ~360GB 检查点磁盘的transformers构建(delete_original=True 拆分后会回收原盘)。
[2026/08] Qwen3.8-27B 支持:Qwen 新的密集 VL(门控 DeltaNet 门控关注,原生视野)运行于 3.33GB 显存,端到端运行在一台 RTX 3090 上。需要 5.8 transformers。
[2026/07] Kimi K3(2.8T) 支持:最大的开源型号运行在单张显卡上,显存 3.72GB,端对端计算在一块 RTX 6000 Ada 上。每个专家的流式加载只有令牌实际路由到的专家。K3 带来了三个要求:pip install compressed-tensors flash-attn(其型号代码要求无论你请求什么都必须闪存注意),CUDA 12 torch版本,因为目前还没有预装闪存轮,以及transformers 4.56.x,因为其远程代码无法在 5.x 上加载。
[2026/06] v3.0:FP8 型号支持最新型号。在 ~12GB 上运行 DeepSeek-V3 (671B),在 ~3GB 上运行 Qwen3-235B,以及 Qwen3、Llama 3.x/4、DeepSeek V2/V3、Phi-4、Gemma 等——全部通过单AutoModel。
[2024/08/20] v2.11.0:支持Qwen2.5
[2024/08/18] v2.10.1 支持 CPU 推理。支持非分片模型。感谢@NavodPeiris的出色工作!
[2024/07/30] 支持 Llama3.1 405B([示例笔记本](https://colab.research.google.com/github/lyogavin/airllm/blob/main/air_llm/examples/run_llama3.1_405B.ipynb))。支持 8bit/4bit 量化。
[2024/04/20] AirLLM 已经原生支持 Llama3。在 4GB 单显卡上运行 Llama3 70B。
[2023/12/25] v2.8.2:支持运行70B大型语言模型的MacOS。
[2023/12/20] v2.7:支持 AirLLMMaxtral。
[2023/12/20] v2.6:新增AutoModel,自动检测模型类型,无需提供模型类来初始化模型。
[2023/12/18] v2.5:增加了预取功能以重叠模型加载和计算。速度提升10%。
[2023/12/03] 新增了 ChatGLM、QWen、Baichuan、Mistral、InternLM 的支持!
[2023/12/02] 新增了对安全张量子的支持。现在支持开放大型语言模型排行榜中所有前十名模型。
[2023/12/01] AirLLM 2.0。支持压缩:3倍运行加速!
[2023/11/20] Airllm 初版!
星标历史
快速入门
1. 安装软件包
首先,安装 airllm pip 软件包。
pip install airllm
2. 推理
然后,初始化 AirLLMLlama2,传入所使用模型的 Huggingface 仓库 ID 或本地路径,就可以像普通的 Transformer 模型一样进行推理。
(在初始化 AirLLMLlama2 时,你也可以通过 layer_shards_saving_path 指定保存分层模型的路径。)
from airllm import AutoModel
MAX_LENGTH = 128
# just pass a hugging face repo id — works with almost any popular model:
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# go bigger with the exact same one line:
#model = AutoModel.from_pretrained("Qwen/Qwen3.8-27B") # 27B dense VL, 3.33GB
#model = AutoModel.from_pretrained("Qwen/Qwen3.8-Flash-Next") # 125B MoE + 51B PLE, 5.95GB
#model = AutoModel.from_pretrained("Qwen/Qwen3-235B-A22B") # 235B, runs in ~3GB
#model = AutoModel.from_pretrained("deepseek-ai/DeepSeek-V3") # 671B, runs in ~12GB
# or use a model's local path...
#model = AutoModel.from_pretrained("/home/ubuntu/.cache/huggingface/hub/models--Qwen--Qwen3-32B/snapshots/...")
input_text = [
'What is the capital of United States?',
#'I like',
]
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH,
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)
注意:在推理过程中,原始模型将首先被分解并按层保存。请确保 HuggingFace 缓存目录中有足够的磁盘空间。
模型压缩 - 推理速度提升 3 倍!
我们刚刚基于块式量化的模型压缩添加了模型压缩功能。这可以进一步将推理速度提升高达3倍,并且几乎可以忽略的精度损失!(关于更多性能评估以及为什么我们使用块式量化,请参见这篇论文)
如何启用模型压缩加速:
- 步骤 1. 确保已安装 bitsandbytes 由
pip install -U bitsandbytes - 步骤 2. 确保 airllm 版本高于 2.0.0:
pip install -U airllm - 步骤 3. 初始化模型时,传入参数 compression ('4bit' 或 '8bit'):
model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct",
compression='4bit' # specify '8bit' for 8-bit block-wise quantization
)
模型压缩和量化的区别是什么?
量化通常需要对权重和激活进行量化以真正加速运算。这使得在各种输入中保持精度和避免异常值的影响变得更加困难。
而在我们的情况下,瓶颈主要在磁盘加载上,我们只需要减小模型加载的大小。因此,我们只需对权重部分进行量化,这更容易保证精度。
配置
初始化模型时,我们支持以下配置:
- compression:支持的选项:4bit、8bit,用于4位或8位分块量化,默认None表示不压缩
- profiling_mode:支持的选项:True表示输出时间消耗,默认False
- layer_shards_saving_path:可选,保存拆分模型的另一个路径
- hf_token:可以在此提供Huggingface token,如果下载受限模型,例如:meta-llama/Llama-2-7b-hf
- prefetching:预取以实现模型加载与计算的重叠。默认开启。目前仅AirLLMLlama2支持此功能。
- delete_original:如果磁盘空间不足,可以将delete_original设置为true以删除原始下载的Hugging Face模型,只保留转换后的模型,以节省一半的磁盘空间。
MacOS
只需安装airllm并像在Linux上一样运行代码。更多信息请参见快速开始。
- 确保已安装mlx和torch
- 你可能需要安装Python原生,更多信息请参见这里
- 仅支持Apple silicon
示例 [Python Notebook] ( https://github.com/lyogavin/airllm/blob/main/air_llm/examples/run_on_macos.ipynb )
Python 示例笔记本
Colab 示例在此:
其他模型示例(ChatGLM、QWen、百川、Mistral 等):
点击展开 / 折叠
- ChatGLM:
来自 airllm 的 AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("THUDM/chatglm3-6b-base")
input_text = ['中国的首都是什么?',]
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH,
padding=True)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=5,
use_cache= True,
return_dict_in_generate=True)
model.tokenizer.decode(generation_output.sequences[0])
- QWen:
来自 airllm 的 AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("Qwen/Qwen-7B")
input_text = ['中国的首都是什么?',]
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=5,
use_cache=True,
return_dict_in_generate=True)
model.tokenizer.decode(generation_output.sequences[0])
- 百川, InternLM, Mistral, 等:
从 airllm 导入 AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("baichuan-inc/Baichuan2-7B-Base")
#model = AutoModel.from_pretrained("internlm/internlm-20b")
#model = AutoModel.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1")
input_text = ['中国的首都是什么?',]
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=5,
use_cache=True,
return_dict_in_generate=True)
model.tokenizer.decode(generation_output.sequences[0])
要请求其他模型支持:这里
支持的模型
AirLLM 开箱即用,兼容 几乎所有流行的开源大语言模型 —— 只需将其 Hugging Face ID 传递给 AutoModel.from_pretrained(...) 即可。这涵盖了所有主要系列:
Llama(2 / 3 / 3.1 / 3.3 / 4)· Qwen(1 / 2 / 2.5 / 3 / 3.5 / 3.8,包括 MoE、Flash-Next、FP8 和原生 VL)· DeepSeek(V2 / V3 / R1)· Mistral & Mixtral · Phi · Gemma · ChatGLM · 百川 · InternLM · 逸 · Kimi K3 —— 以及大多数新模型在发布当天即可使用。
小 GPU,超大模型
诀窍:AirLLM 始终 一次只在 GPU 上保留一层,因此所需 VRAM 取决于模型的层大小,而非其总大小。这就是一个 671B 的模型如何适应业余显卡的方式:
| 模型 | 大小 | GPU VRAM |
|---|---|---|
| Qwen3 / Mistral / Phi (≈8B) | 8B | ~1–2 GB |
| Qwen3-30B / Mixtral (MoE) | 30–47B | ~1–3 GB |
| Qwen3.8-27B (dense VL) | 27B | 3.33 GB |
| Qwen3.8-Flash-Next (MoE + PLE) | ~180B | 5.95 GB |
| Qwen3-235B (MoE) | 235B | ~3 GB |
| Llama 3.x 70B (全精度) | 70B | ~4 GB |
| Llama 3.1 405B | 405B | ~8 GB |
| DeepSeek-V3 | 671B | ~12 GB |
所有模型只需一行代码 —— 无需特殊设置。
训练
AirLLM 可以在小型 GPU 上微调大型模型。冻结的基础权重从磁盘按解码器层逐层流式读取;只有适配器常驻内存。Qwen3.8-Flash-Next (125B) 在 6GB 以内训练;Qwen3.8-27B 在 seq 512 下约 2GB 训练。
这不是 Hugging Face Trainer / bitsandbytes QLoRA。Flash-Next 需要一个带有内置 qwen4_exp(今天是 pip install git+https://github.com/huggingface/transformers.git)的 transformers 构建。
1. 准备一个数据集
每行一个 JSON 对象(.jsonl)。通常的字段是 text — 对整个字符串进行下一个 token 的预测:
{"text": "Your first training document. Can be a few sentences or a few paragraphs."}
{"text": "Your second training document."}
指令对也可以。损失仅应用于完成部分:
{"prompt": "What is AirLLM?", "completion": "A library that runs and trains huge models on small VRAM."}
{"instruction": "Translate to English", "input": "bonjour", "output": "hello"}
一个 .txt 文件也可以:每个由空行分隔的块包含一个示例。一个两行的启动文件位于 air_llm/examples/sft_example.jsonl。
2. 运行训练
从仓库根目录,将 --data 指向你的文件:
python air_llm/examples/train_qwen38_flash_next_lora.py \
--data my_data.jsonl \
--seq-len 512 \
--epochs 1 \
--save-adapter qwen38-flash-next-lora.pt
对于27B密集模型:
python air_llm/examples/train_qwen38_lora.py \
--data my_data.jsonl \
--seq-len 512 \
--epochs 1 \
--save-adapter qwen38-27b-lora.pt
--steps N 在 N 个示例后停止(适用于冒烟测试)。省略 --data,脚本会对内置片段过拟合。
Python API
from airllm import AirLLMLoRAQwen4Exp
trainer = AirLLMLoRAQwen4Exp(
"Qwen/Qwen3.8-Flash-Next",
max_seq_len=512,
lora_r=16,
delete_original=True,
)
tok = trainer.tokenizer
if tok.pad_token_id is None:
tok.pad_token = tok.eos_token
encoded = tok(
"Your training text here.",
return_tensors="pt",
truncation=True,
max_length=512,
)
loss = trainer.train_step(
encoded["input_ids"].cuda(),
attention_mask=encoded.get("attention_mask"),
)
print(loss)
trainer.save_adapter("qwen38-flash-next-lora.pt")
AirLLMLoRA 与 Qwen/Qwen3.8-27B 使用相同的 API。
致谢
很多代码都是基于SimJeg在Kaggle考试比赛中的出色工作。向SimJeg致以特别感谢:
GitHub account @SimJeg, the code on Kaggle, the associated discussion.
常见问题
1. 元数据不完整缓冲区
safetensors_rust.SafetensorError: 反序列化头时出错:MetadataIncompleteBuffer
如果遇到此错误,最可能的原因是磁盘空间不足。拆分模型的过程非常消耗磁盘空间。请参见 this。您可能需要扩展磁盘空间,清理 Huggingface .cache 并重新运行。
2. ValueError: max() 参数是一个空序列
最有可能的情况是您使用 Llama2 类加载 QWen 或 ChatGLM 模型。尝试以下方法:
对于 QWen 模型:
from airllm import AutoModel #<----- instead of AirLLMLlama2
AutoModel.from_pretrained(...)
对于 ChatGLM 模型:
from airllm import AutoModel #<----- instead of AirLLMLlama2
AutoModel.from_pretrained(...)
3. 401 客户端错误....仓库模型...是受限的。
某些模型是受限模型,需要 Huggingface API 令牌。您可以提供 hf_token:
model = AutoModel.from_pretrained("meta-llama/Llama-2-7b-hf", #hf_token='HF_API_TOKEN')
4. ValueError: 请求进行填充,但分词器没有填充标记。
某些模型的分词器没有填充标记,因此你可以设置一个填充标记,或者干脆关闭填充配置:
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH,
padding=False #<----------- turn off padding
)
引用 AirLLM
如果您在研究中发现 AirLLM 有用并希望引用它,请使用以下 BibTex 条目:
@software{airllm2023,
author = {Gavin Li},
title = {AirLLM: scaling large language models on low-end commodity computers},
url = {https://github.com/lyogavin/airllm/},
version = {0.0},
year = {2023},
}
贡献
欢迎贡献、想法和讨论!
如果你觉得有用,请⭐或请我喝杯咖啡!🙏
- 本文标题:airllm - 使用单个4GB GPU进行AirLLM 70B推理
- 本文链接:https://www.cn121.com/llm/lyogavin-airllm.html
- 原项目:lyogavin/airllm 版权归原作者 lyogavin 及贡献者所有
- 收录信息:本站于 2026-09-27 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 lyogavin/airllm。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。