

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# モデル並列処理の概念
<a name="model-parallel-intro-v2"></a>

モデル並列処理は、深層学習 (DL) モデルを複数の GPU や インスタンスに分割する分散型トレーニングの手法です。SageMaker モデル並列処理ライブラリ v2 (SMP v2) は、ネイティブの PyTorch API および機能と互換性があります。そのため、PyTorch Fully Sharded Data Parallel (FSDP) トレーニングスクリプトを簡単に SageMaker トレーニングプラットフォームに適応させて、SMP v2 がもたらすパフォーマンス向上の恩恵を享受できます。この紹介ページでは、モデルの並列処理ついての概要と、非常に大きくなりがちな深層学習 (DL) モデルのトレーニング中に起きる問題を並列処理でいかに解決できるかを説明します。SageMaker モデル並列処理ライブラリが、モデル並列処理の戦略とメモリ消費量の管理に役立つ例も示します。

## モデル並列処理とは
<a name="model-parallel-what-is-v2"></a>

深層学習モデル (レイヤーとパラメータ) のサイズを大きくすると、コンピュータービジョンや自然言語処理などの複雑なタスクの精度が向上します。ただし、単一の GPU のメモリに収めることができる最大モデルサイズには制限があります。DL モデルをトレーニングする場合、GPU メモリの制限は次の点でボトルネックになる可能性があります。
+ トレーニングできるモデルのサイズが制限されます。これは、モデルのメモリフットプリントはパラメータの数に比例して大きくなるためです。
+ これにより、トレーニング中の GPU ごとのバッチサイズが制限され、GPU の使用率とトレーニング効率が低下します。

1 つの GPU でのモデルのトレーニングに関連する制限を克服するために、SageMaker AI はモデル並列ライブラリを提供し、DL モデルを複数のコンピューティングノードに分散して効率的にトレーニングすることを支援します。さらに、このライブラリでは、低遅延、高スループット、OS バイパスによってノード間通信のパフォーマンスを向上させる EFA 対応デバイスを活用し、最適化された分散トレーニングを実現できます。

## モデル並列処理を使用する前にメモリ要件を見積もる
<a name="model-parallel-intro-estimate-memory-requirements-v2"></a>

SageMaker モデル並列ライブラリを使用する前に、以下の点を考慮して、大きな DL モデルの学習に必要なメモリ量を把握してください。

`float16` (FP16) または `bfloat16` (BF16) などの自動混合精度と Adam オプティマイザを使用するトレーニングジョブでは、パラメータ 1 つあたりに必要な GPU メモリは約 20 バイトです。その内訳は次のとおりです。
+ FP16 または BF16 のパラメータ (最大 2 バイト)
+ FP16 または BF16 の勾配 (最大 2 バイト)
+ FP32 オプティマイザステート (Adam オプティマイザに基づく最大 8 バイト)
+ パラメータの FP32 コピー (最大 4 バイト) (`optimizer apply` (OA) オペレーションに必要)
+ 勾配の FP32 コピー (最大 4 バイト) (OA オペレーションに必要)

パラメータ数が 100 億個の比較的小規模な DL モデルでも、最低でも 200GB のメモリが必要になる場合がありますが、これは、単一の GPU で一般的に利用可能な GPU メモリをはるかに上回っています (例えば、NVIDIA A100 は 40GB/80GB のメモリを搭載)。モデルとオプティマイザの状態に必要なメモリ量に加えて、フォワードパス (順伝播) で生成されるアクティベーションなど、他にもメモリ消費の要因があります。必要なメモリは 200GB をはるかに超える場合があります。

分散型トレーニングでは、NVIDIA の A100 および H100 の Tensor コア GPU をそれぞれ搭載した、Amazon EC2 P4 インスタンスと P5 インスタンスを使用することをお勧めします。CPU コア、RAM、アタッチされたストレージボリューム、ネットワーク帯域幅などの仕様の詳細については、[Amazon EC2 インスタンスタイプ](https://aws.amazon.com/ec2/instance-types/)ページの「*Accelerated Computing*」セクションを参照してください。SMP v2 がサポートするインスタンスタイプについては、「[サポートされるインスタンスタイプ](distributed-model-parallel-support-v2.md#distributed-model-parallel-supported-instance-types-v2)」を参照してください。

高速コンピューティングインスタンスを使用したとしても、パラメータ数が約 100 億のモデル (Megatron-LM、T5 など) や、パラメータが数千億のさらに大規模なモデル (GPT-3 など) では、各 GPU デバイスにモデルのレプリカが収まらない場合があります。

## ライブラリがモデルの並列処理とメモリ節約の手法を採用している方法
<a name="model-parallel-intro-features-v2"></a>

このライブラリは、さまざまなタイプのモデル並列処理機能と、オプティマイザ状態のシャーディング、アクティベーションチェックポイント、アクティベーションオフロードなどのメモリ節約機能で構成されています。これらの手法をすべて組み合わせることで、数千億のパラメータで構成される大規模なモデルを効率的にトレーニングできます。

**Topics**
+ [シャーディングデータ並列処理](#model-parallel-intro-sdp-v2)
+ [エキスパート並列処理](#model-parallel-intro-expert-parallelism-v2)
+ [テンソル並列性](#model-parallel-intro-tp-v2)
+ [アクティベーションチェックポイントとオフロード](#model-parallel-intro-activation-offloading-checkpointing-v2)
+ [モデルに適した手法の選択](#model-parallel-intro-choosing-techniques-v2)

### シャーディングデータ並列処理
<a name="model-parallel-intro-sdp-v2"></a>

シャーディングデータ並列処理は、メモリを節約する分散トレーニング手法で、モデルの状態 (モデルパラメータ、勾配、およびオプティマイザの状態) をデータ並列グループ内の GPU 間で分割します。

SMP v2 は、FSDP を活用してシャーディングデータ並列処理を実装し、これを拡張して、ブログ記事「[Near-linear scaling of gigantic-model training on AWS](https://www.amazon.science/blog/near-linear-scaling-of-gigantic-model-training-on-aws)」で説明されているスケールに応じたハイブリッドシャーディング戦略を実装しています。

シャーディングデータ並列処理は、スタンドアロンの戦略としてモデルに適用できます。さらに、NVIDIA A100 Tensor コア GPU を搭載した最も高性能な GPU インスタンス (`ml.p4d.24xlarge` および `ml.p4de.24xlarge`) を使用している場合は、[SageMaker データ並列処理 (SMDDP) ライブラリ](data-parallel.md)が提供する `AllGather` 演算を活用し、トレーニング速度を向上させることができます。

シャーディングデータ並列処理について深く理解し、その設定方法や、テンソル並列処理や混合精度トレーニングなどの他の手法と組み合わせて使用する方法を確認するには、「[ハイブリッドシャーディングデータ並列処理](model-parallel-core-features-v2-sharded-data-parallelism.md)」を参照してください。

### エキスパート並列処理
<a name="model-parallel-intro-expert-parallelism-v2"></a>

SMP v2 は [NVIDIA Megatron](https://github.com/NVIDIA/Megatron-LM) との統合によって、ネイティブの PyTorch FSDP API のサポートに加えて、*エキスパート並列処理*を実装しています。PyTorch FSDP のトレーニングコードをそのまま使いつつ、SMP のエキスパート並列処理を適用して、SageMaker AI 内で *Mixture of Experts* (MoE) モデルをトレーニングできます。

MoE モデルはトランスフォーマーモデルの一種です。複数の*エキスパート* (専門家) で構成され、それぞれがニューラルネットワークを形成していますが、通常これはフィードフォワードネットワーク (FFN) です。*ルーター*と呼ばれるゲートネットワークが、どのトークンをどのエキスパートに送信するかを決定します。エキスパートは、それぞれが入力データの特定の側面の処理に特化しているので、モデルのトレーニングを高速化し、コンピューティングコストを削減しながらも、対応する密なモデルと同じパフォーマンス品質を達成できます。また、*エキスパート並列処理*は、MoE モデルのエキスパートを複数の GPU デバイス間に分散させる並列処理手法です。

SMP v2 で MoE モデルをトレーニングする方法については、「[エキスパート並列処理](model-parallel-core-features-v2-expert-parallelism.md)」を参照してください。

### テンソル並列性
<a name="model-parallel-intro-tp-v2"></a>

*テンソル並列処理*は、個々のレイヤー (`nn.Modules`) を複数のデバイスに分散させ、並列で実行します。次の図は、SMP ライブラリがモデルを 4 つのレイヤーに分割し、二重のテンソル並列処理 (`"tensor_parallel_degree": 2`) を実現する最も簡単な例を示しています。この図では、モデル並列グループ、テンソル並列グループ、データ並列グループの表記はそれぞれ `MP_GROUP`、`TP_GROUP`、および `DP_GROUP` です。各モデルレプリカのレイヤーは 2 分割され、2 つの GPU に分散されます。このライブラリは、テンソル分散モデルのレプリカ間の通信を管理します。

![SMP ライブラリがモデルを 4 つのレイヤーに分割して二重のテンソル並列処理 ("tensor_parallel_degree": 2) を実現する最も簡単な例。](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/distributed/model-parallel/smp-v2-tensor-parallel.png)


PyTorch のテンソル並列処理やその他のメモリ節約機能の詳細と、これらの主要機能を組み合わせて設定する方法については、「[テンソル並列性](model-parallel-core-features-v2-tensor-parallelism.md)」を参照してください。

### アクティベーションチェックポイントとオフロード
<a name="model-parallel-intro-activation-offloading-checkpointing-v2"></a>

GPU メモリを節約するため、ライブラリはアクティベーションチェックポイントをサポートしています。これにより、フォワードパス中にユーザー指定モジュールの内部アクティベーションが GPU メモリに保存されるのを防ぐことができます。ライブラリはバックワードパス中にこれらのアクティベーションを再計算します。さらにアクティベーションオフロードを使用すると、保存されているアクティベーションを CPU メモリにオフロードし、バックワードパス中に GPU に戻すことで、アクティベーションメモリのフットプリントをさらに削減できます。これらの機能の使い方の詳細については、「[アクティベーションチェックポイント](model-parallel-core-features-v2-pytorch-activation-checkpointing.md)」および「[アクティベーションオフロード](model-parallel-core-features-v2-pytorch-activation-offloading.md)」を参照してください。

### モデルに適した手法の選択
<a name="model-parallel-intro-choosing-techniques-v2"></a>

適切な手法と設定の選び方の詳細については、「[SageMaker 分散モデル並列処理のベストプラクティス](model-parallel-best-practices-v2.md)」を参照してください。