AirLLM とは?

AirLLM は、一見不可能に思えるタスクを解決するオープンソースの Python ライブラリです:4GB の VRAM しかない GPU で 70B パラメータの大規模言語モデルを動かすこと。

通常、FP16 精度の 70B モデルには約 140GB の VRAM が必要で、少なくとも 2 枚の A100(80GB)がなければメモリに収まりません。AirLLM はレイヤーごとの推論(Layer-wise Inference)技術により、モデルを一度に 1 レヤーずつ GPU に読み込み、計算が終わったらアンロードして次のレイヤーを読み込みます。こうすることで、VRAM 使用量は 140GB から4GB 以下に劇的に下がります。

2026 年 7 月時点で、AirLLM は GitHub で 23,000+ Stars を獲得しており、PyPI のダウンロード数も伸び続けています。ローカル大モデル推論ツールの中で最もホットなツールの一つです。

主なメリット

特徴 従来の方法 AirLLM
70B モデルの VRAM 必要量 ~140GB(2× A100 80GB) ~4GB
671B(DeepSeek-V3) ~1.3TB(マルチ GPU クラスタ) ~12GB
量子化/蒸留 必須、精度が低下 不要(オプション可)
ハードウェアの敷居 データセンター向け GPU コンシューマー向け GPU で十分
インストールの手間 複雑(CUDA、マルチ GPU 設定) pip install airllm の一行で完了

技術の仕組み:レイヤーごとの推論

従来の推論:  [Layer 1] → [Layer 2] → ... → [Layer 80]   ← すべて GPU に読み込む
              ~140GB の VRAM が必要

AirLLM:       [Layer 1] ← GPU に読み込み → 計算 → CPU に保存 → 解放
               [Layer 2] ← GPU に読み込み → 計算 → CPU に保存 → 解放
               ...
               [Layer 80] ← GPU に読み込み → 結果を出力
               ~4GB の VRAM だけで OK(1 レイヤー分)

重要な発想はこうです:大規模モデルの推論は逐次処理なので、第 N 層の出力が第 N+1 層の入力になります。AirLLM はこの性質を利用し、GPU 上に一度に 1 レイヤーだけを配置し、計算が終わったら中間結果を CPU メモリに戻し、VRAM を解放してから次のレイヤーを読み込みます。

💡 代償は? スピードです。レイヤーごとに GPU と CPU の間でデータをやり取りするため、推論速度はフルロードより遅くなります。でも個人開発者にとって、速く動くことよりまず動くことが大事ですよね。


インストールと環境準備

基本的なインストール

BASH
# 仮想環境の作成(推奨)
python -m venv airllm-env
source airllm-env/bin/activate

# airllm をインストール
pip install airllm

# 量子化による高速化を使いたい場合は bitsandbytes も入れる
pip install -U bitsandbytes

システム要件

  • GPU 推論:NVIDIA GPU、4GB 以上の VRAM、CUDA サポートあり
  • CPU 推論:任意の x86_64 CPU(2024 年 8 月からサポート)
  • macOS:Apple Silicon(M1/M2/M3)、mlx フレームワークのインストールが必要
  • ディスク容量:初回実行時にモデルがダウンロードされます(70B で約 130GB)。十分なストレージを確保してください
  • メモリ:16GB 以上のシステムメモリを推奨(中間結果のキャッシュ用)

インストール確認

PYTHON
from airllm import AutoModel
print("AirLLM のインストールに成功しました!")

クイックスタート:5 分で動かす

初めての Hello World

PYTHON
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.

これだけです。マルチ GPU の手動設定不要、VRAM 最適化のコード不要、量子化も不要。AirLLM の AutoModel がすべて自動でやってくれます。

サポートされている主なモデル

AirLLM の AutoModel がモデルの種類を自動検出し、ほぼすべての主要なオープンソース大規模モデルをサポートしています:

モデルシリーズ 例 最低 VRAM
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 倍の推論速度向上をもたらします。精度の低下はごくわずかです。

PYTHON
from airllm import AutoModel

# 4-bit 量子化(最速・最小 VRAM)
model = AutoModel.from_pretrained(
    "Qwen/Qwen3-32B",
    compression='4bit'  # または '8bit'
)

なぜ AirLLM の量子化では精度がほとんど落ちないのでしょうか?従来の量子化は計算高速化のために重みとアクティベーションの両方を量子化する必要がありますが、AirLLM のボトルネックはディスク I/O(モデルレイヤーのディスクからの読み込み)にあるため、重みだけを量子化すればよく、精度を保ちやすいのです。

2. プリフェッチ最適化(Prefetching)

プリフェッチ機能は、GPU が現在のレイヤーを計算している間に、次のレイヤーを事前にメモリに読み込んでおくことで、計算と I/O をオーバーラップさせ、約10% の速度向上を実現します。

PYTHON
from airllm import AutoModel

# プリフェッチはデフォルトで有効(AirLLMLlama2 対応)
model = AutoModel.from_pretrained(
    "meta-llama/Llama-2-70b-hf",
    hf_token="your_huggingface_token",  # ゲーテッドモデルへのアクセスに HuggingFace トークンが必要
)

3. 設定オプション一覧

PYTHON
model = AutoModel.from_pretrained(
    "model_name_or_path",

    # 量子化:'4bit' / '8bit' / None
    compression='4bit',

    # プロファイリング:各フェーズの時間を出力
    profiling_mode=True,

    # レイヤー分割モデルの保存パス(任意)
    layer_shards_saving_path='/data/airllm_cache/',

    # HuggingFace トークン(制限付きモデルへのアクセスに必須)
    hf_token="hf_xxxx",

    # プリフェッチ(デフォルトで有効)
    prefetching=True,

    # 変換後に元のモデルファイルを削除(ディスク容量の節約)
    delete_original=True,
)

4. マルチターン会話の例

PYTHON
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("量子コンピュータを3文で説明して"))
print(chat_with_model("Python で最もエレガントなソート方法は?"))

実戦シナリオ

シナリオ一:ローカルプライベートナレッジベース Q&A

embedding モデルと組み合わせ、ローカルに完全な RAG(検索拡張生成)システムを構築:

PYTHON
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 など)と組み合わせ
# オフラインでのドキュメント Q&A、コード検索などを実現

シナリオ二:エッジデバイスへのデプロイ

Raspberry Pi 5 + USB AI アクセラレータ、または Jetson Nano などのエッジデバイス:

BASH
# エッジデバイス上で
pip install airllm
# CPU 推論モード、GPU 不要
PYTHON
from airllm import AutoModel

# CPU で小規模モデルを実行
model = AutoModel.from_pretrained("microsoft/Phi-3-mini-4k-instruct")

# IoT デバイスのローカル AI 推論に利用可能
# スマートホームの音声コントロール、工業検査など

シナリオ三:MacBook でのローカル推論

Apple Silicon ユーザーなら、大規模モデルをそのまま実行できます:

PYTHON
# macOS では mlx のインストールが必要
# pip install mlx

from airllm import AutoModel

# M1/M2/M3 MacBook で実行
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")

# ユニファイドメモリアーキテクチャを活用し、ネイティブに近い推論速度を体験

AirLLM vs 他のローカル推論ツール

ツール 仕組み 最低 VRAM 速度 精度 使いやすさ
AirLLM レイヤーごとの読み込み 4GB やや遅い ✅ 無損失 ⭐⭐⭐⭐⭐
llama.cpp GGUF 量子化 4GB 速い 量子化で一部損失 ⭐⭐⭐⭐
vLLM PagedAttention 80GB+ 非常に速い ✅ 無損失 ⭐⭐⭐
Ollama GGUF ラッパー 4GB 速い 量子化で一部損失 ⭐⭐⭐⭐⭐
ExLlamaV2 4-bit GPTQ 24GB+ 非常に速い 量子化で一部損失 ⭐⭐⭐

選び方のアドバイス: - VRAM < 8GB:AirLLM(無損失)または llama.cpp/Ollama(量子化で一部損失) - VRAM 8-24GB:AirLLM + 4-bit 量子化、または ExLlamaV2 - マルチ GPU / データセンター:vLLM(本番レベルのサービス) - 簡単さを追求:Ollama(ワンクリック起動)または AirLLM(pip の一行)


パフォーマンステスト参考

以下はコミュニティの実測データです(ハードウェアやモデルバージョンにより異なるので参考程度に):

モデル ハードウェア tokens/秒 備考
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 VRAM

⚠️ 注意:AirLLM の推論速度は確かにフルロードより遅いです(通常 1〜3 tokens/秒)。でもその価値は、普通のハードウェアでも大規模モデルを動かせるという点にあります。開発デバッグ、ローカル実験、オフライン推論などのシナリオに最適です。


よくある質問

Q: AirLLM でモデルのトレーニングはできますか?

できません。 AirLLM は推論(inference)専用で、トレーニングやファインチューニングはサポートしていません。ファインチューニングが必要な場合は、LoRA/QLoRA などの方法をご利用ください。

Q: なぜ実行速度が遅いのですか?

これは AirLLM のレイヤーごと読み込みメカニズムの正常な挙動です。改善方法: 1. 4-bit 量子化を使う(compression='4bit') 2. プリフェッチを有効にする(prefetching=True、デフォルトで有効) 3. モデルファイルを SSD に保存する(ディスク I/O 遅延を削減)

Q: なぜ初回の読み込みに時間がかかるのですか?

初回実行時、AirLLM はモデルをダウンロードし、レイヤーごとに分割してキャッシュディレクトリに保存します。70B モデルのダウンロードは約 130GB、分割にも時間がかかります。2 回目以降はキャッシュを直接使用するので、かなり速くなります。

Q: ディスク容量が足りない場合は?

PYTHON
# delete_original=True で、分割後に元の HuggingFace モデルを削除
model = AutoModel.from_pretrained(
    "Qwen/Qwen3-32B",
    delete_original=True  # 約 50% のディスク容量を節約
)

まとめ

AirLLM のコアバリューは一言で言い表せます:どの開発者にも、自分のパソコンで大規模モデルを動かせる力を。

項目 評価
🎯 コアの亮点 4GB VRAM で 70B を動作、量子化不要
📦 インストールの手間 pip install、設定ゼロ
🧪 モデルサポート 主要オープンソースモデルを幅広くカバー
⚡ 推論速度 やや遅い(1-3 tok/s)、でも動く
🔧 適用シナリオ 開発デバッグ、ローカル実験、エッジデプロイ
📄 オープンソースライセンス Apache 2.0 / BELLE License

次のステップ: - GitHub リポジトリ — Star 23K+、活発にメンテナンス中 - HuggingFace ブログ — 技術的な深掘り解説 - Colab サンプル — オンラインで無料で試用

この記事が役に立ったと思ったら、ぜひ他の開発者にもシェアしてください!