ドキュメント / 日本語ソースを見る ↗

ruCCL ユーザーガイド

English | 简体中文 | 日本語 | Deutsch | Русский

計算ライブラリ · テンソルとフレームワーク · 中文

1. レイヤーとエントリーポイント

Cargo パッケージは ruCCL、Rust クレートは ruccl です。

ruCCL には、テンソル バックエンド集合体、ランク コア、およびインプロセス実装が含まれます。 ruda-communication は通信インフラを提供します。 orchestrator 機能により、オーケストレーション エントリ ポイントが有効になります。

2. テンソル集合体 API

関数 の動作
register<B> ピア、デバイス、および CollectiveConfig を登録します
all_reduce<B> 縮小結果を参加者に返します
broadcast<B> 送信者は Some(tensor) を渡します。レシーバーパス なし
reduce<B> 指定されたルートに縮小します。非 root 参加者は何も受け取りません
finish_collective<B> ピアの集合セッションを終了します
reset_collective<B> ローカル集合サービスをリセットし、登録および進行中の操作状態を破棄します

インターフェイスは B: ruda_tensor::Backend および B::FloatTensorPrimitive を使用します。自動微分と統合する場合は、内部バックエンドを登録します。集合呼び出し自体は自動逆方向ルールを定義しません。

3. 登録と通話契約

CollectiveConfig::default() で構成を作成します。ローカル参加デバイスの数には、with_num_devices を使用します。構成方法を通じて戦略とマルチノード アドレスを構成します。

参加者はデバイス数に同意し、一意のピア ID を使用し、一致するコレクティブを同じ順序で呼び出す必要があります。形状、リダクション演算、ルート、その他のパラメータが一致する必要があります。各ブロードキャストには送信者が 1 人だけ必要です。

マルチノード実行の場合は、ノード数、グローバル アドレスとローカル アドレス、およびデータ サービス ポートを一緒に構成します。

4. エラーとライフサイクル

CollectiveError は、登録の重複または欠落、形状の不一致、一貫性のないリダクション操作またはルート、および無効なブロードキャスト送信者の数をカバーします。

通常の終了には finish_collective を使います。reset_collective は進行中の状態を破棄するもので、演算の完了、デバイスタスクのチェックポイント作成、損失のない復旧は行いません。

5. CUDA の例

cuda 機能は、CUDA テンソル バックエンドを有効にします。 cargo run --locked -p ruCCL --features cuda --example all_reduce を実行して、GPU 0 で 4 つの論理ランクを持つリング AllReduce を実行します。これは、257 の FP32 要素の合計/平均、入力の保存、およびセッションの終了をチェックします。

デバイス アダプターは tensor_device にあります。オプティマイザー インターフェイスについては、明示的なランク勾配削減 を参照してください。転送には、ゼロコピー P2P ではなく、ホストステージングされたパスが含まれます。

ソース: 集合 API、構成、ランク、および インプロセス実装。

6. 集合研修

ruda-optim で collective を有効にします。明示的に所有されているランク コミュニケーターを使用して、後方勾配を GradientsParams に変換し、grads.all_reduce_with::<InnerBackend>(&communicator, ReduceOperation::Mean)? を呼び出して、返された勾配を optimizer.step に渡します。パラメータ ID、グラデーション形状、dtype、および呼び出し順序はランク間で一致する必要があります。 autodiff トレーニングの場合、InnerBackend は Autodiff ラッパーなしのバックエンドです。

ソース ツリーから 2 ランクのトレーニング例を実行します。

cargo run --locked -p ruda-optim --features collective,cuda --example collective_training -- run ./collective-training-state
cargo run --locked -p ruda-optim --features collective,cuda --example collective_training -- resume ./collective-training-state

run にはまだ存在しないディレクトリが必要です。最初の更新後に各ランクのモデルとオプティマイザーを保存し、2 番目の更新を実行します。 resume はそのディレクトリを復元し、2 番目の更新を実行します。 CUDA が有効になっている場合、この例の両方の論理ランクは同じデフォルト デバイスを使用します。

完全な呼び出しシーケンスについては、集合トレーニングの例 を参照してください。スケジューラーの状態と保留中の累積勾配も保存するには、トレーニングと状態の保存 の TrainingRecord を使用します。