Rgpu: PyTorch および CUDA 向けのリモート GPU 実行
Rgpu は、アプリケーションのロジックをローカルクライアントに置いたまま、リモートの NVIDIA マシン上で GPU アクセラレーションを利用したワークロードを実行できるようにするフレームワークです。これにより、CUDA がインストールされていないマシン(macOS デバイスなど)からでも、PyTorch の操作を実行し、テンソルをリモートハードウェア上に保持できます。
2 つの実行パス: PyTorch デバイスと CUDA Shim
Rgpu は、リモート GPU 実行をワークフローに統合するための 2 つの異なる方法を提供します。
- PyTorch デバイス: これはより簡単な統合パスです。PyTorch プログラムが
rgpuデバイスをオプトインできるようにし、torch操作を TCP 経由で実行できるようにします。 - CUDA Shim: このパスは、既存の Linux CUDA プログラム(標準の CUDA PyTorch を含む)向けに設計されています。
libcuda、CUDA Runtime、cuBLAS、cuBLASLt、cuDNN 用の shim を提供し、既存のバイナリが変更なしで機能し、呼び出しをリモートサーバーにリダイレクトできるようにします。
実装とデプロイ
Rgpu はクライアント・サーバーアーキテクチャを採用しており、rgpu-run ランチャーが接続とトンネル設定を処理します。
PyTorch クイックスタート
PyTorch デバイスを使用するには、ユーザーは pip install rgpu でライブラリをインストールし、テンソル作成時にデバイスを rgpu と指定します。
import torch
import rgpu
x = torch.ones(4, device="rgpu")
print((x * 2).sum().item())
実行は rgpu-run コマンドで処理され、リモートホストへの SSH トンネルを管理します。
rgpu-run --host user@gpu-host --ssh-port 2222 -i ~/.ssh/gpu_key python smoke.py
セキュリティに関する考慮事項
PyTorch と CUDA shim の両プロトコルは、ネイティブに接続の認証や暗号化を行いません。通信を保護するには、rgpu-opserver をデフォルトの localhost バインドに保ち、すべてのトラフィックを SSH トンネル経由でルーティングする必要があります。
プロジェクト構造
Rgpu リポジトリは、いくつかの機能コンポーネントで構成されています。
| コンポーネント | 目的 |
|---|---|
client/ |
CUDA クライアント shim とトランスポート |
server/ |
CUDA サーバーとディスパッチ |
common/ |
共有プロトコルと生成された API メタデータ |
python/ |
PyTorch デバイスとランチャー |
codegen/ |
CUDA ヘッダーパーサーとソースジェネレーター |
技術的批評とコミュニティフィードバック
Rgpu はハードウェアをアプリケーションから切り離す柔軟な方法を提供しますが、一部のコミュニティメンバーはパフォーマンスのオーバーヘッドに関する懸念を表明しています。
これは無意味です。なぜなら、このレベルで抽象化すると、スタルに対して最も許容度が低いシステムの部分が最も影響を受けるからです。エンジンのピストンを 5 ブロック離してトルクを伝達するようなもので、エンジン全体を 5 ブロック離してステアリング入力を伝達するのとは異なります。
この批評は、タスクレベルではなく操作レベルで抽象化することで、スタルに非常に敏感な操作に対してシステムが重大なレイテンシを導入し、従来のリモート実行方法と比較して、高性能なトレーニングワークロードでの有用性を制限する可能性があることを示唆しています。
Sources
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト