

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

# Mengadaptasi skrip pelatihan Anda untuk menggunakan operasi kolektif SMDDP
<a name="data-parallel-modify-sdp-select-framework"></a>

Contoh skrip pelatihan yang disediakan di bagian ini disederhanakan dan hanya menyoroti perubahan yang diperlukan untuk mengaktifkan perpustakaan SageMaker AI distributed data parallelism (SMDDP) dalam skrip pelatihan Anda. Untuk contoh end-to-end notebook Jupyter yang menunjukkan cara menjalankan pekerjaan pelatihan terdistribusi dengan pustaka SMDDP, lihat. [Contoh perpustakaan paralelisme data Amazon SageMaker AI](distributed-data-parallel-v2-examples.md)

**Topics**
+ [Gunakan perpustakaan SMDDP dalam skrip pelatihan Anda PyTorch](data-parallel-modify-sdp-pt.md)
+ [Gunakan perpustakaan SMDDP dalam skrip pelatihan PyTorch Lightning Anda](data-parallel-modify-sdp-pt-lightning.md)
+ [Gunakan pustaka SMDDP dalam skrip TensorFlow pelatihan Anda (tidak digunakan lagi)](data-parallel-modify-sdp-tf2.md)

# Gunakan perpustakaan SMDDP dalam skrip pelatihan Anda PyTorch
<a name="data-parallel-modify-sdp-pt"></a>

[Mulai dari perpustakaan SageMaker AI distributed data parallelism (SMDDP) v1.4.0, Anda dapat menggunakan library sebagai opsi backend untuk paket terdistribusi. PyTorch ](https://pytorch.org/tutorials/beginner/dist_overview.html) Untuk menggunakan SMDDP `AllReduce` dan operasi `AllGather` kolektif, Anda hanya perlu mengimpor perpustakaan SMDDP di awal skrip pelatihan Anda dan menetapkan SMDDP sebagai backend modul terdistribusi selama inisialisasi grup proses. PyTorch Dengan satu baris spesifikasi backend, Anda dapat menyimpan semua modul PyTorch terdistribusi asli dan seluruh skrip pelatihan tidak berubah. [Cuplikan kode berikut menunjukkan cara menggunakan pustaka SMDDP sebagai backend paket pelatihan terdistribusi PyTorch berbasis: distributed [PyTorch data parallel (DDP), [PyTorch full sharded data parallelism](https://pytorch.org/docs/stable/fsdp.html) (FSDP)](https://pytorch.org/docs/stable/notes/ddp.html), dan Megatron-. [DeepSpeed](https://github.com/microsoft/DeepSpeed)DeepSpeed](https://github.com/microsoft/Megatron-DeepSpeed)

## Untuk PyTorch DDP atau FSDP
<a name="data-parallel-enable-for-ptddp-ptfsdp"></a>

Inisialisasi kelompok proses sebagai berikut.

```
import torch.distributed as dist
import smdistributed.dataparallel.torch.torch_smddp

dist.init_process_group(backend="smddp")
```

**catatan**  
(Hanya untuk pekerjaan PyTorch DDP) `smddp` Backend saat ini tidak mendukung pembuatan grup subproses dengan API. `torch.distributed.new_group()` Anda juga tidak dapat menggunakan `smddp` backend secara bersamaan dengan backend grup proses lainnya seperti dan. `NCCL` `Gloo`

## Untuk DeepSpeed atau Megatron- DeepSpeed
<a name="data-parallel-enable-for-deepspeed"></a>

Inisialisasi kelompok proses sebagai berikut.

```
import deepspeed
import smdistributed.dataparallel.torch.torch_smddp

deepspeed.init_distributed(dist_backend="smddp")
```

**catatan**  
Untuk menggunakan SMDDP `AllGather` dengan peluncur `mpirun` berbasis (`smdistributed`dan`pytorchddp`) di[Meluncurkan pekerjaan pelatihan terdistribusi dengan SMDDP menggunakan Python SageMaker SDK](data-parallel-use-api.md), Anda juga perlu mengatur variabel lingkungan berikut dalam skrip pelatihan Anda.  

```
export SMDATAPARALLEL_OPTIMIZE_SDP=true
```

Untuk panduan umum tentang menulis skrip pelatihan PyTorch FSDP, lihat [Pelatihan Model Lanjutan dengan Paralel Data Berbagi Penuh (FSDP](https://pytorch.org/tutorials/intermediate/FSDP_adavnced_tutorial.html)) dalam dokumentasi. PyTorch

Untuk panduan umum tentang menulis skrip pelatihan PyTorch DDP, lihat [Memulai dengan data terdistribusi paralel](https://pytorch.org/tutorials/intermediate/ddp_tutorial.html) dalam PyTorch dokumentasi.

Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan ke[Meluncurkan pekerjaan pelatihan terdistribusi dengan SMDDP menggunakan Python SageMaker SDK](data-parallel-use-api.md).

# Gunakan perpustakaan SMDDP dalam skrip pelatihan PyTorch Lightning Anda
<a name="data-parallel-modify-sdp-pt-lightning"></a>

Jika Anda ingin membawa skrip pelatihan [PyTorchLightning](https://pytorch-lightning.readthedocs.io/en/latest/starter/introduction.html) dan menjalankan pekerjaan pelatihan paralel data terdistribusi di SageMaker AI, Anda dapat menjalankan pekerjaan pelatihan dengan sedikit perubahan dalam skrip pelatihan Anda. Perubahan yang diperlukan meliputi: mengimpor PyTorch modul `smdistributed.dataparallel` perpustakaan, mengatur variabel lingkungan untuk PyTorch Lightning untuk menerima variabel lingkungan SageMaker AI yang telah ditetapkan oleh toolkit SageMaker pelatihan, dan mengaktifkan perpustakaan SMDDP dengan menyetel backend grup proses ke. `"smddp"` Untuk mempelajari lebih lanjut, ikuti instruksi berikut yang memecah langkah-langkah dengan contoh kode.

**catatan**  
Dukungan PyTorch Lightning tersedia di perpustakaan paralel data SageMaker AI v1.5.0 dan yang lebih baru.

## PyTorch Petir == v2.1.0 dan == 2.0.1 PyTorch
<a name="smddp-pt-201-lightning-210"></a>

1. Impor `pytorch_lightning` perpustakaan dan `smdistributed.dataparallel.torch` modul.

   ```
   import lightning as pl
   import smdistributed.dataparallel.torch.torch_smddp
   ```

1. Instantiate. [LightningEnvironment](https://pytorch-lightning.readthedocs.io/en/stable/api/pytorch_lightning.plugins.environments.LightningEnvironment.html)

   ```
   from lightning.fabric.plugins.environments.lightning import LightningEnvironment
   
   env = LightningEnvironment()
   env.world_size = lambda: int(os.environ["WORLD_SIZE"])
   env.global_rank = lambda: int(os.environ["RANK"])
   ```

1. **Untuk PyTorch DDP** — Buat objek [DDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.DDPStrategy.html)kelas dengan `"smddp"` for `process_group_backend` dan `"gpu"` for`accelerator`, dan berikan itu ke kelas [Trainer](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html).

   ```
   import lightning as pl
   from lightning.pytorch.strategies import DDPStrategy
   
   ddp = DDPStrategy(
       cluster_environment=env, 
       process_group_backend="smddp", 
       accelerator="gpu"
   )
   
   trainer = pl.Trainer(
       max_epochs=200, 
       strategy=ddp, 
       devices=num_gpus, 
       num_nodes=num_nodes
   )
   ```

   **Untuk PyTorch FSDP** [- Buat objek [FSDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.FSDPStrategy.html)kelas (dengan [kebijakan pembungkus](https://pytorch.org/docs/stable/fsdp.html) pilihan) dengan `"smddp"` for `process_group_backend` dan `"gpu"` for`accelerator`, dan teruskan ke kelas Trainer.](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html)

   ```
   import lightning as pl
   from lightning.pytorch.strategies import FSDPStrategy
   
   from functools import partial
   from torch.distributed.fsdp.wrap import size_based_auto_wrap_policy
   
   policy = partial(
       size_based_auto_wrap_policy, 
       min_num_params=10000
   )
   
   fsdp = FSDPStrategy(
       auto_wrap_policy=policy,
       process_group_backend="smddp", 
       cluster_environment=env
   )
   
   trainer = pl.Trainer(
       max_epochs=200, 
       strategy=fsdp, 
       devices=num_gpus, 
       num_nodes=num_nodes
   )
   ```

Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan ke[Meluncurkan pekerjaan pelatihan terdistribusi dengan SMDDP menggunakan Python SageMaker SDK](data-parallel-use-api.md). 

**catatan**  
Saat Anda membuat PyTorch estimator SageMaker AI dan mengajukan permintaan pekerjaan pelatihan[Meluncurkan pekerjaan pelatihan terdistribusi dengan SMDDP menggunakan Python SageMaker SDK](data-parallel-use-api.md), Anda perlu menyediakan `requirements.txt` untuk menginstal `pytorch-lightning` dan `lightning-bolts` dalam wadah PyTorch pelatihan SageMaker AI.  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
Untuk informasi selengkapnya tentang menentukan direktori sumber untuk menempatkan `requirements.txt` file bersama dengan skrip pelatihan dan pengiriman pekerjaan, lihat [Menggunakan pustaka pihak ketiga](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12) dalam dokumentasi Amazon *AI SageMaker Python* SDK.

# Gunakan pustaka SMDDP dalam skrip TensorFlow pelatihan Anda (tidak digunakan lagi)
<a name="data-parallel-modify-sdp-tf2"></a>

**penting**  
Pustaka SMDDP menghentikan dukungan untuk TensorFlow dan tidak lagi tersedia di TensorFlow lebih dari DLCs v2.11.0. Untuk menemukan sebelumnya TensorFlow DLCs dengan perpustakaan SMDDP diinstal, lihat. [Kerangka kerja yang didukung](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks)

Langkah-langkah berikut menunjukkan cara memodifikasi skrip TensorFlow pelatihan untuk memanfaatkan perpustakaan paralel data terdistribusi SageMaker AI.  

Perpustakaan APIs dirancang agar mirip dengan Horovod APIs. Untuk detail tambahan tentang setiap API yang ditawarkan library TensorFlow, lihat [dokumentasi TensorFlow API paralel data terdistribusi SageMaker AI](https://sagemaker.readthedocs.io/en/stable/api/training/smd_data_parallel.html#api-documentation).

**catatan**  
SageMaker AI distributed data parallel dapat disesuaikan dengan skrip TensorFlow pelatihan yang terdiri dari modul `tf` inti kecuali `tf.keras` modul. SageMaker AI distributed data parallel tidak mendukung TensorFlow implementasi Keras.

**catatan**  
Pustaka paralelisme data terdistribusi SageMaker AI mendukung Automatic Mixed Precision (AMP) di luar kotak. Tidak diperlukan tindakan tambahan untuk mengaktifkan AMP selain modifikasi tingkat kerangka kerja pada skrip pelatihan Anda. Jika gradien masuk FP16, perpustakaan paralelisme data SageMaker AI menjalankan operasinya `AllReduce` di. FP16 Untuk informasi selengkapnya tentang penerapan AMP APIs ke skrip pelatihan Anda, lihat sumber daya berikut:  
[Kerangka kerja - TensorFlow dalam dokumentasi](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow) *NVIDIA Deep Learning Performance*
[Presisi Campuran Otomatis untuk Pembelajaran Mendalam](https://developer.nvidia.com/automatic-mixed-precision) di *Dokumen Pengembang NVIDIA*
[TensorFlow presisi campuran APIs](https://www.tensorflow.org/guide/mixed_precision) dalam *TensorFlowdokumentasi*

1. Impor TensorFlow klien perpustakaan dan inisialisasi.

   ```
   import smdistributed.dataparallel.tensorflow as sdp 
   sdp.init()
   ```

1. Sematkan setiap GPU ke satu `smdistributed.dataparallel` proses dengan `local_rank` —ini mengacu pada peringkat relatif proses dalam node tertentu. `sdp.tensorflow.local_rank()`API memberi Anda peringkat lokal perangkat. Node pemimpin adalah peringkat 0, dan node pekerja adalah peringkat 1, 2, 3, dan seterusnya. Ini dipanggil dalam blok kode berikut sebagai`sdp.local_rank()`. `set_memory_growth`tidak terkait langsung dengan SageMaker AI yang didistribusikan, tetapi harus ditetapkan untuk pelatihan terdistribusi dengan TensorFlow. 

   ```
   gpus = tf.config.experimental.list_physical_devices('GPU')
   for gpu in gpus:
       tf.config.experimental.set_memory_growth(gpu, True)
   if gpus:
       tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')
   ```

1. Skala tingkat pembelajaran dengan jumlah pekerja. `sdp.tensorflow.size()`API memberi Anda jumlah pekerja di cluster. Ini dipanggil dalam blok kode berikut sebagai`sdp.size()`. 

   ```
   learning_rate = learning_rate * sdp.size()
   ```

1. Gunakan perpustakaan `DistributedGradientTape` untuk mengoptimalkan `AllReduce` operasi selama pelatihan. Ini membungkus`tf.GradientTape`.  

   ```
   with tf.GradientTape() as tape:
         output = model(input)
         loss_value = loss(label, output)
       
   # SageMaker AI data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape
   tape = sdp.DistributedGradientTape(tape)
   ```

1. Siarkan variabel model awal dari node pemimpin (peringkat 0) ke semua node pekerja (peringkat 1 hingga n). Ini diperlukan untuk memastikan inisialisasi yang konsisten di semua peringkat pekerja. Gunakan `sdp.tensorflow.broadcast_variables` API setelah variabel model dan pengoptimal diinisialisasi. Ini dipanggil dalam blok kode berikut sebagai`sdp.broadcast_variables()`. 

   ```
   sdp.broadcast_variables(model.variables, root_rank=0)
   sdp.broadcast_variables(opt.variables(), root_rank=0)
   ```

1. Terakhir, modifikasi skrip Anda untuk menyimpan pos pemeriksaan hanya pada node pemimpin. Node pemimpin memiliki model yang disinkronkan. Ini juga menghindari node pekerja yang menimpa pos pemeriksaan dan mungkin merusak pos pemeriksaan. 

   ```
   if sdp.rank() == 0:
       checkpoint.save(checkpoint_dir)
   ```

Berikut ini adalah contoh skrip TensorFlow pelatihan untuk pelatihan terdistribusi dengan perpustakaan.

```
import tensorflow as tf

# SageMaker AI data parallel: Import the library TF API
import smdistributed.dataparallel.tensorflow as sdp

# SageMaker AI data parallel: Initialize the library
sdp.init()

gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)
if gpus:
    # SageMaker AI data parallel: Pin GPUs to a single library process
    tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')

# Prepare Dataset
dataset = tf.data.Dataset.from_tensor_slices(...)

# Define Model
mnist_model = tf.keras.Sequential(...)
loss = tf.losses.SparseCategoricalCrossentropy()

# SageMaker AI data parallel: Scale Learning Rate
# LR for 8 node run : 0.000125
# LR for single node run : 0.001
opt = tf.optimizers.Adam(0.000125 * sdp.size())

@tf.function
def training_step(images, labels, first_batch):
    with tf.GradientTape() as tape:
        probs = mnist_model(images, training=True)
        loss_value = loss(labels, probs)

    # SageMaker AI data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape
    tape = sdp.DistributedGradientTape(tape)

    grads = tape.gradient(loss_value, mnist_model.trainable_variables)
    opt.apply_gradients(zip(grads, mnist_model.trainable_variables))

    if first_batch:
       # SageMaker AI data parallel: Broadcast model and optimizer variables
       sdp.broadcast_variables(mnist_model.variables, root_rank=0)
       sdp.broadcast_variables(opt.variables(), root_rank=0)

    return loss_value

...

# SageMaker AI data parallel: Save checkpoints only from master node.
if sdp.rank() == 0:
    checkpoint.save(checkpoint_dir)
```

Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan ke[Meluncurkan pekerjaan pelatihan terdistribusi dengan SMDDP menggunakan Python SageMaker SDK](data-parallel-use-api.md). 