AirLLM:弱显卡上的大型语言模型

Written by

in

通常,运行具有 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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

DemensDeum
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.