通常,运行具有 700 亿个参数的大型语言模型需要数十 GB 的视频内存。 AirLLM 更冷静地处理这个问题,并提供了一种不同的方式:这样的模型可以在只有 4 GB 内存的显卡上运行,并且不需要量化、蒸馏和修剪。在这篇文章中,我将尝试不慌不忙地告诉您 AirLLM 是如何工作的,如何使用它,并且我将分享我的小项目 AirLLM-experiments,这使得使用这个库更加方便。
什么是 AirLLM
AirLLM 是由 Gavin Li 编写的大型语言模型推理开源库。它的想法简单而优雅:该库一次仅将一层加载到 GPU 上,而不是将所有模型权重一次存储在视频内存中。权重以切分成层的分片的形式存储在磁盘上,在生成过程中,每层依次加载、处理和卸载。
由此可见,所需的视频内存量并不取决于模型的整体大小,而是取决于其中一层的大小。这就是为什么 70B 型号适合 4 GB,671B 上的 DeepSeek-V3 适合约 12 GB,而 Qwen3-235B 适合约 3 GB。但模型本身的大小主要受磁盘空间的限制,而不是显卡的功能。
这些内存节省是以速度为代价的:生成每个令牌时都会从磁盘读取每个层,因此输出很慢,每个令牌大约需要几秒。因此,AirLLM 不再是快速互动聊天,而是甚至能够启动不适合硬件的模型。
安装
该库是使用常用命令从 PyPI 安装的:
pip install airllm
首次启动时,模型将从 Hugging Face 下载并分解为图层。此过程很慢并且占用大量磁盘空间,因此您应该提前准备好可用空间。如果需要,您可以启用 4 位或 8 位压缩 – 然后将块量化应用于权重,这将使从磁盘加载图层的速度提高约三倍,并且精度会损失很多。
基本示例
您使用 AirLLM 的方式与使用 Transformer 中的常规模型几乎相同。在Hugging Face上输入一次模型ID就足够了,然后一切就会很熟悉了:
from airllm import AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
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=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)
print(model.tokenizer.decode(generation_output.sequences[0]))
AutoModel 类本身决定模型类型,因此同一行可用于 Llama、Qwen 和 DeepSeek。如果你采用像 DeepSeek-V3 这样具有 671B 参数的模型,它也将适合大约 12 GB 的视频内存 – 这在很大程度上使该项目具有吸引力。
在 macOS 上启动
AirLLM 不仅可以在 CUDA 上运行,还可以在 Apple Silicon 上运行。在 macOS 上,它使用 MLX 后端,因此需要安装 mlx 和 torch,并且仅支持 Apple 芯片。还有一个小限制:MLX 实现仅支持类似 Llama 的架构,因此 Qwen 和类似型号无法以这种方式在 MacBook 上启动。
使用示例
AirLLM 实验是两个小型交互式控制台实用程序,用于在本地运行大型语言模型。它们无需每次都编写相同的代码来加载模型和组织聊天。
第一个工具airllm-lib-usage.py直接在当前Python进程中运行AirLLM库。它显示总目录中模型的编号列表,如有必要,它会安装缺少的依赖项并打开聊天会话。 MLX运行时在macOS上使用,torch在其他平台上使用。
第二个工具是airllm-openai-server-client.py,可帮助您使用airllm-openai-server服务器,该服务器在Docker中运行并提供与OpenAI兼容的API。当您第一次启动它时,该实用程序会要求设置、收集图像、拾取容器并向正在运行的服务器打开流式聊天。当重复启动时,它会找到一个现有的容器并简单地重用它,并将模型缓存存储在单独的 Docker 卷中,以免再次下载模型。
可用模型的列表包含在公共模块 model_catalog.py 中,因此这两个工具都可以使用同一组模型。聊天命令也很常见:/help、/clear、/exit。源代码和说明位于存储库中:
https://github.com/zefir1990/AirLLM-experiments
需要注意什么
第一个响应可能需要几分钟的时间来准备:首先,AirLLM 下载模型并将其分层,然后才开始生成。此外,速度仍然很低——这是为了节省内存而故意做出的妥协。对于像 meta-llama 这样的门控模型,您需要接受 Hugging Face 上的条款并传递访问令牌。最好不要删除下载的模型和分片的缓存,否则所有内容都必须重新下载。
链接
https://github.com/lyogavin/airllm
https://github.com/mkamranr/airllm-openai-server
https://github.com/zefir1990/AirLLM-experiments
https://pypi.org/project/airllm/
https://huggingface.co/
来源
https://github.com/lyogavin/airllm
https://github.com/zefir1990/AirLLM-experiments
Leave a Reply