11月7日、Joab Jacksonが「PyTorch 2.15 tackles the 'one bad GPU' problem」と題した記事を公開した。583名のコントリビューターによる3,117コミットで構成されるPyTorch 2.15は、GPU間通信の基盤を全面的に書き直し、大規模LLM学習における長年の頭痛の種だった「1台の不良GPUがジョブ全体を道連れにする」問題に正面から取り組んだリリースだ。
「1台の不良GPU」問題とは何か
大規模なLLM(大規模言語モデル)の学習では、数百〜数千台のGPUが協調して動作する。この環境で1台のGPUが故障・低速化すると、ジョブ全体が停止し、最初からやり直しになることがある。これが「one bad GPU problem(1台の不良GPU問題)」だ。
GPUクラスタ規模が拡大するほど、任意の1台が障害を起こす確率は高まる。数千GPU・数日〜数週間単位の学習ジョブが一般化した現在、この問題が引き起こす計算資源の損失は無視できない水準に達している。PyTorch 2.15は、この課題に正面から取り組んだリリースである。
NCCLバックエンドを全面刷新
今回の目玉は、**NCCL(Nvidia Collective Communications Library)** のバックエンド実装の書き直しだ。NCCLはGPU間通信の基盤となるライブラリで、テンソル・勾配・重みなどのデータをGPU間で高速にやり取りする役割を担う。TCP/IPベースの通常のネットワークスタックではGPUクラスタにボトルネックが生じるため、NCCLは最適化された通信パスを使ってCPUオーバーヘッドを最小化する。
PyTorchのコア開発者でMetaのソフトウェアエンジニアであるTristan Riceは、YouTubeのライブ配信でこう述べた。「旧来のNCCLインターフェースは技術的負債に溺れていた」。
旧実装の問題点
旧バックエンド ProcessGroupNCCL は、1つのプロセスグループに対して数十ものコミュニケーター(通信チャネル)を生成することがあり、これが断続的なデッドロックや予測不能なパフォーマンス低下を引き起こしていた。
新実装のルール:1プロセスグループ = 1コミュニケーター
新バージョンでは、初期化時に1プロセスグループにつきコミュニケーターを1つだけという厳格なルールを採用した。これにより複数コミュニケーター間のクロストーク(干渉)が排除される。並列処理が必要な場合は、プロセスグループを追加する設計だ。
障害対応の具体的な改善
ストラグラー(遅延GPU)の除外と置き換え
新実装では、GPUがクラッシュしたり極端に遅くなった場合に、サードパーティのオーケストレーターが該当GPUを切り離し、代替ワーカーをアサインできるようになった。ジョブ全体を最初からやり直す必要がなくなる。
フライトレコーダーの追加
航空機のブラックボックスに倣った「フライトレコーダー」機能が新たに追加された。従来、GPUクラスタがタイムアウトやデッドロックで停止しても、ユーザーが受け取るのは汎用的なエラーメッセージだけだった。新機能は全オペレーションを連続スナップショットとして記録し、障害発生後に検査できる。
移行スケジュール
旧実装の ProcessGroupNCCL は2.15パッケージにロールバック用として同梱されている。ただし、新バックエンドが期待通りに機能すれば、来年初頭にリリース予定の2.16で旧版は削除される方針だ。
その他の更新点
PyTorch 2.15には上記以外にも以下の変更が含まれる。
- 非同期一方向データ転送のためのPython Transport API(トレーナーとジェネレーター間で重みを同期する学習ジョブに適している)
- Appleデバイス向けの並列処理改善
- NvidiaのBlackwell GPU(次世代アーキテクチャ)のサポート追加
背景:PyTorchとNCCLの位置づけ
NCCLはNvidiaがSC15(2015年のスーパーコンピューティング会議)で公開し、2016年にFacebookチームがPyTorchを構築する際に採用した。PyTorchはLuaベースのTorchライブラリをPythonで再実装したものだ。
PyTorchが今日これほど広く使われる背景には、業界全体での採用実績がある。元記事では「OpenAI・DeepMind・Meta・NvidiaなどすべてのメジャーなMLラボがPyTorchを使っており、拡散モデル、LLM、レコメンダーシステム、ロボティクスまであらゆるものを動かしている」と紹介されている。その基盤インフラであるNCCLを書き直した今回の変更は、PyTorchエコシステム全体の信頼性・運用性に直結する意味を持つ。
詳細はPyTorch 2.15 tackles the 'one bad GPU' problemを参照していただきたい。




