Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan pustaka SMDDP dalam skrip TensorFlow pelatihan Anda (tidak digunakan lagi)
penting
Pustaka SMDDP menghentikan dukungan untuk TensorFlow dan tidak lagi tersedia di DLC selambat-lambatnya v2.11.0. TensorFlow Untuk menemukan TensorFlow DLC sebelumnya dengan pustaka SMDDP diinstal, lihat. Kerangka kerja yang didukung
Langkah-langkah berikut menunjukkan cara memodifikasi skrip TensorFlow pelatihan untuk memanfaatkan SageMaker perpustakaan paralel data terdistribusi.
API pustaka dirancang agar mirip dengan API Horovod. Untuk detail tambahan tentang setiap API yang ditawarkan library TensorFlow, lihat dokumentasi TensorFlow API parallel data SageMaker terdistribusi
catatan
SageMaker distributed data parallel dapat disesuaikan dengan skrip TensorFlow pelatihan yang terdiri dari modul tf
inti kecuali tf.keras
modul. SageMaker distributed data parallel tidak mendukung TensorFlow implementasi Keras.
catatan
Pustaka paralelisme data SageMaker terdistribusi 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 berada di FP16, pustaka paralelisme SageMaker data menjalankan operasinya di FP16. AllReduce
Untuk informasi selengkapnya tentang penerapan API AMP ke skrip pelatihan Anda, lihat sumber daya berikut:
-
Kerangka kerja - TensorFlow dalam dokumentasi
NVIDIA Deep Learning Performance -
Presisi Campuran Otomatis untuk Pembelajaran Mendalam
di Dokumen Pengembang NVIDIA -
TensorFlow API presisi campuran
dalam TensorFlowdokumentasi
-
Impor TensorFlow klien perpustakaan dan inisialisasi.
import smdistributed.dataparallel.tensorflow as sdp sdp.init()
-
Sematkan setiap GPU ke satu
smdistributed.dataparallel
proses denganlocal_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 sebagaisdp.local_rank()
.set_memory_growth
tidak terkait langsung dengan SageMaker 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')
-
Skala tingkat pembelajaran dengan jumlah pekerja.
sdp.tensorflow.size()
API memberi Anda jumlah pekerja di cluster. Ini dipanggil dalam blok kode berikut sebagaisdp.size()
.learning_rate = learning_rate * sdp.size()
-
Gunakan perpustakaan
DistributedGradientTape
untuk mengoptimalkanAllReduce
operasi selama pelatihan. Ini membungkustf.GradientTape
.with tf.GradientTape() as tape: output = model(input) loss_value = loss(label, output) # SageMaker data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape tape = sdp.DistributedGradientTape(tape)
-
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 sebagaisdp.broadcast_variables()
.sdp.broadcast_variables(model.variables, root_rank=0) sdp.broadcast_variables(opt.variables(), root_rank=0)
-
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 data parallel: Import the library TF API import smdistributed.dataparallel.tensorflow as sdp # SageMaker 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 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 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 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 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 data parallel: Save checkpoints only from master node. if sdp.rank() == 0: checkpoint.save(checkpoint_dir)
Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keLangkah 2: Luncurkan pekerjaan pelatihan terdistribusi menggunakan SageMaker Python SDK.