概要
AirLLM は推論時のメモリ使用量を最適化し、70B などの大規模言語モデルを単一の 4GB GPU 上で実行可能にします。量子化、蒸留、プルーニングは不要です。Llama 3.1 405B の 8GB VRAM へのデプロイをサポートし、ブロック単位の量子化による高速化も提供します。
README プレビュー
\n\n[**Quickstart**](#quickstart) | \n[**Configurations**](#configurations) | \n[**MacOS**](#macos) | \n[**Example notebooks**](#example-python-notebook) | \n[**FAQ**](#faq)\n\n**AirLLM** optimizes inference memory usage, allowing 70B large language models to run inference on a single 4GB GPU card without quantization, distillation and pruning. And you can run **405B Llama3.1** on **8GB vram** now.\n\n\n[](https://pepy.tech/project/airllm)\n\n[](https://github.com/LianjiaTech/BELLE/blob/main/LICENSE)\n[](https://static.aicompose.cn/static/wecom_barcode.png?t=1671918938)\n[](https://discord.gg/2xffU5sn)\n[\n](https://pypi.org/project/airllm/)\n[](https://medium.com/@lyo.gavin)\n[](https://gavinliblog.com)\n[](https://patreon.com/gavinli)\n[](https://github.com/sponsors/lyogavin)\n\n## AI Agents Recommendation:\n\n* [Best AI Game Sprite Generator](https://godmodeai.co)\n\n* [Best AI Facial Expression Editor](https://crazyfaceai.com)\n\n## Updates\n[2024/08/20] v2.11.0: Support Qwen2.5\n\n[2024/08/18] v2.10.1 Support CPU inference. Support non sharded models. Thanks @NavodPeiris for the great work! \n\n[2024/07/30] Support Llama3.1 **405B** ([example notebook](https://colab.research.google.com/github/lyogavin/airllm/blob/main/air_llm/examples/run_llama3.1_405B.ipynb)). Support **8bit/4bit quantization**.\n\n[2024/04/20] AirLLM supports Llama3 natively already. Run Llama3 70B on 4GB single GPU.\n\n[2023/12/25] v2.8.2: Support MacOS running 70B large language models.\n\n[2023/12/20] v2.7: Support AirLLMMixtral. \n\n[2023/12/20] v2.6: Added AutoModel, automatically detect model type, no need to provide model class to initialize model.\n\n[2023/12/18] v2.5: added prefetching to overlap the model loading and compute. 10% speed improvement.\n\n[2023/12/03] added support of **ChatGLM**, **QWen**, **Baichuan**, **Mistral**, **InternLM**!\n\n[2023/12/02] added support for safetensors. Now support all top 10 models in open llm leaderboard.\n\n[2023/12/01] airllm 2.0. Support com
FAQ (4)
トラブル対応Mac上でairllmを使ってllamaモデルを実行する際に'ValueError: Cannot index mlx array using the given type'を修正する方法は?
このエラーは、Apple Silicon上でMLXバックエンドと共にairllmを使用する際に発生します。モデルはMLX配列を期待しているのに、入力トークンIDがPyTorchテンソルとして提供されているためです。修正するには、入力トークンを変換します:input_tokens['input_ids'].cuda() の代わりに import mlx.core as mx; generation_output = model.generate(mx.array(input_tokens['input_ids'])) とします。これにより、MLXの埋め込みレイヤーとの互換性が確保されます。この問題は、airllm v2.9.1、Python 3.12.4、mlxバージョン14.1~16.1、およびM1 Pro上のmacOS 14.5で報告されました。
informationalAirLLMはLlama3 70Bをネイティブにサポートしていますか?
AirLLMはすでにLlama3 70Bをネイティブにサポートしています。これは、Llama3にはAirLLMの既存のLlama実装に調整を必要とするアーキテクチャ上の変更がないためです。AirLLMでLlama3 70Bを実行するために、追加の機能開発は必要ありません。
トラブル対応macOSでtransformers/airllmを使ってモデルを読み込む際に「ModuleNotFoundError: Could not import module 'LlamaForCausalLM'」というエラーを修正するにはどうすればよいですか?
このエラーは誤解を招くものです。Llamaモジュールが見つからないのではなく、破損した torchvision のインストールによって引き起こされる、隠蔽されたインポートエラーです。トレースバックにある実際のエラーは RuntimeError: operator torchvision::nms does not exist で、これは torch と torchvision のバージョンがバイナリレベルで非互換の場合に発生します(Python 3.13 / Apple Silicon でよく見られます)。Transformersの遅延ローダーが image_utils → torchvision をトリガーし、そのクラッシュが紛らわしいModuleNotFoundErrorとして表面化します。
テキストのみのLLM(Qwen、Llamaなど)での修正方法 — torchvisionを完全に削除します:
uv pip uninstall torchvision
# または: pip uninstall -y torchvisiontorchvisionがなければ、transformersはビジョンのインポートパスをスキップし、
LlamaForCausalLM は正常にロードされます。
ビジョンサポートが必要な場合は、代わりに一致するバージョンを再インストールしてください:
uv pip install -U --force-reinstall torch torchvision両方のパッケージが同じリリースチャネルからインストールされていることを確認してください(例:torch 2.5.x には torchvision 0.20.x)。
python -c "import torchvision; print(torchvision.__version__)" で確認できます。
macOSユーザーへの注意:Apple SiliconではCUDAが利用できないため、.cuda() を .to('mps') に置き換えるか、CPU上で実行してください。
トラブル対応macOS Apple SiliconでAirLLMの「Cannot index mlx array using the given type」エラーを修正する方法
AirLLM の MLX バックエンド(AirLLMLlamaMlx.generate())は mlx.array のインデックスしか受け付けませんが、return_tensors="pt" を指定した HuggingFace トークナイザーは torch.LongTensor を返すため、mlx.nn.Embedding がクラッシュします。AutoModel がすべてを MLX クラス経由でルーティングするため、macOS 上のすべてのアーキテクチャ(Llama、Qwen、Mistral、Mixtral、GLM、Baichuan)がこの影響を受けます。回避策 — generate() を呼び出す前にトークン ID を mlx 配列に変換します:
import mlx.core as mx
from airllm import AutoModel
model = AutoModel.from_pretrained("Qwen/Qwen2.5-7B-Instruct", compression=None)
tokens = model.tokenizer(["Hello world"], return_tensors="pt").input_ids
input_ids = mx.array(tokens.detach().cpu().numpy()) # torch -> numpy -> mlx
model.generate(input_ids, max_new_tokens=8)
あるいは、return_tensors="np" でトークナイズし、mx.array(...) でラップすることもできます。恒久修正(generate() の境界で torch/numpy/mlx の入力を処理する内部ヘルパー _coerce_to_mlx_array())が PR として提案されていますが、マージされるまでは手動での変換が必要です。