EfficientMoE/MoE-Infinity

PyTorch library for cost-effective, fast and easy serving of MoE models.

📚 概要

MoE‑Infinity は、モデル全体を保持するのに十分なVRAMがないGPU上で、大規模なMixture‑of‑Experts(MoE)言語モデルを実行できるライブラリです。これは、GPU上に「ホットな」エキスパート重みのみを保持し、残りをホストRAMまたはSSDに移動して、ジャストインタイムでフェッチすることで実現します。アクティベーション認識キャッシュ、プリフェッチ、CUDAグラフのトリックにより、リアルタイム推論に十分な速度で追加のデータ移動を維持します。


🚀 主な機能

機能 ユーザーへのメリット
エキスパートオフロード 大規模なMoEチェックポイント(例:DeepSeek‑V2、Mixtral、Qwen3‑MoE)は、ほとんどのエキスパートパラメータをCPU/SSDに保存することで、16 GB GPUで提供できます。
アクティベーション認識キャッシュ 頻繁に使用されるエキスパートはGPU上に常駐します。システムは次に必要になるエキスパートを予測し、事前にロードします。
速度最適化 融合CUDAカーネル、CUDAグラフキャプチャ、Marlin INT4 GEMM、FP4/MXFP4パス、オプションのFlashAttention/FlashInferカーネルにより、レイテンシを低く抑えます。
HuggingFace互換API MoEクラスは通常のtransformersインターフェース(generate、encodeなど)を模倣します。推奨される方法はMoE.serve()で、連続バッチ処理用の非同期OpenAI互換HTTPサーバーを起動します。
本番環境対応のサービス提供 ストリーミング(SSE)、ページングKVキャッシュ、リクエストのプリエンプション、ホットリロード、ヘルスチェック、クラッシュリカバリログを備えたOpenAIスタイルのエンドポイント。
マルチGPUサポート 単一マシン上で、エキスパートは表示されているすべてのGPUにラウンドロビンで分散されます。各GPUには独自のキャッシュがあり、可能な場合はピアツーピアアクセスを使用できます。
実験的DFlash ドラフトパスと検証パスを統合し、リッチなバッチ処理をサポートする投機的デコーディングフレームワーク。
オプションのアクセラレータ FlashAttentionとFlashInferのプラグインサポート。DeepSeek‑V4‑Flash用のFP4量子化エキスパートオフロード。

🛠️ インストールのクイックスタート

  1. 仮想環境を作成(Python 3.10以上を推奨)。
    conda create -n moe-infinity python=3.12
    conda activate moe-infinity
    
  2. リリース済みのホイールをインストール(v0.2.1を希望のタグに置き換えてください)。
    TAG=v0.2.1
    gh release download "$TAG" --repo EfficientMoE/moe-store --pattern 'moe_store-*.whl' -O /tmp/moe-store.whl
    gh release download "$TAG" --repo EfficientMoE/MoE-Infinity --pattern 'moe_infinity-*.whl' -O /tmp/moe-infinity.whl
    pip install /tmp/moe-store.whl /tmp/moe-infinity.whl
    
  3. (オプション)ソースからビルド – カスタムCUDAコンピュートケーパビリティが必要な場合や、最新のコードが必要な場合は、READMEの「Install from Source」セクションに従ってください。主にCUDA、CUTLASS、および対応するPyTorchホイールが必要です。
  4. オプションのカーネルを有効化(インストールされている場合)。
    pip install -e '.[flash_attn]'   # FlashAttention
    pip install -e '.[flashinfer]'   # FlashInfer
    

📦 使用方法

プロセス内(簡単な)例

from transformers import AutoTokenizer
from moe_infinity import MoE
import os, torch

ckpt = "deepseek-ai/DeepSeek-V2-Lite-Chat"
tokenizer = AutoTokenizer.from_pretrained(ckpt, trust_remote_code=True)

config = {
    "offload_path": os.path.expanduser("~/moe-infinity"),
    "device_memory_ratio": 0.75,   # キャッシュ用に予約するGPUメモリの割合
}
model = MoE(ckpt, config)

inp = tokenizer("translate English to German: How old are you?", return_tensors="pt").input_ids.cuda()
out_ids = model.generate(inp)          # 非推奨の同期パス。互換性のために維持
print(tokenizer.decode(out_ids[0], skip_special_tokens=True))

本番環境でのサービス提供(連続バッチ処理)

python -m moe_infinity.entrypoints.openai.api_server_v2 \
    --host 127.0.0.1 \
    --model deepseek-ai/DeepSeek-V2-Lite-Chat \
    --offload-dir ./offload_dir

サーバーはOpenAIスタイルのPOST /v1/completionsリクエストを受け付け、Server‑Sent Eventsを介して結果をストリーミングします。


📊 対応モデル(抜粋)

ファミリー チェックポイントの例
DeepSeek‑V2 / V3 deepseek-ai/DeepSeek-V2-Lite-Chat
DeepSeek‑V4‑Flash (FP4) deepseek-ai/DeepSeek-V4-Flash
Mixtral mistralai/Mixtral-8x7B-Instruct-v0.1
Qwen3‑MoE Qwen/Qwen3-30B-A3B
Qwen3.5‑MoE Qwen/Qwen3.5-35B-A3B
GLM‑5.2 / 5.3 (FP8) zai‑org/GLM-5.2‑FP8
GPT‑OSS openai/gpt-oss‑*
DBRX databricks/dbrx-instruct
Jamba ai21labs/Jamba‑*
OLMoE allenai/OLMoE‑*
Meta NLLB‑MoE facebook/nllb‑moe‑54b

ライブラリは、インストールされているtransformersバージョンに対応するクラスが存在する場合にのみ、モデルを自動的に登録します。


🎯 MoE‑Infinityを使用すべき場合

  • VRAMが24 GB以下のGPUを持っているが、30BパラメータのMoEモデルを提供する必要がある場合。
  • レイテンシが重要 – キャッシュ認識オフロードにより、追加のデータ転送オーバーヘッドをインタラクティブなチャットに十分な低さに保ちます。
  • ドロップインのHuggingFaceエクスペリエンスを望みながら、本番環境対応のHTTPサーバーも実行したい場合。
  • 単一マシンで複数のGPUを実行しており、ライブラリにエキスパートを自動的にシャーディングさせたい場合。

📚 さらに読む

  • アーキテクチャの詳細 – ARCHITECTURE.md
  • モデル互換性マトリックス – docs/model-compatibility.md
  • サービングガイド – docs/serving.md
  • DFlash投機的デコーディング – docs/dflash.md
  • ベンチマークのベストプラクティス – docs/benchmarking.md

この概要はリポジトリのREADMEのみに基づいています。最新の情報については、リンクされたドキュメントを参照してください。

関連

  • プロジェクト
  • プロジェクト
  • Dispatch
  • プロジェクト
  • プロジェクト