

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

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

*Mixture of Experts* (MoE) モデルは、*疎*アプローチを採用したトランスフォーマーモデルの一種であり、従来の密結合モデルと比べてトレーニングが軽量化されます。この MoE ニューラルネットワークアーキテクチャでは、各入力に対して、モデルのコンポーネント (*エキスパート*と呼ばれる) の一部のみが利用されます。このアプローチにはいくつか利点があり、例えば、モデルのサイズが大きい場合でも、トレーニングを効率化し、推論を高速化できます。つまり、密結合のモデルをトレーニングする場合と同じコンピューティング予算で、MoE を使えばもっと大きなモデルやデータセットを扱うことができます。

MoE モデルは複数の*エキスパート* (専門家) で構成され、それぞれがニューラルネットワークを形成していますが、通常これはフィードフォワードネットワーク (FFN) です。*ルーター*と呼ばれるゲートネットワークが、どのトークンをどのエキスパートに送信するかを決定します。エキスパートは、それぞれが入力データの特定の側面の処理に特化しているので、モデルのトレーニングを高速化し、コンピューティングコストを削減しながらも、対応する密なモデルと同じパフォーマンス品質を達成できます。Mixture of Experts 全般の詳細については、*NVIDIA Developer ウェブサイト*の「[Applying Mixture of Experts in LLM Architectures](https://developer.nvidia.com/blog/applying-mixture-of-experts-in-llm-architectures/)」を参照してください。

*エキスパート並列処理*は、並列処理の一種であり、MoE モデルのエキスパートを複数の GPU デバイス間に分散させます。

SMP v2 は、[NVIDIA Megatron](https://github.com/NVIDIA/Megatron-LM) との統合によってエキスパート並列処理を実装し、MoE モデルのトレーニングに対応しています。また、PyTorch FSDP の API 上で動作します。PyTorch FSDP のトレーニングコードをそのまま使いつつ、SMP のエキスパート並列処理を有効にして MoE モデルをトレーニングできます。

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

SMP v2 は、現時点では、次の Hugging Face トランスフォーマーモデルでエキスパート並列処理をサポートしています。
+ [Mixtral](https://huggingface.co/docs/transformers/en/model_doc/mixtral)

## エキスパート並列処理を設定する
<a name="model-parallel-core-features-v2-expert-parallelism-configure"></a>

`expert_parallel_degree` では、エキスパート並列処理の並列度を示す値を選択します。クラスター内の GPU の数を割り切れる値にする必要があります。例えば、GPU 数が 8 のインスタンスを使用している場合にモデルをシャーディング (分割) するには、2、4、または 8 を選択します。小さい数から始めて、モデルが 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) 設定については、一切変更する必要はありません。`expert_parallel_degree` パラメータの詳細については、「[SMP v2 の主要機能の設定パラメータ](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config)」をご参照ください。

**注記**  
[ハイブリッドシャーディングデータ並列処理](model-parallel-core-features-v2-sharded-data-parallelism.md) と併せてエキスパート並列処理を使用できます。現時点では、エキスパート並列処理にはテンソル並列処理との互換性がありません。

**注記**  
このエキスパート並列処理トレーニング機能は、SageMaker と PyTorch ライブラリの以下の組み合わせで使用できます。  
SMP v2.3.0 以降
SageMaker Python SDK v2.214.4 以降
PyTorch v2.2.0 以降

### トレーニングスクリプト内
<a name="model-parallel-core-features-v2-expert-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 でラップします。その API に `config` パラメータを追加して MoE を有効にします。次のコードスニペットでは、汎用モデルクラスの `AutoModelForCausalLM` で SMP MoE を有効にする方法を示しています。MoE トランスフォーマーモデルの設定を、最初からトレーニングを行う場合は `from_config` メソッド、ファインチューニングする場合は `from_pretrained` メソッドを使用して取得します。SMP `MoEConfig` クラスの詳細については、「[`torch.sagemaker.moe.moe_config.MoEConfig`](distributed-model-parallel-v2-reference.md#model-parallel-v2-torch-sagemaker-reference-moe)」を参照してください。

```
# Import the torch.sagemaker.transform API and initialize.
import torch.sagemaker as tsm
tsm.init()

# Import transformers AutoModelForCausalLM class.
from transformers import AutoModelForCausalLM

# Import the SMP-implementation of MoE configuration class.
from torch.sagemaker.moe.moe_config import MoEConfig

# Define a transformer model with an MoE model configuration
model = AutoModelForCausalLM.from_config(MoEModelConfig)

# Wrap it by torch.sagemaker.transform with the SMP MoE configuration.
model = tsm.transform(
    model, 
    config=MoEConfig(
        smp_moe=True,
        random_seed=12345,
        moe_load_balancing="sinkhorn",
        global_token_shuffle=False,
        moe_all_to_all_dispatcher=True,
        moe_aux_loss_coeff=0.001,
        moe_z_loss_coeff=0.001
    )
)
```

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

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

```
{   
    ..., # other SMP config parameters
    "expert_parallel_degree": 8
}
```