Pipeline Parallelism
パイプライン並列処理がどのようにディープラーニングモデルを複数のGPUに分割するかを学びましょう。メモリ不足エラーを回避し、分散学習を最適化する方法について解説します。
Pipeline Parallelismは、モデルの深さ方向に分割することで、GPUなどの複数の計算デバイスに大規模なneural network (NN)を分割するように設計された高度なdistributed trainingテクニックです。現代のアーキテクチャのmodel weightsやオプティマイザの状態が単一のアクセラレータのメモリ制限を超えた場合、エンジニアはネットワークのシーケンシャルなレイヤーを「ステージ」に分割します。たとえば、最初の10層がGPU 0に常駐し、その後の10層がGPU 1に常駐する場合があります。forward passの間、データは1つのデバイスから次のデバイスへと流れます。これらのデバイスをチェイン状に接続することで、研究者はハードウェアの制限によるout-of-memory errorsに直面することなく、大規模なdeep learning (DL)アルゴリズムをトレーニングできます。
パイプライン並列化の仕組み#
デバイス間でレイヤーを分割する素朴な実装は、「パイプラインバブル」として知られる重大な非効率性につながります。レイヤーが順番に処理されるため、GPU 0が初期レイヤーを処理している間、GPU 1は完全にアイドル状態になります。ハードウェアの使用率を最大化するため、現代のパイプラインスケジューラは、グローバルなbatch sizeをより小さな「マイクロバッチ」に分割します。
バッチ全体が終了するのを待つのではなく、GPU 0は最初のマイクロバッチをGPU 1に渡すとすぐに、2番目のマイクロバッチの処理を直ちに開始します。Microsoft DeepSpeedやPyTorch Distributed Pipelining APIなどのツールは、通常1F1B (One Forward, One Backward) scheduling strategyを使用します。この手法は、異なるマイクロバッチのフォワードパスとバックワードパスの計算を並行して交互に行うことで、パイプラインバブルとメモリ消費を大幅に最小限に抑えます。2024年および2025年の最近の進歩では、計算クラスター全体のアイドル時間をほぼ解消するオプティマイザ対応の重み予測戦略であるZero Bubble Pipeline Parallelismも導入されています。
関連する並列化手法との違い#
パイプライン並列化は、分散コンピューティング戦略というより広範なエコシステムの中で機能します。AIモデルを効率的にスケーリングするには、その違いを理解することが不可欠です。
- モデル並列化: これは、モデルを複数のデバイスに分割するための包括的な用語です。パイプライン並列化は、アーキテクチャを深さ方向に順次パーティション分割する、モデル並列化の非常に特殊な形態です。
- Tensor Parallelism: パイプラインパラレルスの深さ方向の分割とは異なり、テンソルパラレルスは個々の行列演算をGPU間で水平方向にシャードします。スループットを最大化するために、これら2つのテクニックが頻繁に組み合わされます。
- Data Parallelism: データパラレルスは、すべてのGPU上でモデル全体を複製し、それらの間でトレーニングデータを分散させます。単一デバイスのVRAMにネイティブに収まるコンパクトで高度に最適化されたUltralytics YOLO26モデルなどのobject detectionおよびimage segmentationアーキテクチャでは、PyTorchのDistributedDataParallel (DDP)によるデータパラレルスがトレーニングを加速するための好ましい方法です。
AIおよびMLにおける実用的な応用#
複雑なインフラストラクチャのスケールアップは、最新の最先端AIシステムを構築するために不可欠です。
- Training Foundation Models: メタのLlama 3のような巨大なLarge Language Models (LLMs)やfoundation modelsを開発するには、テンソル、データ、パイプラインのパラレルスを組み合わせる必要があります。NVIDIA Megatron-LMなどのフレームワークは、これらの戦略を活用して、AWS SageMakerなどのクラウドプラットフォーム上の何千ものGPUにわたって、大規模なMixture-of-Experts (MoE)アーキテクチャをトレーニングします。
- High-Resolution Medical Diagnostics: AI in healthcareや科学的モデリングにおいて、3Dボリュームスキャンはしばしば1つのアクセラレータにとって大きすぎるアクティベーションを生成します。ノード間でネットワークレイヤーをパイプライン処理することにより、研究病院は画質を損なうことなく、膨大なMRIデータセットでディープネットワークをトレーニングできます。
コード例: レイヤー分割の概念#
歴史的に、デバイス間でレイヤーを分散させるには、複雑でカスタムなコードが必要でした。今日では、基本的なロジックにより、特定のレイヤーが異なるデバイス識別子にマッピングされます。以下は、パイプラインパラレル操作の基礎を築く、PyTorchでネットワークステージがデバイス間でどのように分割されるかについての概念的表現です。
import torch.nn as nn
class SimplePipelineModel(nn.Module):
def __init__(self):
super().__init__()
# Stage 1 is assigned to the first GPU
self.stage1 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:0")
# Stage 2 is assigned to the second GPU
self.stage2 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:1")
def forward(self, x):
# The forward pass seamlessly crosses device boundaries
x_out = self.stage1(x.to("cuda:0"))
return self.stage2(x_out.to("cuda:1"))基盤モデルの作成には複雑なオーケストレーションが必要ですが、迅速でスケーラブルなcomputer vision (CV)プロジェクトのデプロイは一般的にシンプルです。効率的なmodel deploymentと自動化されたマルチGPU活用のために、開発者はUltralytics Platformを信頼してワークロードを自動的にスケーリングしています。堅牢なmodel training tipsを活用することで、プラットフォームはインフラストラクチャ管理を抽象化し、エンジニアがreal-time inferenceが可能な精度の高いAIソリューションの構築に完全に集中できるようにします。






