CUDA Academy · レッスン

NCCL によるマルチ GPU

スケーリングのための集合通信

レッスン 4/413 ステップ

「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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. デバイスの列挙と選択
  2. GPU 間のワーク分割
  3. ピアツーピアメモリアクセス
  4. NCCL によるマルチ GPU
← CUDA Academyに戻る