NCCL によるマルチ GPU
スケーリングのための集合通信
「NCCL によるマルチ GPU」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
手作業での実装は難しい
複数のGPU間でPeerコピーを手作業で接続すると、すぐに複雑になります。本格的にスケーリングするには、collective通信向けに構築されたライブラリが必要です。
NCCLを使う
NVIDIAが提供する答えが、collective通信ライブラリのNCCLです。利用可能な中で最速のリンクを自動的に選び、GPU間でデータを転送します。
Collectiveとは何か
Collectiveとは、すべてのGPUが一緒に参加する1つの操作です。たとえば各カードが保持する値を合計します。すべてのデバイスが1回の呼び出しで協調します。
代表的なCollective:AllReduce
中心となる操作がAllReduceです。すべてのGPUのバッファを、たとえば加算によって結合し、同じ結果をすべてのGPUへ返します。
ncclAllReduce(send, recv, n, ncclFloat, ncclSum, comm, stream);その他のCollective
NCCLには、1つのGPUのデータをすべてのGPUと共有するBroadcastのほか、その他の一般的な交換パターンに対応するAllGatherやReduceScatterもあります。
Communicator
通信するGPUは、communicatorによって管理されるグループを形成します。すべてのcollective呼び出しでこのハンドルを渡し、NCCLに参加者を知らせます。
RankでGPUを識別する
communicator内では、各GPUに0から始まるrankという番号が割り当てられます。rankを使うと、送信側、受信側、rootを指定できます。
Communicatorを構築する
1つのプロセス内にあるGPUの場合、ncclCommInitAllを使うと、指定したデバイスIDのリストからすべてのcommunicatorを一度に設定できます。
ncclCommInitAll(comms, nGpus, devs);ストリームに対応する
すべてのNCCL呼び出しにはstreamが必要です。操作はそこにキューイングされ、カーネルと並行して実行されるため、通信と計算を重ねられます。
呼び出しをグループ化する
デッドロックを起こさずに複数のGPUでcollectiveを発行するには、ncclGroupStartとncclGroupEndの間に呼び出しを記述し、NCCLがまとめて起動できるようにします。
ncclGroupStart();
// per-GPU calls
ncclGroupEnd();学習で重宝される理由
深層学習では、各ステップでGPU間の勾配を同期します。AllReduceはまさにその処理であるため、NCCLはほぼすべてのマルチGPU学習で利用されています。
簡単な確認
GPU間でバッファを合計し、その結果をすべてのGPUへ返すNCCLのcollectiveを思い出してください。
まとめ
NCCLは高速リンク上でAllReduceなどの集合通信を実行し、ランク付けされたGPUのコミュニケータによって構成されます。マルチGPUトレーニングの基盤です。コース完了です。✨
AI チューターと学ぶ C++ — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「NCCL によるマルチ GPU」レッスンは無料ですか?
はい。「NCCL によるマルチ GPU」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「NCCL によるマルチ GPU」で何を学びますか?
スケーリングのための集合通信 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「NCCL によるマルチ GPU」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- デバイスの列挙と選択
- GPU 間のワーク分割
- ピアツーピアメモリアクセス
- NCCL によるマルチ GPU