

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menjalankan pekerjaan pelatihan pada cluster heterogen
<a name="train-heterogeneous-cluster"></a>

Dengan menggunakan fitur klaster heterogen dari SageMaker Pelatihan, Anda dapat menjalankan pekerjaan pelatihan dengan beberapa jenis instans ML untuk penskalaan dan pemanfaatan sumber daya yang lebih baik untuk tugas dan tujuan pelatihan ML yang berbeda. Misalnya, jika pekerjaan pelatihan Anda di klaster dengan instans GPU mengalami pemanfaatan GPU yang rendah dan masalah kemacetan CPU karena tugas intensif CPU, menggunakan klaster heterogen dapat membantu menurunkan tugas intensif CPU dengan menambahkan grup instans CPU yang lebih hemat biaya, menyelesaikan masalah kemacetan tersebut, dan mencapai pemanfaatan GPU yang lebih baik.

**catatan**  
Fitur ini tersedia di SageMaker Python SDK v2.98.0 dan yang lebih baru.

**catatan**  
Fitur ini tersedia melalui kelas SageMaker AI [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html)dan penaksir [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)kerangka kerja. Kerangka kerja yang didukung adalah PyTorch v1.10 atau yang lebih baru dan TensorFlow v2.6 atau yang lebih baru.

Lihat juga blog [Tingkatkan kinerja harga pelatihan model Anda menggunakan klaster heterogen Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/improve-price-performance-of-your-model-training-using-amazon-sagemaker-heterogeneous-clusters/).

**Topics**
+ [Konfigurasikan pekerjaan pelatihan dengan cluster heterogen di Amazon AI SageMaker](train-heterogeneous-cluster-configure.md)
+ [Jalankan pelatihan terdistribusi pada cluster heterogen di Amazon AI SageMaker](train-heterogeneous-cluster-configure-distributed.md)
+ [Ubah skrip latihan Anda untuk menetapkan grup instans](train-heterogeneous-cluster-modify-training-script.md)

# Konfigurasikan pekerjaan pelatihan dengan cluster heterogen di Amazon AI SageMaker
<a name="train-heterogeneous-cluster-configure"></a>

Bagian ini memberikan instruksi tentang cara menjalankan pekerjaan pelatihan menggunakan cluster heterogen yang terdiri dari beberapa jenis instance.

Perhatikan hal berikut sebelum Anda mulai. 
+ Semua grup instance berbagi gambar Docker dan skrip pelatihan yang sama. Oleh karena itu, skrip pelatihan Anda harus dimodifikasi untuk mendeteksi grup instans mana yang dimilikinya dan eksekusi fork yang sesuai.
+ Fitur cluster heterogen tidak kompatibel dengan mode lokal SageMaker AI.
+ Aliran CloudWatch log Amazon dari pekerjaan pelatihan klaster heterogen tidak dikelompokkan berdasarkan grup instans. Anda perlu mencari tahu dari log node mana yang ada di grup mana.

**Topics**
+ [Opsi 1: Menggunakan SageMaker Python SDK](#train-heterogeneous-cluster-configure-pysdk)
+ [Opsi 2: Menggunakan level rendah SageMaker APIs](#train-heterogeneous-cluster-configure-api)

## Opsi 1: Menggunakan SageMaker Python SDK
<a name="train-heterogeneous-cluster-configure-pysdk"></a>

Ikuti petunjuk tentang cara mengonfigurasi grup instance untuk cluster heterogen menggunakan SageMaker Python SDK.

1. Untuk mengonfigurasi grup instance dari cluster heterogen untuk pekerjaan pelatihan, gunakan `sagemaker.instance_group.InstanceGroup` kelas. Anda dapat menentukan nama kustom untuk setiap grup instans, jenis instans, dan jumlah instance untuk setiap grup instans. Untuk informasi selengkapnya, lihat [sagemaker.instance\$1group. InstanceGroup](https://sagemaker.readthedocs.io/en/stable/api/utility/instance_group.html)dalam dokumentasi *SageMaker AI Python SDK*.
**catatan**  
Untuk informasi selengkapnya tentang jenis instans yang tersedia dan jumlah maksimum grup instans yang dapat Anda konfigurasikan dalam klaster heterogen, lihat referensi [ InstanceGroup](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InstanceGroup.html)API.

   Contoh kode berikut menunjukkan cara mengatur dua grup instance yang terdiri dari dua instance `ml.c5.18xlarge` khusus CPU bernama `instance_group_1` dan satu instance `ml.p3dn.24xlarge` GPU bernama`instance_group_2`, seperti yang ditunjukkan pada diagram berikut.  
![\[Contoh konseptual tentang bagaimana data dapat diberikan dalam SageMaker Training Job.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/HCTraining.png)

   Diagram sebelumnya menunjukkan contoh konseptual tentang bagaimana proses pra-pelatihan, seperti preprocessing data, dapat ditugaskan ke grup instance CPU dan mengalirkan data yang telah diproses sebelumnya ke grup instance GPU.

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

1. Dengan menggunakan objek grup instance, siapkan saluran input pelatihan dan tetapkan grup instance ke saluran melalui `instance_group_names` argumen [sagemaker.inputs. TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)kelas. `instance_group_names`Argumen menerima daftar string nama grup contoh.

   Contoh berikut menunjukkan cara mengatur dua saluran input pelatihan dan menetapkan grup instance yang dibuat dalam contoh langkah sebelumnya. Anda juga dapat menentukan jalur bucket Amazon S3 ke `s3_data` argumen untuk grup instans untuk memproses data untuk tujuan penggunaan Anda.

   ```
   from sagemaker.inputs import TrainingInput
   
   training_input_channel_1 = TrainingInput(
       s3_data_type='S3Prefix', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile
       s3_data='s3://your-training-data-storage/folder1',
       distribution='FullyReplicated', # Available Options: FullyReplicated | ShardedByS3Key 
       input_mode='File', # Available Options: File | Pipe | FastFile
       instance_groups=["instance_group_1"]
   )
   
   training_input_channel_2 = TrainingInput(
       s3_data_type='S3Prefix',
       s3_data='s3://your-training-data-storage/folder2',
       distribution='FullyReplicated',
       input_mode='File',
       instance_groups=["instance_group_2"]
   )
   ```

   Untuk informasi selengkapnya tentang argumen`TrainingInput`, lihat tautan berikut.
   + [Sagemaker.input. TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)kelas dalam dokumentasi *SageMaker Python SDK*
   + DataSourceAPI [S3](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) dalam Referensi *SageMaker AI API*

1. Konfigurasikan estimator SageMaker AI dengan `instance_groups` argumen seperti yang ditunjukkan pada contoh kode berikut. `instance_groups`Argumen menerima daftar `InstanceGroup` objek.
**catatan**  
Fitur cluster heterogen tersedia melalui SageMaker AI [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html)dan kelas estimator [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)kerangka kerja. Kerangka kerja yang didukung adalah PyTorch v1.10 atau yang lebih baru dan TensorFlow v2.6 atau yang lebih baru. Untuk menemukan daftar lengkap container framework, versi framework, dan versi Python yang tersedia, lihat [SageMaker AI Framework Container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) di repositori AWS Deep Learning Container GitHub .

------
#### [ PyTorch ]

   ```
   from sagemaker.pytorch import PyTorch
   
   estimator = PyTorch(
       ...
       entry_point='my-training-script.py',
       framework_version='x.y.z',    # 1.10.0 or later
       py_version='pyxy',            
       job_name='my-training-job-with-heterogeneous-cluster',
       instance_groups=[instance_group_1, instance_group_2]
   )
   ```

------
#### [ TensorFlow ]

   ```
   from sagemaker.tensorflow import TensorFlow
   
   estimator = TensorFlow(
       ...
       entry_point='my-training-script.py',
       framework_version='x.y.z', # 2.6.0 or later
       py_version='pyxy',
       job_name='my-training-job-with-heterogeneous-cluster',
       instance_groups=[instance_group_1, instance_group_2]
   )
   ```

------
**catatan**  
Pasangan `instance_count` argumen `instance_type` dan `instance_groups` argumen kelas estimator SageMaker AI saling eksklusif. Untuk pelatihan cluster homogen, gunakan pasangan `instance_count` argumen `instance_type` and. Untuk pelatihan cluster heterogen, gunakan`instance_groups`.
**catatan**  
Untuk menemukan daftar lengkap container framework, versi framework, dan versi Python yang tersedia, lihat [SageMaker AI Framework Container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) di repositori AWS Deep Learning Container GitHub .

1. Konfigurasikan `estimator.fit` metode dengan saluran input pelatihan yang dikonfigurasi dengan grup instans dan mulai pekerjaan pelatihan.

   ```
   estimator.fit(
       inputs={
           'training': training_input_channel_1, 
           'dummy-input-channel': training_input_channel_2
       }
   )
   ```

## Opsi 2: Menggunakan level rendah SageMaker APIs
<a name="train-heterogeneous-cluster-configure-api"></a>

Jika Anda menggunakan AWS Command Line Interface or AWS SDK untuk Python (Boto3) dan ingin menggunakan level rendah SageMaker APIs untuk mengirimkan permintaan pekerjaan pelatihan dengan klaster heterogen, lihat referensi API berikut.
+ [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)
+ [ResourceConfig ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ResourceConfig.html)
+ [InstanceGroup](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InstanceGroup.html)
+ [S3 DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)

# Jalankan pelatihan terdistribusi pada cluster heterogen di Amazon AI SageMaker
<a name="train-heterogeneous-cluster-configure-distributed"></a>

Melalui `distribution` argumen kelas estimator SageMaker AI, Anda dapat menetapkan grup instans tertentu untuk menjalankan pelatihan terdistribusi. Misalnya, asumsikan bahwa Anda memiliki dua grup instans berikut dan ingin menjalankan pelatihan multi-GPU pada salah satunya. 

```
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)
```

Anda dapat mengatur konfigurasi pelatihan terdistribusi untuk salah satu grup instance. Misalnya, contoh kode berikut menunjukkan cara menetapkan `training_group_2` dengan dua `ml.p3dn.24xlarge` instance ke konfigurasi pelatihan terdistribusi.

**catatan**  
Saat ini, hanya satu grup instance dari cluster heterogen yang dapat ditentukan ke konfigurasi distribusi.

**Dengan MPI**

------
#### [ PyTorch ]

```
from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    ...
    instance_groups=[instance_group_1, instance_group_2],
    distribution={
        "mpi": {
            "enabled": True, "processes_per_host": 8
        },
        "instance_groups": [instance_group_2]
    }
)
```

------
#### [ TensorFlow ]

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(
    ...
    instance_groups=[instance_group_1, instance_group_2],
    distribution={
        "mpi": {
            "enabled": True, "processes_per_host": 8
        },
        "instance_groups": [instance_group_2]
    }
)
```

------

**Dengan perpustakaan paralel data SageMaker AI**

------
#### [ PyTorch ]

```
from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    ...
    instance_groups=[instance_group_1, instance_group_2],
    distribution={
        "smdistributed": {
            "dataparallel": {
                "enabled": True
            }
        }, 
        "instance_groups": [instance_group_2]
    }
)
```

------
#### [ TensorFlow ]

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(
    ...
    instance_groups=[instance_group_1, instance_group_2],
    distribution={
        "smdistributed": {
            "dataparallel": {
                "enabled": True
            }
        }, 
        "instance_groups": [instance_group_2]
    }
)
```

------

**catatan**  
Saat menggunakan library paralel data SageMaker AI, pastikan grup instance terdiri dari [tipe instance yang didukung oleh library](https://docs.aws.amazon.com/sagemaker/latest/dg/distributed-data-parallel-support.html#distributed-data-parallel-supported-instance-types). 

Untuk informasi selengkapnya tentang perpustakaan paralel data SageMaker AI, lihat [Pelatihan Paralel Data SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel.html).

**Dengan perpustakaan paralel model SageMaker AI**

------
#### [ PyTorch ]

```
from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    ...
    instance_groups=[instance_group_1, instance_group_2],
    distribution={
        "smdistributed": {
            "modelparallel": {
                "enabled":True,
                "parameters": {
                    ...   # SageMaker AI model parallel parameters
                } 
            }
        }, 
        "instance_groups": [instance_group_2]
    }
)
```

------
#### [ TensorFlow ]

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(
    ...
    instance_groups=[instance_group_1, instance_group_2],
    distribution={
        "smdistributed": {
            "modelparallel": {
                "enabled":True,
                "parameters": {
                    ...   # SageMaker AI model parallel parameters
                } 
            }
        }, 
        "instance_groups": [instance_group_2]
    }
)
```

------

Untuk informasi lebih lanjut tentang perpustakaan paralel model SageMaker AI, lihat [Pelatihan Paralel Model SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/model-parallel.html).

# Ubah skrip latihan Anda untuk menetapkan grup instans
<a name="train-heterogeneous-cluster-modify-training-script"></a>

Dengan konfigurasi klaster heterogen di bagian sebelumnya, Anda telah menyiapkan lingkungan SageMaker pelatihan dan contoh untuk pekerjaan pelatihan Anda. Untuk menetapkan grup instans lebih lanjut ke tugas pelatihan dan pemrosesan data tertentu, langkah selanjutnya adalah memodifikasi skrip pelatihan Anda. Secara default, pekerjaan pelatihan hanya membuat replika skrip pelatihan untuk semua node terlepas dari ukuran instance, dan ini dapat menyebabkan hilangnya kinerja. 

Misalnya, jika Anda mencampur instance CPU dan instance GPU dalam cluster heterogen sambil meneruskan skrip pelatihan jaringan saraf dalam ke `entry_point` argumen estimator SageMaker AI, skrip direplikasi ke setiap `entry_point` instance. Ini berarti bahwa, tanpa penugasan tugas yang tepat, instance CPU juga menjalankan seluruh skrip dan memulai pekerjaan pelatihan yang dirancang untuk pelatihan terdistribusi pada instance GPU. Oleh karena itu, Anda harus membuat perubahan dalam fungsi pemrosesan tertentu yang ingin Anda bongkar dan jalankan pada instance CPU. Anda dapat menggunakan variabel lingkungan SageMaker AI untuk mengambil informasi cluster heterogen dan membiarkan proses tertentu berjalan sesuai dengan itu.

Ketika pekerjaan pelatihan Anda dimulai, skrip pelatihan Anda membaca informasi lingkungan SageMaker pelatihan yang mencakup konfigurasi klaster heterogen. Konfigurasi berisi informasi seperti grup instance saat ini, host saat ini di setiap grup, dan di grup mana host saat ini berada.

Anda dapat menanyakan informasi grup instans selama fase inisialisasi pekerjaan pelatihan SageMaker AI dengan cara berikut.

**(Disarankan) Membaca informasi grup instance dengan toolkit SageMaker pelatihan**

Gunakan modul Python lingkungan yang disediakan perpustakaan [toolkit SageMaker pelatihan](https://github.com/aws/sagemaker-training-toolkit). Pustaka toolkit sudah diinstal sebelumnya dalam [wadah SageMaker kerangka kerja](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) untuk TensorFlow dan PyTorch, jadi Anda tidak memerlukan langkah instalasi tambahan saat menggunakan kontainer bawaan. Ini adalah cara yang disarankan untuk mengambil variabel lingkungan SageMaker AI dengan lebih sedikit perubahan kode dalam skrip pelatihan Anda.

```
from sagemaker_training import environment

env = environment.Environment()
```

Variabel lingkungan yang terkait dengan SageMaker pelatihan umum dan cluster heterogen:
+ `env.is_hetero`— Mengembalikan hasil Boolean apakah cluster heterogen dikonfigurasi atau tidak.
+ `env.current_host`— Mengembalikan host saat ini.
+ `env.current_instance_type`— Mengembalikan jenis instance dari host saat ini.
+ `env.current_instance_group`— Mengembalikan nama grup instance saat ini.
+ `env.current_instance_group_hosts`— Mengembalikan daftar host dalam kelompok contoh saat ini.
+ `env.instance_groups`— Mengembalikan daftar nama grup contoh yang digunakan untuk pelatihan.
+ `env.instance_groups_dict`— Mengembalikan seluruh konfigurasi klaster heterogen dari pekerjaan pelatihan.
+ `env.distribution_instance_groups`— Mengembalikan daftar grup instance yang ditetapkan ke `distribution` parameter kelas estimator SageMaker AI.
+ `env.distribution_hosts`— Mengembalikan daftar host milik grup instance yang ditetapkan ke `distribution` parameter kelas estimator SageMaker AI.

Misalnya, perhatikan contoh berikut dari cluster heterogen yang terdiri dari dua kelompok contoh.

```
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)
```

Output `env.instance_groups_dict` dari contoh cluster heterogen harus serupa dengan berikut ini.

```
{
    "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"
    }
}
```

**(Opsional) Membaca informasi grup instance dari file JSON konfigurasi sumber daya**

Jika Anda lebih suka mengambil variabel lingkungan dalam format JSON, Anda dapat langsung menggunakan file JSON konfigurasi sumber daya. File JSON dalam instance SageMaker pelatihan terletak di secara `/opt/ml/input/config/resourceconfig.json` default.

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