AirLLM 怎么部署?低显存运行大模型的 Linux 实践
大模型本地推理最常见的限制之一就是显存。
普通消费级显卡通常只有 8GB、12GB 或 16GB 显存,而 70B、235B 甚至更大的模型,完整加载权重时往往需要远高于这个数字的显存容量。
lyogavin/airllm 提供了一种不同的思路:不把整个模型一次性加载进 GPU,而是在推理过程中按层加载。

这样做的结果是,显存需求可以明显下降。
官方项目目前给出的示例包括:
- 8B 级模型约 1~2GB 显存;
- 30B~47B MoE 模型约 1~3GB;
- Qwen3-235B 约 3GB;
- Llama 70B 全精度约 4GB;
- Llama 3.1 405B 约 8GB;
- DeepSeek-V3 约 12GB。
AirLLM 近期还增加了 Kimi K3 支持。具体显存占用仍会受模型结构、框架版本和运行环境影响,因此这些数字更适合作为项目示例,而不是所有机器都能完全复现的固定值。
AirLLM 是怎么降低显存需求的?
传统模型推理大致是:
模型全部权重
↓
加载到 GPU
↓
开始推理
因此显存不足时,模型根本无法启动。
AirLLM 的思路更接近:
模型权重在磁盘
↓
加载第 1 层
↓
GPU 计算
↓
释放
↓
加载第 2 层
↓
继续计算
也就是说:
显存占用
≈
单层模型大小
而不是整个模型大小。
官方说明也明确表示,AirLLM 只会让一层权重同时驻留在 GPU,因此显存需求更多取决于“单层大小”,而不是模型的总参数量。
这种方式有什么代价?
显存降低并不等于没有成本。
最大的代价通常是:
磁盘 IO。
因为推理过程中要不断从磁盘读取模型层。
因此一台机器的整体性能会变成:
SSD
↓
PCIe / 内存
↓
GPU
↓
计算
如果磁盘速度比较慢,即使 GPU 性能不错,也可能被模型加载速度拖慢。
所以使用 AirLLM 时,磁盘往往比普通 LLM 部署更加重要。
AirLLM 适合哪些场景?
比较适合:
- 低显存 GPU 实验;
- 超大模型功能验证;
- AI 模型兼容性测试;
- 个人研究环境;
- 大模型开发实验;
- 模型架构研究。
不太适合:
- 高并发在线 API;
- 对低延迟要求很高的聊天服务;
- 大量用户同时访问;
- 对首 Token 延迟敏感的生产业务。
因为 AirLLM 的主要目标是:
让模型“跑得起来”
而不是:
让模型“跑得最快”
是否一定需要 GPU?
不一定。
AirLLM 在 2024 年后已经加入 CPU inference 支持。
但从实际体验来看,大模型纯 CPU 推理速度通常会明显低于 GPU。
因此更常见的用途还是:
CPU + GPU + 大容量 SSD
服务器配置怎么选?
AirLLM 的服务器配置和普通 Web 项目完全不同。
重点不是:
带宽多大
而是:
GPU 显存
SSD 容量
SSD 速度
系统内存
小模型测试
例如 7B、8B:
- 4~8 核 CPU;
- 16GB 内存;
- 50GB~100GB SSD;
- 4GB 以上 GPU 显存。
70B 模型实验
可以考虑:
- 8 核 CPU;
- 32GB 内存;
- 150GB~300GB NVMe;
- 4GB~8GB GPU 显存。
200B 以上模型
更建议:
- 16 核以上 CPU;
- 64GB 内存;
- 500GB 以上 NVMe;
- 根据模型选择 GPU。
需要注意:
显存小 ≠ 磁盘需求小
AirLLM 首次运行模型时会把模型拆分成多个 layer shard,并保存在磁盘。官方 README 也特别提醒,这一步非常占用存储空间。
云服务器怎么选?
如果准备部署 AirLLM,建议重点看:
- 是否提供 NVIDIA GPU;
- GPU 型号;
- CUDA 兼容性;
- NVMe 容量;
- NVMe 读写性能;
- 系统内存;
- 是否方便扩展磁盘。
如果使用莱卡云,可以把它作为 AirLLM 实验环境的一个候选方案,根据实际 GPU、内存和 NVMe 配置进行选择。
对于 AirLLM 来说,服务器品牌本身不是关键,更重要的是硬件组合是否匹配目标模型。
如果已有其他 GPU 云服务器、自建工作站或闲置显卡机器,也可以采用相同方案。
Ubuntu 环境准备
建议使用比较新的 Ubuntu。
更新系统:
apt update
apt upgrade -y
安装基础工具:
apt install -y \
git \
curl \
wget \
python3 \
python3-pip \
python3-venv \
build-essential
创建 Python 环境:
python3 -m venv ~/airllm-env
启用:
source ~/airllm-env/bin/activate
升级 pip:
pip install -U pip
安装 AirLLM
官方最简单的安装方式:
pip install airllm
检查:
python -c "import airllm; print('airllm ok')"
官方 Quick Start 当前也是直接通过 PyPI 安装 airllm。
最简单的推理示例
可以创建:
nano test_airllm.py
写入:
from airllm import AutoModel
model = AutoModel.from_pretrained(
"Qwen/Qwen3-32B"
)
input_text = [
"What is the capital of China?"
]
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=32,
use_cache=True,
return_dict_in_generate=True,
)
print(
model.tokenizer.decode(
generation_output.sequences[0]
)
)
运行:
python test_airllm.py
官方现在推荐使用 AutoModel.from_pretrained(),可以自动识别多种模型类型。
模型第一次运行为什么很慢?
第一次加载模型时,AirLLM 会:
下载模型
↓
拆分模型
↓
生成 layer shards
↓
保存到磁盘
因此第一次启动往往明显慢于后续运行。
官方也特别说明:
模型会先被拆分并按层保存。
因此需要确保 Hugging Face cache 有足够空间。
建议单独准备模型盘
如果服务器系统盘只有:
50GB
很容易不够。
更合理的结构可以是:
/
系统盘
/data
大容量 NVMe
/data/huggingface
模型缓存
/data/airllm
layer shards
然后设置:
export HF_HOME=/data/huggingface
可以写进:
~/.bashrc
layer_shards_saving_path
AirLLM 支持指定拆分模型保存路径。
例如:
model = AutoModel.from_pretrained(
"Qwen/Qwen3-32B",
layer_shards_saving_path="/data/airllm/qwen3-32b"
)
这样可以避免大量模型文件堆积在系统盘。
官方配置项中也明确提供了 layer_shards_saving_path。
磁盘不够怎么办?
AirLLM 还提供:
delete_original=True
例如:
model = AutoModel.from_pretrained(
"Qwen/Qwen3-32B",
delete_original=True
)
这个选项会在完成模型转换后删除原始 Hugging Face 模型,只保留拆分后的版本。
官方说明,这可以显著降低磁盘占用。
但建议第一次操作前确认:
- 模型已经成功转换;
- 不需要保留原始文件;
- 网络能够重新下载模型。
开启模型压缩
AirLLM 支持:
4bit
8bit
模型压缩。
先安装:
pip install -U bitsandbytes
然后:
model = AutoModel.from_pretrained(
"garage-bAInd/Platypus2-70B-instruct",
compression="4bit"
)
或者:
compression="8bit"
官方表示这种基于 block-wise 权重量化的压缩主要用于减少磁盘加载量,从而提升推理速度。
AirLLM 和普通量化有什么区别?
传统量化通常会同时考虑:
权重
+
激活值
而 AirLLM 的主要瓶颈是:
磁盘 → GPU
因此它更关注权重体积。
官方解释也指出,AirLLM 的压缩主要是为了减少磁盘读取的数据量。
Kimi K3 需要特别注意
AirLLM 近期已经加入 Kimi K3 支持。
但是官方说明 Kimi K3 当前还额外要求:
compressed-tensors;flash-attn;- CUDA 12 构建的 PyTorch;
- Transformers 4.56.x。
尤其需要注意:
Transformers 5.x
当前可能无法加载 Kimi K3 的 remote code。
因此不要直接:
pip install -U transformers
升级到最新版。
部署 Kimi K3 前应该固定依赖版本。
检查 GPU
运行:
nvidia-smi
确认:
- GPU 型号;
- CUDA Driver;
- 显存;
- 当前使用量。
PyTorch 检查:
python - <<'PY'
import torch
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0))
print(torch.cuda.get_device_properties(0).total_memory / 1024**3)
PY
为什么 NVMe 很重要?
AirLLM 的工作流程不断执行:
读取模型层
↓
传输
↓
GPU 运算
因此 SATA SSD 和 NVMe 的体验可能差别很大。
如果准备长期使用 AirLLM,建议优先选择:
NVMe SSD
而不是单纯为了节省成本选择机械盘。
尤其是 70B、235B、405B 这类模型,模型文件很大,磁盘性能会直接影响推理速度。
常见磁盘报错
官方 FAQ 中有一个比较典型的错误:
MetadataIncompleteBuffer
很多情况下是因为:
磁盘空间不足
导致模型拆分过程中生成了不完整文件。
可以先检查:
df -h
Hugging Face 缓存:
du -sh ~/.cache/huggingface
如果模型放在数据盘:
du -sh /data/*
做成 API 是否合适?
可以自行使用:
- FastAPI;
- Flask;
- Gradio;
封装推理接口。
例如:
客户端
↓
FastAPI
↓
AirLLM
↓
GPU
但需要注意:
AirLLM 并不是以高并发推理为主要目标。
如果同时来了很多请求:
Request 1
Request 2
Request 3
Request 4
所有任务都会争抢:
- GPU;
- SSD;
- 内存;
- 模型层读取。
因此不建议把它直接当成高并发生产推理框架。
更适合什么用途?
AirLLM 更适合:
研究
实验
低成本验证
超大模型测试
而不是:
商业高并发 API
如果需要真正高吞吐在线推理,更应该考虑:
- vLLM;
- SGLang;
- TensorRT-LLM;
- 多 GPU Tensor Parallel。
但这些方案通常需要更多显存。
一个比较合理的部署结构
可以采用:
莱卡云 / 其他 GPU Server
│
├── Ubuntu
├── NVIDIA Driver
├── CUDA
├── Python venv
├── AirLLM
│
├── /data/models
├── /data/airllm
│
└── FastAPI
↓
Internal API
如果只是自己测试,可以完全不部署 Nginx。
通过:
ssh
直接运行 Python 即可。
日常监控
CPU:
htop
内存:
free -h
GPU:
watch -n 1 nvidia-smi
磁盘:
df -h
IO:
iostat -xz 1
如果没有 iostat:
apt install -y sysstat
对于 AirLLM 来说:
iostat
往往比单纯看 GPU 使用率更有参考价值。
部署建议
lyogavin/airllm 最大的特点并不是“让小显卡变成大显卡”,而是通过按层加载模型,把原本需要大量显存的问题转移到磁盘和数据搬运层面。
因此部署 AirLLM 时,不能只看 GPU 显存。
更值得关注:
GPU
+
系统内存
+
NVMe
+
磁盘容量
如果需要远程搭建实验环境,可以把莱卡云服务器作为候选方案之一,根据可提供的 GPU 型号、NVMe 空间和系统内存进行选择;已有其他 GPU 云平台或自己的显卡服务器也可以使用相同方案。
对于普通 7B、8B 模型,AirLLM 的意义并不一定很大;真正比较有意思的是显存明显装不下的 70B、235B、405B 等超大模型实验。
如果目标是研究和验证,可以优先保证大容量 NVMe 和合适的 GPU,再根据实际推理速度决定是否进一步升级硬件。相比盲目增加显存,理解 AirLLM 的“显存换磁盘 IO”机制更加重要。
更多推荐
所有评论(0)