NCCL通信最適化
このページは、2026-06-05の勉強会でチームが共有したNCCL通信最適化の基礎をまとめたものです。 担当: 小林。
これは何か
NCCL(NVIDIA Collective Communications Library、読み: ニッケル)は、複数GPU間の通信ボトルネックを軽減するためのライブラリです。
AI課題(Qwen推論)では、Tensor Parallelやprefill-decode間の処理などでGPU間通信が発生します。
NCCLはこのGPU間のcollective通信を担います。
なぜ重要か
Qwenのような大規模LLMを複数GPUで動かすとき、モデルをGPUに分割して実行します。 このとき通信(AllReduceなど)が遅いと、GPUが計算せずに**待つ時間(idle)**が増えます。
つまりHPC-AIでは、NCCLでQwen推論中のGPU間通信を高速化し、
tokens/secを上げることが目標になります。
基本概念:NCCLの主な通信
| 通信 | 内容 | 使用場面 |
|---|---|---|
| AllReduce | 全GPUの計算結果を集約して全GPUへ戻す | 分散学習、Tensor Parallel |
| AllGather | 各GPUのデータを集める | モデル分割、並列推論 |
| ReduceScatter | 集約しながら分割して配る | 大規模モデル並列 |
| Broadcast | 1つのGPUのデータを全GPUへ配る | 重み・設定の共有 |
| Send/Recv | GPU間で個別に送受信 | Pipeline処理、KV cache転送 |
AI TrackでNCCLが使われる流れ
Tensor Parallelでは、各GPUがモデルの一部を計算します。
GPU0/1/2/3: それぞれモデルの一部を計算
↓
計算結果を NCCL で集約(AllReduce / AllGather)
↓
次の層へ進む
ここで通信が遅いと、GPUの待ち時間が増えて全体が遅くなります。
最適化手順
1. 測定する
Qwen推論を実行し、Nsight SystemsやNCCLログで次を確認します(例)。
- Prefill計算時間 / Decode計算時間
- NCCL通信時間
- GPU idle(GPU待ち時間)
- KV cache転送時間
- どのGPU間で通信しているか(通信経路)
2. ボトルネックを分類して対策する
| 計測結果 | 原因 | 対策 |
|---|---|---|
| NCCL通信時間が長い | GPU間通信が遅い | NIC指定、NCCL設定変更(パラメータ調整) |
| GPU idleが多い | 通信待ちが発生 | 通信と計算の重なり(オーバーラップ)を改善 |
| KV cache転送時間が長い | KV cache転送が遅い | prefill / decode の配置を見直す |
| rankごとに時間が違う | 負荷分散が悪い | batch分割やworker比率を調整 |
大会との関係
- 2025年AI課題(16 H100 GPUs)でも、GPU kernel単体よりGPU間通信が律速になりやすいと考えられます(要確認)。
- prefill/decodeの配置はPD Disaggregationと関係します。
注意点
- NCCLパラメータやNIC指定は環境依存です。大会の実機・設定可否は要確認です。
- GPUプロファイリングは「いきなりカーネル内部」ではなく、まずCPU-GPU転送と通信を疑います(プロファイリングツール実践ガイド)。