

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

# コンテキスト並列処理
<a name="model-parallel-core-features-v2-context-parallelism"></a>

*コンテキスト並列処理*は、並列処理の一種であり、モデルのアクティベーションをシーケンス次元に沿って分割します。他の[シーケンス並列処理](https://arxiv.org/abs/2205.05198)手法では、`LayerNorm` と `RMSNorm` しか分割しませんが、コンテキスト並列処理では、ネットワークの入力とすべての中間アクティベーションをシーケンス次元に沿って分割します。

SMP v2 は [Transformer Engine](https://docs.nvidia.com/deeplearning/transformer-engine/index.html) との統合によりコンテキスト並列処理を実現しており、PyTorch FSDP や SMP [テンソル並列性](model-parallel-core-features-v2-tensor-parallelism.md) と併用できます。モデルトレーニングでは、3 つの並列処理をすべて同時に有効化できます。コンテキスト並列処理は、アクティベーションサイズが大きく、シーケンス長が長いモデルのトレーニングに有用です。各デバイスがシーケンス次元に沿って一部のアテンションスコアやアテンション出力のみを計算すればよいため、全体の計算が高速化します。テンソル並列処理も、隠れ層の次元に沿って分割することで計算を高速化しますが、計算要件はシーケンス次元に対して二次的に増加することから、コンテキスト並列処理の利点の方がさらに大きくなっています。

## SMP コンテキスト並列処理と互換性のある Hugging Face Transformer モデル
<a name="model-parallel-core-features-v2-context-parallelism-supported-models"></a>

SMP v2 は、現時点では、次の Hugging Face トランスフォーマーモデルでコンテキスト並列処理をサポートしています。
+ GPT-NeoX
+ Llama 2 および Llama 3
+ [Mistral 7B](https://huggingface.co/mistralai/Mistral-7B-v0.3)

## コンテキスト並列処理を設定する
<a name="model-parallel-core-features-v2-context-parallelism-configure"></a>

クラスター内の GPU の数を割り切る整数値を `context_parallel_degree` パラメータに設定します。例えば、GPU 数が 8 のインスタンスがある場合は、`context_parallel_degree` に 2、4、または 8 を指定します。小さい `context_parallel_degree` 値から始めて、必要な入力シーケンス長を確保したうえでモデルが GPU メモリに収まるまで、徐々に値を増やすことをお勧めします。

次のコードスニペットでは、「[SageMaker モデル並列処理ライブラリ v2 を使用する](model-parallel-use-api-v2.md)」で紹介した 2 ステップのプロセスに従って、SMP 初期化モジュール `torch.sagemaker.init()` をトレーニングスクリプトに追加し、トレーニングジョブランチャーの SMP 設定ディクショナリを JSON 形式で設定する方法を示しています。PyTorch モデルや [PyTorch FSDP](https://pytorch.org/docs/stable/fsdp.html#module-torch.distributed.fsdp) 設定については、一切変更する必要はありません。`context_parallel_degree` パラメータの詳細については、「[SMP v2 の主要機能の設定パラメータ](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config)」をご参照ください。

### トレーニングスクリプト内
<a name="model-parallel-core-features-v2-context-parallelism-configure-in-script"></a>

[ステップ 1](model-parallel-use-api-v2.md#model-parallel-adapt-pytorch-script-v2) の一環として、`torch.sagemaker.init()` でスクリプトを初期化して SMP v2 を有効にし、モデルを [`torch.sagemaker.transform`](distributed-model-parallel-v2-reference.md#model-parallel-v2-torch-sagemaker-reference-transform) API でラップします。

SMP v2.6.0 以降では、`cp_comm_type` 引数を使用して、使用するコンテキスト並列実装を指定できます。SMP ライブラリは現在、`p2p` と `all_gather` の 2 つの実装をサポートしています。`p2p` 実装では、アテンションの実装中にピアツーピアの送受信呼び出しを使用してキーと値を蓄積します。非同期的に実行され、通信と計算をオーバーラップさせることができます。一方の `all_gather` 実装は、`AllGather` 集合演算を使用し、同期的に実行されます。

```
import torch.sagemaker as tsm
tsm.init()

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_config(..)
model = tsm.transform(model, cp_comm_type="p2p")
```

### SMP の設定
<a name="model-parallel-core-features-v2-context-parallelism-configure-in-estimator"></a>

[ステップ 2](model-parallel-use-api-v2.md#model-parallel-launch-a-training-job-v2) の一環として、SageMaker PyTorch 推定器の SMP 設定ディクショナリに次のパラメータを追加します。

```
{   
    ..., # other SMP config parameters
    "context_parallel_degree": 2
}
```