Exoで分散推論を行うための手順
0. はじめに
Exoは、日常のデバイス(スマートフォン、タブレット、PC、Raspberry Piなど)をピアツーピア(P2P)で接続し、分散型AI推論(distributed inference)を行うオープンソースフレームワークです。これにより、複数のデバイスを一つの強力な計算リソースとして扱い、大規模なLLM(Large Language Models)を実行できます。モデルをレイヤー単位でシャーディング(分割)し、各デバイスに割り当てて協調動作します。主なエンジンは、Appleデバイス向けのMLXと、それ以外のtinygradです。サポートモデル例: LLaMA, Mistral, LLaVA, Qwen, Deepseekなど。デバイス間の自動発見が可能で、マスター-ワーカー構造ではなくフラットなP2P設計です。
筆者の環境(Ubuntu 24 on Ryzen AI Max+395、Windows 11 on Intel Core Ultra + RTX 5090)では、Ubuntu側はLinuxサポートがあるため比較的スムーズに動作します。Ryzen AI Max+395はAMDベースですが、tinygradエンジンがCPU/GPUを扱えるので対応可能(ただし、AMD特化の最適化は確認が必要です)。Windows側は公式ドキュメントに明記されていませんが、tinygradがWindowsをサポートしており、pipインストールで動作する事例があります。NVIDIA RTX 5090は強力なGPUとして活用できますが、CUDAのセットアップが必要です。全体として、総メモリがモデルサイズをカバーできる限り(例: LLaMA 3.1 8Bでfp16なら16GB以上)、異種デバイス間のクラスタ化が可能です。
以下に、Kickstart(Getting Started)とチュートリアルのまとめをステップバイステップで記載します。主に公式GitHubと関連ガイドに基づいています。前提として、Python 3.12以上が必要です。インストール前に、UbuntuではNVIDIA/AMDドライバーを、WindowsではNVIDIA CUDA Toolkitをセットアップしてください(RTX 5090の場合、CUDA 12.x推奨)。
1. インストール(Installation)
Ubuntu 24 (Linux) の場合:
- リポジトリをクローン:
git clone https://github.com/exo-explore/exo.git cd exo - 仮想環境を作成(オプションですが推奨):
python3 -m venv venv source venv/bin/activate - インストール:またはスクリプトで:
pip install -e .source install.sh - 前提(NVIDIA/AMD GPUの場合):
- NVIDIA:
nvidia-smiでドライバ確認、CUDAインストール(nvcc --versionで確認)、cuDNN。 - AMD (Ryzen AI):
ROCmやtinygradのAMDサポートを確認。tinygradがデフォルトエンジンとして動作。exoはRyzen AIシリーズでのGPU推論に対応していません。Ryzen AI Max+ 395搭載のEVO-X2でも動作はしますが、推論はCPU実行となります。
- NVIDIA:
Windows 11 の場合:
公式ドキュメントにWindows特化の記載はありませんが、tinygradがWindowsをサポートするので、似た手順で可能です。
Windows11の上でも動くのかもしれませんが、沼の気配しかないので筆者はWSLを使いました。
- Python 3.12をインストール
(Anaconda推奨)。 - リポジトリをクローン
(Git for Windows使用):git clone https://github.com/exo-explore/exo.git cd exo - 仮想環境:
python -m venv venv venv\Scripts\activate - インストール:
pip install -e . - 前提: NVIDIA RTX 5090用にCUDA ToolkitとcuDNNをインストール。
nvidia-smiで確認。 -
注意: Windowsではtinygradエンジンが使われ、MLXは利用不可(Apple専用)。潜在的な互換性問題(例: パス区切り)が出る可能性があるので、テスト推奨。代替としてWSL2経由でLinux環境を使うのも手。WSL2で動かしましょう。
2. 基本セットアップと起動(Getting Started)
- 各マシンでExoを起動:これでデバイスが自動発見され、P2P接続。WebUIが http://localhost:52415 で開き、ChatGPT互換APIが http://localhost:52415/v1/chat/completions で利用可能。
exo - 異種環境(Ubuntu + Windows)の場合: 両方で
exoを実行。MLX (もしAppleなら)とtinygradが自動連携。 - デバッグ:
DEBUG=9 exoでログ出力。tinygrad用:TINYGRAD_DEBUG=2 exo。 - モデルダウンロード: Hugging Faceから自動。保存先:
~/.cache/exo/downloads(環境変数EXO_HOMEで変更可能)。プロキシ用:HF_ENDPOINT=https://hf-mirror.com exo。
3. 基本チュートリアル(Basic Usage Tutorial)
シングルデバイスでのテスト:
- モデル実行:これでLLaMA 3.2 3Bモデルをロードし、プロンプトを実行。あなたのRTX 5090マシンで高速に動作するはず。
exo run llama-3.2-3b --prompt "What is Exo?"
分散クラスタでの推論:
1. 両マシンで exo を起動。
2. WebUIでモデル選択(例: LLaMA 3.1 8B)。メモリ不足なら小さいモデルから。
3. API経由でクエリ(curl例、Ubuntu/Windowsどちらからでも):
curl http://localhost:52415/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama-3.1-8b", "messages": [{"role": "user", "content": "Explain distributed inference"}], "temperature": 0.7}'
モデルがシャーディングされ、 Ryzen AIとRTX 5090が協調(例: レイヤー分割に基づく)。 ネットワーク上のマシンが協働して分散推論が行われます。
高度な例(LLaMA 3.1 on Cluster):
- 複数デバイスで起動後、WebUIでクエリ入力。自動でメモリウェイトに基づくシャーディング(ring memory weighted strategy)。
- ビジョンモデル(例: Llava 1.5 7B):
curl http://localhost:52415/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "llava-1.5-7b", "messages": [{"role": "user", "content": [{"type": "text", "text": "Describe this image"}, {"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}]}], "temperature": 0.7}' - 注意: デバイス総メモリがモデルを収容する必要あり。失敗時は小モデルや量子化(LoRA)使用。
注意点とトラブルシューティング
- セキュリティ: 研究/開発向けで、運用時のセキュリティ/耐障害性に欠点あり。ローカルネットワーク推奨。
- 互換性:
あなたのAMD/Intel+NVIDIAはサポートだが、エンジン違いでパフォーマンス差が出るかも。iOS/Android追加で拡張可能。自信満々に公開できるほど、まだ試してません。 - さらに詳しく: GitHubのREADMEを参照、またはYouTubeチュートリアル(例: https://www.youtube.com/watch?v=k25XkHpJfoI)で視覚的に確認。
- 問題発生時: GitHub Issuesで報告、またはDEBUGモードでログ確認。
これで基本的なKickstartが可能です。追加質問があれば具体的にどうぞ! まずは公式リポジトリのREADMEを読みましょう。
Discussion