meta-pytorch/monarch
PyTorch Single Controller
Monarch – PyTorch向け分散アクターフレームワーク\n\n概要\n- Pythonファーストのライブラリ(Rustコア)で、PyTorch上でアクター(相互にメッセージを送信できる独立したプロセス)を実行できます。\n- アクターはメッシュ(コレクション)に編成され、ブロードキャスト、ポイントツーポイントRDMA、または通常のRPC呼び出しで通信できます。\n- 組み込みのフォールトトレランス:アクターは監視ツリーを形成し、障害が上位に伝播し、自動的に回復できます。\n- オプションのテンソルエンジンは、libibverbs(RDMA)を使用した分散テンソルシャーディングと単方向GPU/CPUメモリ転送を追加します。\n\n主要な概念\n| 機能 | 提供されるもの |\n|---|---|\n| リモートアクターとメッシュ | Actorを継承するクラスを作成し、メソッドに@endpointをデコレートして、GPUやノードに多数のコピーを生成します。呼び出しはget()できるフューチャーを返します。\n| 監視ツリー | 階層的なプロセスグループは、失敗した子を自動的に再起動またはクリーンアップします(Erlang/Elixirの監視と同様)。\n| RDMA転送 | ハードウェアがサポートする場合、プロセス間のGPU/CPUメモリの低遅延・ゼロコピー移動。\n| 分散テンソル | torch.Tensorをアクター間でシャーディングし、各アクターがスライスを処理し、ライブラリが基盤となる通信を処理します。\n\n典型的なワークフロー(READMEより)\npython\nfrom monarch.actor import Actor, endpoint, this_host\n\n# 8プロセス(GPUごとに1つ)\nprocs = this_host().spawn_procs({\"gpus\": 8})\n\nclass Trainer(Actor):\n @endpoint\n def train(self, step: int):\n ... # ここにトレーニングロジック\n\ntrainers = procs.spawn(\"trainers\", Trainer) # 8つのTrainerアクターを作成\nfut = trainers.train.call(step=0) # ブロードキャスト呼び出し\nfut.get() # すべての完了を待機\n\n\nインストール\n- ビルド済みホイール:pip install torchmonarch(安定版)または--preでナイトリービルド。\n- ソースビルドはuvパッケージマネージャー、ナイトリーRustツールチェーン、オプションのCUDA/ROCm/RDMAライブラリを使用します。テンソルエンジンを無効にする(USE_TENSOR_ENGINE=0)ことで、純粋なアクター・CPU専用インストールが可能です。\n- Dockerサポート:ホイールをビルドし、提供されているDockerfile.nightlyを使用してKubernetesに適したイメージを作成します。\n\n対象ユーザー\n- 多くのGPUやノードにわたってPyTorchのトレーニングや推論をスケールさせたいが、生のtorch.distributedよりも高レベルの抽象化を求める研究者やエンジニア。\n- 個々のワーカーがクラッシュし自動回復が必要な、フォールトトレラントなAIサービスを構築するチーム。\n- RDMA対応ハードウェアを利用でき、超低遅延テンソルシャーディングを求めるユーザー。\n\nドキュメントとコミュニティ\n- ホストされているドキュメント:https://meta-pytorch.org/monarch/(「getting started」チュートリアルあり)。\n- テストはRust(cargo-nextest)とPython(pytest)の両方で記述されています。\n- BSD-3-Clauseライセンス、サードパーティのRDMAコードは互換性のあるライセンス。\n\n結論\nMonarchは、アクター方式の分散プログラミング、フォールトトレランス、オプションの高性能RDMAテンソル処理をPyTorchに拡張した、本格的な本番対応フレームワークです。生のtorch.distributedよりも構造と回復力が必要な高度なMLワークロードを対象としています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト