Sesuaikan skrip TensorFlow pelatihan Anda - Amazon SageMaker

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

Sesuaikan skrip TensorFlow pelatihan Anda

Untuk mulai mengumpulkan tensor keluaran model dan masalah pelatihan debug, buat modifikasi berikut pada skrip pelatihan Anda TensorFlow .

Buat pengait untuk pekerjaan pelatihan di dalam SageMaker

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)

Ini menciptakan kait ketika Anda memulai pekerjaan SageMaker pelatihan. Saat Anda meluncurkan pekerjaan pelatihan Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK dengan salah satuDebuggerHookConfig,TensorBoardConfig, atau Rules di estimator Anda, SageMaker menambahkan file JSON konfigurasi ke instance pelatihan Anda yang diambil oleh smd.get_hook metode tersebut. Perhatikan bahwa jika Anda tidak menyertakan konfigurasi apa pun APIs di estimator Anda, tidak akan ada file konfigurasi yang dapat ditemukan oleh hook, dan fungsinya kembaliNone.

(Opsional) Buat pengait untuk pekerjaan pelatihan di luar SageMaker

Jika Anda menjalankan tugas pelatihan dalam mode lokal, langsung di instans SageMaker Notebook, EC2 instans Amazon, atau perangkat lokal Anda sendiri, gunakan smd.Hook class untuk membuat hook. Namun, pendekatan ini hanya dapat menyimpan koleksi tensor dan dapat digunakan untuk TensorBoard visualisasi. SageMaker Aturan bawaan Debugger tidak berfungsi dengan mode lokal. smd.get_hookMetode ini juga kembali None dalam kasus ini.

Jika Anda ingin membuat hook manual, gunakan cuplikan kode berikut dengan logika untuk memeriksa apakah hook kembali None dan membuat hook manual menggunakan kelas. smd.Hook

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True) if hook is None: hook=smd.KerasHook( out_dir='/path/to/your/local/output/', export_tensorboard=True )

Setelah menambahkan kode pembuatan hook, lanjutkan ke topik berikut untuk TensorFlow Keras.

catatan

SageMaker Debugger saat ini hanya mendukung TensorFlow Keras.

Daftarkan hook di skrip pelatihan TensorFlow Keras Anda

Preseden berikut memandu Anda melalui cara menggunakan hook dan metodenya untuk mengumpulkan skalar dan tensor keluaran dari model dan pengoptimal Anda.

  1. Bungkus model Keras dan pengoptimal Anda dengan metode kelas hook.

    hook.register_model()Metode ini mengambil model Anda dan mengulangi setiap lapisan, mencari tensor apa pun yang cocok dengan ekspresi reguler yang akan Anda berikan melalui konfigurasi di. Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK Tensor yang dapat dikoleksi melalui metode kait ini adalah bobot, bias, dan aktivasi.

    model=tf.keras.Model(...) hook.register_model(model)
  2. Bungkus pengoptimal dengan hook.wrap_optimizer() metode.

    optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
  3. Kompilasi model dalam mode bersemangat di. TensorFlow

    Untuk mengumpulkan tensor dari model, seperti tensor input dan output dari setiap lapisan, Anda harus menjalankan pelatihan dalam mode bersemangat. Jika tidak, SageMaker Debugger tidak akan dapat mengumpulkan tensor. Namun, tensor lain, seperti bobot model, bias, dan kerugian, dapat dikumpulkan tanpa berjalan secara eksplisit dalam mode bersemangat.

    model.compile( loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"], # Required for collecting tensors of each layer run_eagerly=True )
  4. Daftarkan kait ke tf.keras.Model.fit()metode ini.

    Untuk mengumpulkan tensor dari kait yang Anda daftarkan, tambahkan callbacks=[hook] ke metode kelas Kerasmodel.fit(). Ini akan melewati sagemaker-debugger hook sebagai callback Keras.

    model.fit( X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, callbacks=[hook] )
  5. TensorFlow 2.x hanya menyediakan variabel gradien simbolik yang tidak menyediakan akses ke nilainya. Untuk mengumpulkan gradien, bungkus tf.GradientTape dengan hook.wrap_tape()metode, yang mengharuskan Anda untuk menulis langkah pelatihan Anda sendiri sebagai berikut.

    def training_step(model, dataset): with hook.wrap_tape(tf.GradientTape()) as tape: pred=model(data) loss_value=loss_fn(labels, pred) grads=tape.gradient(loss_value, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables))

    Dengan membungkus pita, sagemaker-debugger kait dapat mengidentifikasi tensor keluaran seperti gradien, parameter, dan kerugian. Membungkus pita memastikan bahwa hook.wrap_tape() metode di sekitar fungsi objek tape, seperti,, push_tape() pop_tape()gradient(), akan mengatur penulis SageMaker Debugger dan menyimpan tensor yang disediakan sebagai input ke gradient() (variabel dan kerugian yang dapat dilatih) dan output dari (gradien). gradient()

    catatan

    Untuk mengumpulkan dengan loop pelatihan khusus, pastikan Anda menggunakan mode bersemangat. Jika tidak, SageMaker Debugger tidak dapat mengumpulkan tensor apa pun.

Untuk daftar lengkap tindakan yang APIs ditawarkan sagemaker-debugger hook untuk membuat kait dan menyimpan tensor, lihat Metode Hook dalam dokumentasi Python. sagemaker-debugger SDK

Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keLuncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK.