Files
lyogavin--airllm/README.md
T
2026-07-13 10:36:47 +00:00

390 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- WEHUB_ZH_README -->
> [!NOTE]
> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
> [English](./README.en.md) · [原始项目](https://github.com/lyogavin/airllm) · [上游 README](https://github.com/lyogavin/airllm/blob/HEAD/README.md)
> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
![airllm_logo](https://github.com/lyogavin/airllm/blob/main/assets/airllm_logo_sm.png?v=3&raw=true)
[**快速开始**](#quickstart) |
[**配置项**](#configurations) |
[**MacOS**](#macos) |
[**示例笔记本**](#example-python-notebook) |
[**常见问题**](#faq)
**AirLLM** 可大幅降低推理内存占用,使 70B 大语言模型能在单张 4GB GPU 显卡上运行——无需量化、蒸馏或剪枝。你甚至可以在 **8GB** 上运行 **405B Llama 3.1**,在 **约 12GB** 上运行 **DeepSeek-V3671B**
<a href="https://github.com/lyogavin/airllm/stargazers">![GitHub Repo stars](https://img.shields.io/github/stars/lyogavin/airllm?style=social)</a>
[![Downloads](https://static.pepy.tech/personalized-badge/airllm?period=total&units=international_system&left_color=grey&right_color=blue&left_text=downloads)](https://pepy.tech/project/airllm)
[![Code License](https://img.shields.io/badge/Code%20License-Apache_2.0-green.svg)](https://github.com/LianjiaTech/BELLE/blob/main/LICENSE)
[![Generic badge](https://img.shields.io/badge/wechat-Anima-brightgreen?logo=wechat)](https://static.aicompose.cn/static/wecom_barcode.png?t=1671918938)
[![Discord](https://img.shields.io/discord/1175437549783760896?logo=discord&color=7289da
)](https://discord.gg/2xffU5sn)
[![PyPI - AirLLM](https://img.shields.io/pypi/format/airllm?logo=pypi&color=3571a3)
](https://pypi.org/project/airllm/)
[![Website](https://img.shields.io/website?up_message=blog&url=https%3A%2F%2Fmedium.com%2F%40lyo.gavin&logo=medium&color=black)](https://medium.com/@lyo.gavin)
[![Website](https://img.shields.io/badge/Gavin_Li-Blog-blue)](https://gavinliblog.com)
[![Support me on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dgavinli%26type%3Dpatrons&style=flat)](https://patreon.com/gavinli)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/lyogavin?logo=GitHub&color=lightgray)](https://github.com/sponsors/lyogavin)
## AI 智能体推荐:
* [最佳 AI 游戏精灵生成器](https://godmodeai.co)
* [最佳 AI 面部表情编辑器](https://crazyfaceai.com)
* [Bloome — 在云端构建并运行 AI 智能体团队,零配置](https://bloome.im/login?ref=G6BYnov0)
## 更新日志
[2026/06] **v3.0**:支持 FP8 模型 + 最新模型。在 **约 12GB** 上运行 **DeepSeek-V3671B**,在 **约 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 单卡 GPU 上运行 Llama3 70B。
[2023/12/25] v2.8.2:支持在 MacOS 上运行 70B 大语言模型。
[2023/12/20] v2.7:支持 AirLLMMixtral。
[2023/12/20] v2.6:新增 AutoModel,自动检测模型类型,初始化模型时无需再提供模型类。
[2023/12/18] v2.5:加入预取(prefetching)以重叠模型加载与计算。速度提升 10%。
[2023/12/03] 新增对 **ChatGLM**、**QWen**、**Baichuan**、**Mistral**、**InternLM** 的支持!
[2023/12/02] 新增对 safetensors 的支持。现已支持 open llm leaderboard 上全部前 10 名模型。
[2023/12/01] airllm 2.0。支持压缩:**运行时加速 3 倍!**
[2023/11/20] airllm 初始版本!
## Star 历史
<a href="https://star-history.com/#lyogavin/airllm&Timeline">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/star-history-dark.png">
<img alt="Star 历史图表" src="assets/star-history.png">
</picture>
</a>
## 目录
* [快速开始](#quickstart)
* [模型压缩](#model-compression---3x-inference-speed-up)
* [配置项](#configurations)
* [在 MacOS 上运行](#macos)
* [示例笔记本](#example-python-notebook)
* [支持的模型](#supported-models)
* [致谢](#acknowledgement)
* [常见问题](#faq)
## 快速开始
### 1. 安装包
首先,安装 airllm 的 pip 包。
```bash
pip install airllm
```
### 2. 推理
然后,初始化 AirLLMLlama2,传入所用模型的 huggingface 仓库 ID 或本地路径,即可像常规 transformer 模型一样进行推理。
*你也可以在初始化 AirLLMLlama2 时通过 **layer_shards_saving_path** 指定保存按层切分后模型的路径。*
```python
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-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 倍!
我们刚刚加入了基于块级量化(block-wise quantization)的模型压缩。可将**推理速度**进一步提升至最高 **3 倍**,且**精度损失几乎可忽略!**(更多性能评估以及我们为何使用块级量化,请参阅[本文](https://arxiv.org/abs/2212.09720))
![speed_improvement](https://github.com/lyogavin/airllm/blob/main/assets/airllm2_time_improvement.png?v=2&raw=true)
#### 如何启用模型压缩加速:
* 步骤 1. 确保已安装 [bitsandbytes](https://github.com/TimDettmers/bitsandbytes),通过 `pip install -U bitsandbytes `
* 步骤 2. 确保 airllm 版本高于 2.0.0`pip install -U airllm`
* 步骤 3. 初始化模型时传入 compression 参数('4bit' 或 '8bit'):
```python
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**:若下载如 *meta-llama/Llama-2-7b-hf* 等受限模型,可在此提供 huggingface token
* **prefetching**:预取以重叠模型加载与计算。默认开启。目前仅 AirLLMLlama2 支持此功能。
* **delete_original**:若磁盘空间不足,可将 delete_original 设为 true 以删除原始下载的 hugging face 模型,仅保留转换后的模型,从而节省一半磁盘空间。
## MacOS
只需安装 airllm,并像在 Linux 上一样运行代码。详见 [快速开始](#quickstart)。
* 请确保已安装 [mlx](https://github.com/ml-explore/mlx?tab=readme-ov-file#installation) 和 torch
* 你可能需要安装原生 Python,详见 [此处](https://stackoverflow.com/a/65432861/21230266)
* 仅支持 [Apple silicon](https://support.apple.com/en-us/HT211814)
示例 [python notebook] (https://github.com/lyogavin/airllm/blob/main/air_llm/examples/run_on_macos.ipynb)
## Example Python Notebook
示例 Colab 如下:
<a target="_blank" href="https://colab.research.google.com/github/lyogavin/airllm/blob/main/air_llm/examples/run_all_types_of_models.ipynb">
<img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/>
</a>
#### 其他模型示例(ChatGLM、QWen、Baichuan、Mistral 等):
<details>
* ChatGLM
```python
from airllm import AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("THUDM/chatglm3-6b-base")
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=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
```python
from airllm import AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("Qwen/Qwen-7B")
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=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])
```
* Baichuan、InternLM、Mistral 等:
```python
from airllm import 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 = ['What is the capital of China?',]
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])
```
</details>
#### 申请支持其他模型:[此处](https://docs.google.com/forms/d/e/1FAIpQLSe0Io9ANMT964Zi-OQOq1TJmnvP-G3_ZgQDhP7SatN0IEdbOg/viewform?usp=sf_link)
## Supported Models
AirLLM 开箱即用,可支持**几乎所有主流开源 LLM**——只需将其 Hugging Face ID 传给 `AutoModel.from_pretrained(...)`。这覆盖了所有主要模型家族:
**Llama**2 / 3 / 3.1 / 3.3 / 4)· **Qwen**1 / 2 / 2.5 / 3,含 MoE 与 FP8)· **DeepSeek**V2 / V3 / R1)· **Mistral & Mixtral** · **Phi** · **Gemma** · **ChatGLM** · **Baichuan** · **InternLM** · **Yi**——以及大多数新模型在发布当天即可使用。
### 小显存,大模型
关键在于:AirLLM 始终**一次只在 GPU 上保留一层**,因此所需 VRAM 取决于模型的单层大小,而非模型总大小。这就是 671B 模型能在业余级显卡上运行的原因:
| Model | Size | GPU VRAM |
|---|---|---|
| Qwen3 / Mistral / Phi (≈8B) | 8B | **~12 GB** |
| Qwen3-30B / Mixtral (MoE) | 3047B | **~13 GB** |
| Qwen3-235B (MoE) | 235B | **~3 GB** |
| Llama 3.x 70B (full precision) | 70B | **~4 GB** |
| Llama 3.1 405B | 405B | **~8 GB** |
| DeepSeek-V3 | **671B** | **~12 GB** |
以上模型均使用同一行代码——无需特殊配置。
## Acknowledgement
大量代码基于 SimJeg 在 Kaggle 考试竞赛中的出色工作。向 SimJeg 致以诚挚感谢:
[GitHub 账号 @SimJeg](https://github.com/SimJeg),
[Kaggle 上的代码](https://www.kaggle.com/code/simjeg/platypus2-70b-with-wikipedia-rag),
[相关讨论](https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446414).
## FAQ
### 1. MetadataIncompleteBuffer
safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer
若遇到此错误,最可能的原因是磁盘空间不足。拆分模型的过程非常消耗磁盘空间。参见 [此说明](https://huggingface.co/TheBloke/guanaco-65B-GPTQ/discussions/12). 你可能需要扩容磁盘、清理 huggingface [.cache](https://huggingface.co/docs/datasets/cache) 后重新运行。
### 2. ValueError: max() arg is an empty sequence
很可能是你用 Llama2 类加载了 QWen 或 ChatGLM 模型。请尝试以下方式:
对于 QWen 模型:
```python
from airllm import AutoModel #<----- instead of AirLLMLlama2
AutoModel.from_pretrained(...)
```
对于 ChatGLM 模型:
```python
from airllm import AutoModel #<----- instead of AirLLMLlama2
AutoModel.from_pretrained(...)
```
### 3. 401 Client Error....Repo model ... is gated.
部分模型为受限(gated)模型,需要 huggingface api token。你可以提供 hf_token
```python
model = AutoModel.from_pretrained("meta-llama/Llama-2-7b-hf", #hf_token='HF_API_TOKEN')
```
### 4. ValueError: Asking to pad but the tokenizer does not have a padding token.
部分模型的 tokenizer 没有 padding token,因此你可以设置 padding token,或直接关闭 padding 配置:
```python
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH,
padding=False #<----------- turn off padding
)
```
## Citing AirLLM
If you find
AirLLM useful in your research and wish to cite it, please use the following
BibTex entry:
```
@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},
}
```
## Sponsors
<a href="https://bloome.im/login?ref=G6BYnov0">
<img src="https://github.com/lyogavin/airllm/blob/main/assets/bloome.png?raw=true" alt="Bloome — Run AI Agent Teams in the Cloud" width="50%" />
</a>
### 在云端运行 AI Agent 团队 — Bloome
Bloome 是一个 AI agent IM 平台:无需配置,即可在云端构建并运行 AI agent 团队。在群聊中将 skill 添加为 agent,从网页或移动端一键运行,并与团队共享——可以把它理解为一个群聊,你的 AI 助手就是队友,可以 @mention 并分配任务。
👉 试用 Bloomehttps://bloome.im/login?ref=G6BYnov0
## Contribution
欢迎贡献、想法与讨论!
如果觉得有用,请给个 ⭐ 或请我喝杯咖啡!🙏
[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://bmc.link/lyogavinQ)