インターコネクト — NVLink・PCIe・光が決めるスケール
GPUを増やしても速くならない理由は、たいてい配線の側にあります。HBMからNVLink、PCIe、ノード間ネットワークまでの帯域の階層を桁で押さえ、集合通信の時間を「段数×遅延+バイト数÷帯域」に分解し、なぜall-to-allがきついのか、なぜ距離が光を要求するのかを前提知識ゼロから追います。
比喩: 隣の席、隣の部屋、隣のビル
同じ島の同僚に「これ合ってる?」と聞くのは数秒です。隣の部屋なら立ち上がって歩く。別のビルにいる人なら、会議を設定して翌日になる。伝える内容が同じ一行でも、相手までの距離で所要時間は桁で変わります。
GPUクラスタもまったく同じ構造をしています。必要なデータが自分のチップに直付けされたメモリにあるのか、同じサーバの隣のGPUにあるのか、ケーブルを1本またいだ別のサーバにあるのかで、同じ1バイトの値段が変わる。インターコネクトとは、この配線とスイッチとプロトコル一式のことです。
分散学習が難しい理由も、突き詰めるとここに集約されます。計算を分けるのは簡単で、分けた結果を突き合わせるほうが高い。その突き合わせが通る道が、インターコネクトです。
帯域の階層を並べる
数値は各世代の公称仕様から、桁が分かる程度に拾います。絶対値より段どうしの比を覚えてください。
チップに直付けのHBM。 A100クラスで毎秒2テラバイト前後。GPUのメモリ階層でいちばん外側の引き出しだったものが、ここでは基準点になります。チップの外に出た瞬間、これより速い道はありません。
同じサーバ内のGPU同士(NVLink)。 A100世代でGPU1枚あたり600 GB/s、H100世代で900 GB/s(いずれも双方向の合計としての公称値)。NVSwitchを挟めば、サーバ内の8枚がどの相手とでもこの帯域で話せます。
サーバをまたぐ(PCIeとネットワーク)。 GPUがチップの外へ出る一般的な経路はPCIeで、Gen4 x16 が片方向およそ32 GB/s、Gen5 x16 でその倍。その先のInfiniBandは、NDR世代の1ポートが400 Gb/s、つまり50 GB/sです。
並べるとこうなります。HBMが毎秒テラバイトの桁、NVLinkが数百ギガバイトの桁、ノード間が数十ギガバイトの桁。一段外へ出るごとに、およそ1桁落ちる。
単位でだまされない
この分野は単位が揃っていません。事故のもとなので3つだけ。
Gb/s と GB/s は8倍違う。 400 Gb/sのポートは50 GB/sです。ネットワーク側はビット、メモリ側はバイトで書く習慣があり、同じ資料に平気で混ざります。
片方向か双方向合計か。 NVLinkの公称値は双方向の合計、PCIeは片方向で書かれることが多い。そのまま並べると、NVLinkが実際より2倍立派に見えます。
理論値か実効値か。 ヘッダや符号化のぶん、実効は理論値の7〜9割。設計はカタログ値ではなく実測値でするものです。
全員をつなぐと本数が爆発する
N台を専用線で全対全に直結すると、必要なリンク本数は
つまり「参加者の組み合わせの数だけケーブルが要る」と言っているだけです。 が台数、 が本数。8台なら28本、64台なら2,016本。台数を8倍にすると本数は70倍を超えます。
だから実機は全対全を諦めます。スイッチに全員を繋ぐか、輪にして隣としか話さないようにするか、木のように束ねるか。リングならリンクは 本、木なら段数は です。この「つなぎ方の違いがそのまま桁の違いになる」感覚が、このあとで効いてきます。
集合通信 — 分散学習が流しているもの
分散学習でネットワークを流れるのは1対1のメッセージではなく、全員が同時に参加する決まった形の通信——集合通信(collective)です。主役は2つ。全員の値を足して全員が結果を持つ all-reduce と、相手ごとに違う中身を全員へ送る all-to-all。
データ並列の勾配同期はall-reduceそのものです(分散学習を1から)。1ステップごとに必ず1回、全員が足並みを揃える瞬間がある。この長さがスケーリングの上限になります。
コメント
コメントにはログインが必要です