AirLLM 是什麼?
AirLLM 是一個開源 Python 函式庫,核心解決一個看似不可能的任務:用 4GB 顯示記憶體的 GPU 執行 70B 參數的大型語言模型。
通常一個 70B 模型在 FP16 精度下需要約 140GB 顯示記憶體,至少需要 2 塊 A100(80GB)才能載入。AirLLM 透過逐層推理(Layer-wise Inference)技術,每次只在 GPU 上載入一層模型,計算完成後卸載,再載入下一層。這樣顯示記憶體佔用從 140GB 驟降到 4GB 以下。
截至 2026 年 7 月,AirLLM 已在 GitHub 獲得 23,000+ Stars,PyPI 下載量持續增長,是目前最熱門的大模型本機推理工具之一。
核心優勢
| 特性 | 傳統方案 | AirLLM |
|---|---|---|
| 70B 模型顯示記憶體需求 | ~140GB (2× A100 80GB) | ~4GB |
| 671B (DeepSeek-V3) | ~1.3TB (多卡叢集) | ~12GB |
| 量化/蒸餾 | 需要,損失精度 | 不需要(可選) |
| 硬體門檻 | 資料中心級 GPU | 消費級顯示卡即可 |
| 安裝複雜度 | 複雜(CUDA、多卡設定) | pip install airllm 一行搞定 |
技術原理:逐層推理
傳統推理: [Layer 1] → [Layer 2] → ... → [Layer 80] ← 全部載入到 GPU
需要 ~140GB 顯示記憶體
AirLLM: [Layer 1] ← 載入到 GPU → 計算 → 儲存到 CPU → 釋放
[Layer 2] ← 載入到 GPU → 計算 → 儲存到 CPU → 釋放
...
[Layer 80] ← 載入到 GPU → 計算 → 輸出結果
只需 ~4GB 顯示記憶體(單層大小)
關鍵思路:大模型的推理是串行的,第 N 層的輸出是第 N+1 層的輸入。AirLLM 利用這一點,每次只在 GPU 上放一層,計算完就把中間結果存回 CPU 記憶體,然後釋放顯示記憶體載入下一層。
💡 代價是什麼? 速度。因為每層都要在 GPU 和 CPU 之間來回傳輸資料,推理速度會比全卡載入慢。但對個人開發者來說,能跑起來比跑得快更重要。
安裝與環境準備
基礎安裝
# 建立虛擬環境(推薦)
python -m venv airllm-env
source airllm-env/bin/activate
# 安裝 airllm
pip install airllm
# 如果需要使用量化加速,安裝 bitsandbytes
pip install -U bitsandbytes
系統需求
- GPU 推理:NVIDIA GPU,4GB+ 顯示記憶體,CUDA 支援
- CPU 推理:任意 x86_64 CPU(2024 年 8 月起支援)
- macOS:Apple Silicon (M1/M2/M3),需安裝
mlx框架 - 磁碟空間:首次執行時會下載模型(70B 約 130GB),需要足夠的儲存空間
- 記憶體:建議 16GB+ 系統記憶體(用於快取中間結果)
驗證安裝
from airllm import AutoModel
print("AirLLM 安裝成功!")
快速上手:5 分鐘跑起來
第一個 Hello World
from airllm import AutoModel
MAX_LENGTH = 128
# 一行程式碼載入模型(自動下載 + 分層處理)
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# 準備輸入
input_text = ["What is the capital of France?"]
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=50,
use_cache=True,
return_dict_in_generate=True
)
# 解碼輸出
output = model.tokenizer.decode(generation_output.sequences[0])
print(output)
輸出範例:
What is the capital of France? The capital of France is Paris.
就這麼簡單。不需要手動設定多卡、不需要寫顯示記憶體優化程式碼、不需要量化,AirLLM 的 AutoModel 自動處理一切。
支援的主流模型
AirLLM 透過 AutoModel 自動偵測模型類型,支援幾乎所有主流開源大模型:
| 模型系列 | 範例 | 最低顯示記憶體 |
|---|---|---|
| Qwen3 | Qwen3-32B / Qwen3-235B | ~3GB |
| DeepSeek | DeepSeek-V3 (671B) | ~12GB |
| Llama | Llama 3.1 405B / Llama 3 70B | ~8GB / ~4GB |
| Mistral | Mixtral 8x7B | ~4GB |
| ChatGLM | ChatGLM3-6B | ~4GB |
| Phi | Phi-4 | ~4GB |
| Gemma | Gemma 2B/7B | ~4GB |
| Baichuan | Baichuan2-7B | ~4GB |
進階功能
1. 4-bit / 8-bit 量化加速
AirLLM 內建基於塊級量化(block-wise quantization)的模型壓縮,可帶來最高 3 倍推理速度提升,精度損失極小。
from airllm import AutoModel
# 4-bit 量化(速度最快,顯示記憶體最小)
model = AutoModel.from_pretrained(
"Qwen/Qwen3-32B",
compression='4bit' # 或 '8bit'
)
為什麼 AirLLM 的量化精度損失很小?因為傳統量化需要同時量化權重和啟用值(activations)來加速計算,而 AirLLM 的瓶頸在 磁碟 I/O(從磁碟載入模型層),所以只需要量化權重部分,這更容易保證精度。
2. 預取優化(Prefetching)
預取功能可以在 GPU 計算目前層的同時,提前從磁碟載入下一層到記憶體,實現計算與 I/O 重疊,帶來約 10% 的速度提升。
from airllm import AutoModel
# 預設預取開啟(AirLLMLlama2 支援)
model = AutoModel.from_pretrained(
"meta-llama/Llama-2-70b-hf",
hf_token="your_huggingface_token", # 需要 HuggingFace token 存取 gated model
)
3. 設定選項大全
model = AutoModel.from_pretrained(
"model_name_or_path",
# 量化:'4bit' / '8bit' / None
compression='4bit',
# 效能分析:輸出各階段耗時
profiling_mode=True,
# 分層模型儲存路徑(可選)
layer_shards_saving_path='/data/airllm_cache/',
# HuggingFace token(存取受限模型時必需)
hf_token="hf_xxxx",
# 預取(預設開啟)
prefetching=True,
# 轉換後刪除原始模型檔案(節省磁碟空間)
delete_original=True,
)
4. 多輪對話範例
from airllm import AutoModel
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
def chat_with_model(prompt, history=None):
"""簡單的單輪對話"""
if history:
full_prompt = history + "\nUser: " + prompt + "\nAssistant: "
else:
full_prompt = f"User: {prompt}\nAssistant: "
input_tokens = model.tokenizer(
[full_prompt],
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=512,
padding=False
)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=256,
use_cache=True,
return_dict_in_generate=True,
temperature=0.7,
top_p=0.9,
)
response = model.tokenizer.decode(generation_output.sequences[0])
# 提取 Assistant 部分
if "Assistant:" in response:
response = response.split("Assistant:")[-1].strip()
return response
# 測試
print(chat_with_model("用三句話解釋量子計算"))
print(chat_with_model("Python 中最優雅的排序方式是什麼?"))
實戰場景
場景一:本機私有知識庫問答
結合 embedding 模型,在本機搭建完整的 RAG(檢索增強生成)系統:
from airllm import AutoModel
# 配合 LangChain 使用
from langchain.llms import HuggingFacePipeline
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
# 載入 AirLLM 模型作為 LLM 後端
model = AutoModel.from_pretrained("Qwen/Qwen3-32B", compression='4bit')
# 搭配本機向量資料庫(如 FAISS)
# 實現完全離線的檔案問答、程式碼檢索等
場景二:嵌入式裝置部署
樹莓派 5 + USB AI 加速棒,或 Jetson Nano 等邊緣裝置:
# 在邊緣裝置上
pip install airllm
# CPU 推理模式,無需 GPU
from airllm import AutoModel
# 在 CPU 上執行小模型
model = AutoModel.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
# 可用於 IoT 裝置的本機 AI 推理
# 智慧家居語音控制、工業檢測等
場景三:MacBook 本機推理
Apple Silicon 使用者可直接執行大模型:
# macOS 上需要安裝 mlx
# pip install mlx
from airllm import AutoModel
# 在 M1/M2/M3 MacBook 上執行
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# 利用統一記憶體架構,體驗接近原生的推理速度
AirLLM vs 其他本機推理方案
| 方案 | 原理 | 最低顯示記憶體 | 速度 | 精度 | 易用性 |
|---|---|---|---|---|---|
| AirLLM | 逐層載入 | 4GB | 較慢 | ✅ 無損 | ⭐⭐⭐⭐⭐ |
| llama.cpp | GGUF 量化 | 4GB | 快 | 量化有損 | ⭐⭐⭐⭐ |
| vLLM | PagedAttention | 80GB+ | 極快 | ✅ 無損 | ⭐⭐⭐ |
| Ollama | GGUF 封裝 | 4GB | 快 | 量化有損 | ⭐⭐⭐⭐⭐ |
| ExLlamaV2 | 4-bit GPTQ | 24GB+ | 極快 | 量化有損 | ⭐⭐⭐ |
選型建議: - 顯示記憶體 < 8GB:AirLLM(無損)或 llama.cpp/Ollama(量化有損) - 顯示記憶體 8-24GB:AirLLM + 4bit 量化,或 ExLlamaV2 - 多卡 / 資料中心:vLLM(生產級服務) - 追求簡單易用:Ollama(一鍵啟動)或 AirLLM(pip 一行)
效能測試參考
以下為社群實測資料(因硬體和模型版本不同,僅供參考):
| 模型 | 硬體 | tokens/sec | 說明 |
|---|---|---|---|
| Llama-3-8B | RTX 3060 12GB | ~8-12 | 4-bit 量化 |
| Llama-3-70B | RTX 3060 12GB | ~1-2 | 4-bit 量化 |
| Qwen3-32B | GTX 1650 4GB | ~1-2 | 無量化 |
| DeepSeek-V3 671B | RTX 4090 24GB | ~0.3 | ~12GB 顯示記憶體 |
⚠️ 注意:AirLLM 的推理速度確實比全卡載入慢(通常 1-3 tokens/sec),但它的價值在於讓普通硬體也能跑大模型,適合開發除錯、本機實驗、離線推理等場景。
常見問題
Q: AirLLM 能用來訓練模型嗎?
不能。 AirLLM 僅用於推理(inference),不支援訓練或微調。如果需要微調,可以使用 LoRA/QLoRA 等方案。
Q: 為什麼我執行時速度很慢?
這是 AirLLM 逐層載入機制的正常現象。提升方法:
1. 使用 4-bit 量化(compression='4bit')
2. 啟用預取(prefetching=True,預設已開啟)
3. 使用 SSD 儲存模型檔案(減少磁碟 I/O 延遲)
Q: 第一次載入為什麼很久?
首次執行時,AirLLM 會下載模型並將模型逐層拆分儲存到快取目錄。70B 模型下載約 130GB,拆分也需要時間。第二次執行會直接使用快取,速度會快很多。
Q: 磁碟空間不夠怎麼辦?
# 設定 delete_original=True,拆分後刪除原始 HuggingFace 模型
model = AutoModel.from_pretrained(
"Qwen/Qwen3-32B",
delete_original=True # 節省約 50% 磁碟空間
)
總結
AirLLM 的核心價值可以用一句話概括:讓每個開發者都能在自己的電腦上跑大模型。
| 維度 | 評價 |
|---|---|
| 🎯 核心亮點 | 4GB 顯示記憶體跑 70B,無需量化 |
| 📦 安裝難度 | pip install,零設定 |
| 🧪 模型支援 | 主流開源模型全覆蓋 |
| ⚡ 推理速度 | 較慢(1-3 tok/s),但能跑起來 |
| 🔧 適用場景 | 開發除錯、本機實驗、邊緣部署 |
| 📄 開源授權 | Apache 2.0 / BELLE License |
下一步: - GitHub 儲存庫 — Star 23K+,持續活躍維護 - HuggingFace 部落格 — 技術深度解讀 - Colab 範例 — 免費線上試用
如果你覺得這篇文章有幫助,歡迎分享給更多開發者!