

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

# Gunakan pustaka SMDDP di 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 DLC untuk versi lebih baru dari v2.11.0 TensorFlow . Untuk menemukan TensorFlow DLC sebelumnya dengan pustaka 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 pust SageMaker aka paralel data terdistribusi AI.  

API pustaka dirancang agar mirip dengan API Horovod. Untuk detail tambahan tentang setiap API yang ditawarkan pustaka 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 Data terdistribusi AI paralel dapat disesuaikan dengan skrip TensorFlow pelatihan yang terdiri dari modul `tf` inti kecuali `tf.keras` modul. SageMaker Data terdistribusi AI paralel tidak mendukung TensorFlow implementasi Keras.

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

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 dari 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 di blok kode berikut sebagai`sdp.local_rank()`. `set_memory_growth`tidak terkait langsung dengan SageMaker AI yang didistribusikan, tetapi harus diatur 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 di 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. Menyiarkan 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 jajaran pekerja. Gunakan `sdp.tensorflow.broadcast_variables` API setelah variabel model dan pengoptimal diinisialisasi. Ini dipanggil di 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, ubah skrip Anda untuk menyimpan checkpoint hanya pada node pemimpin. Node pemimpin memiliki model yang disinkronkan. Ini juga menghindari node pekerja yang mengganti 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 SDK SageMaker](data-parallel-use-api.md). 