

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

# トレーニングスクリプトを変更してインスタンスグループを割り当てる
<a name="train-heterogeneous-cluster-modify-training-script"></a>

前のセクションで説明した異種クラスター設定により、トレーニングジョブ用の SageMaker トレーニング環境とインスタンスが準備されました。インスタンスグループを特定のトレーニングとデータ処理タスクにさらに割り当てるために、次のステップでトレーニングスクリプトを変更します。デフォルトでは、トレーニングジョブはインスタンスのサイズに関係なくすべてのノードのトレーニングスクリプトのレプリカを作成するので、パフォーマンスが低下する可能性があります。

例えば、SageMaker AI 推定器の `entry_point` 引数にディープニューラルネットワークのトレーニングスクリプトを渡しながら、異種クラスターで CPU インスタンスと GPU インスタンスを混在させた場合、`entry_point` スクリプトは各インスタンスに複製されます。つまり、適切なタスク割り当てを行わないと、CPU インスタンスはスクリプト全体も実行し、GPU インスタンスでの分散トレーニング用に設計されたトレーニングジョブを開始します。そのため、オフロードして CPU インスタンス上で実行したい特定の処理関数に変更を加える必要があります。SageMaker AI の環境変数を使用して異種クラスターの情報を取得し、それに応じて特定のプロセスを実行させることができます。

トレーニングジョブを開始すると、トレーニングスクリプトは異種クラスター設定を含む SageMaker トレーニング環境情報を読み取ります。この設定には、現在のインスタンスグループ、各グループの現在のホスト、現在のホストがどのグループに属しているかなどの情報が含まれます。

次の方法で、SageMaker AI トレーニングジョブの初期化フェーズでインスタンスグループ情報をクエリできます。

**(推奨) SageMaker トレーニングツールキットによるインスタンスグループ情報の読み取り**

「[SageMaker training toolkit library](https://github.com/aws/sagemaker-training-toolkit)」が提供する環境 Python モジュールを使用します。ツールキットライブラリは TensorFlow および PyTorch 用の「[SageMaker framework containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)」にプリインストールされているため、ビルド済みコンテナを使用する場合は追加のインストール手順は必要ありません。これは、トレーニングスクリプトのコード変更を減らして SageMaker AI 環境変数を取得するための推奨方法です。

```
from sagemaker_training import environment

env = environment.Environment()
```

一般的な SageMaker トレーニングと異種クラスターに関連する環境変数:
+ `env.is_hetero` – 異種クラスターが設定されているかどうかを Boolean で返します。
+ `env.current_host` – 現在のホストを返します。
+ `env.current_instance_type` – 現在のホストのインスタンスのタイプを返します。
+ `env.current_instance_group` – 現在のインスタンスグループの名前を返します。
+ `env.current_instance_group_hosts` – 現在のインスタンスグループ内のホストのリストを返します。
+ `env.instance_groups` – トレーニングに使用するインスタンスグループ名のリストを返します。
+ `env.instance_groups_dict` – トレーニングジョブの異種クラスター構成全体を返します。
+ `env.distribution_instance_groups` – SageMaker AI 推定器クラスの `distribution` パラメータに割り当てられたインスタンスグループのリストを返します。
+ `env.distribution_hosts` – SageMaker AI 推定器クラスの `distribution` パラメータに割り当てられたインスタンスグループに属するホストのリストを返します。

例えば、次の 2 つのインスタンスグループで構成される異種クラスターの例を考えてみましょう。

```
from sagemaker.instance_group import InstanceGroup

instance_group_1 = InstanceGroup(
    "instance_group_1", "ml.c5.18xlarge", 1)
instance_group_2 = InstanceGroup(
    "instance_group_2", "ml.p3dn.24xlarge", 2)
```

この例の異種クラスターの `env.instance_groups_dict` 出力は、以下のようになっている必要があります。

```
{
    "instance_group_1": {
        "hosts": [
            "algo-2"
        ],
        "instance_group_name": "instance_group_1",
        "instance_type": "ml.c5.18xlarge"
    },
    "instance_group_2": {
        "hosts": [
            "algo-3",
            "algo-1"
        ],
        "instance_group_name": "instance_group_2",
        "instance_type": "ml.p3dn.24xlarge"
    }
}
```

**(オプション) リソース設定 JSON ファイルからのインスタンスグループ情報の読み取り**

JSON 形式で環境変数を取得したい場合は、リソース設定 JSON ファイルを直接使用できます。SageMaker トレーニングインスタンスの JSON ファイルは、デフォルトでは `/opt/ml/input/config/resourceconfig.json` にあります。

```
file_path = '/opt/ml/input/config/resourceconfig.json'
config = read_file_as_json(file_path)
print(json.dumps(config, indent=4, sort_keys=True))
```