

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 mendaftarkan hook
<a name="debugger-modify-script"></a>

[Amazon SageMaker Debugger dilengkapi dengan pustaka klien yang disebut Python `sagemaker-debugger` SDK.](https://sagemaker-debugger.readthedocs.io/en/website) `sagemaker-debugger`Python SDK menyediakan alat untuk mengadaptasi skrip pelatihan Anda sebelum pelatihan dan alat analisis setelah pelatihan. Di halaman ini, Anda akan belajar cara menyesuaikan skrip pelatihan Anda menggunakan pustaka klien. 

`sagemaker-debugger`Python SDK menyediakan fungsi pembungkus yang membantu mendaftarkan hook untuk mengekstrak tensor model, tanpa mengubah skrip pelatihan Anda. Untuk memulai mengumpulkan tensor keluaran model dan men-debug mereka untuk menemukan masalah pelatihan, buat modifikasi berikut dalam skrip pelatihan Anda.

**Tip**  
Saat Anda mengikuti halaman ini, gunakan [dokumentasi SDK `sagemaker-debugger` open source](https://sagemaker-debugger.readthedocs.io/en/website/index.html) untuk referensi API.

**Topics**
+ [Sesuaikan skrip PyTorch pelatihan Anda](debugger-modify-script-pytorch.md)
+ [Sesuaikan skrip TensorFlow pelatihan Anda](debugger-modify-script-tensorflow.md)

# Sesuaikan skrip PyTorch pelatihan Anda
<a name="debugger-modify-script-pytorch"></a>

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

**catatan**  
SageMaker Debugger tidak dapat mengumpulkan tensor keluaran model dari operasi API. [https://pytorch.org/docs/stable/nn.functional.html](https://pytorch.org/docs/stable/nn.functional.html) Saat Anda menulis skrip PyTorch pelatihan, disarankan untuk menggunakan [https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html](https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html)modul sebagai gantinya.

## Untuk PyTorch 1.12.0
<a name="debugger-modify-script-pytorch-1-12-0"></a>

Jika Anda membawa skrip PyTorch pelatihan, Anda dapat menjalankan pekerjaan pelatihan dan mengekstrak tensor keluaran model dengan beberapa baris kode tambahan dalam skrip pelatihan Anda. Anda perlu menggunakan [hook APIs](https://sagemaker-debugger.readthedocs.io/en/website/hook-api.html) di perpustakaan `sagemaker-debugger` klien. Ikuti instruksi berikut yang memecah langkah-langkah dengan contoh kode.

1. Buat kait.

   **(Direkomendasikan) Untuk pekerjaan pelatihan dalam SageMaker AI**

   ```
   import smdebug.pytorch as smd
   hook=smd.get_hook(create_if_not_exists=True)
   ```

   Saat Anda meluncurkan pekerjaan pelatihan [Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK](debugger-configuration-for-debugging.md) dengan salah satu DebuggerHookConfig, TensorBoardConfig, atau Aturan di estimator Anda, SageMaker AI menambahkan file konfigurasi JSON ke instance pelatihan Anda yang diambil oleh fungsi tersebut`get_hook`. 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 kembali`None`.

   **(Opsional) Untuk pekerjaan pelatihan di luar SageMaker AI**

   Jika Anda menjalankan tugas pelatihan dalam mode lokal, langsung di instans SageMaker Notebook, instans Amazon EC2, atau perangkat lokal Anda sendiri, `smd.Hook` gunakan 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 karena Aturan memerlukan instans pelatihan SageMaker AI dan S3 untuk menyimpan output dari instance jarak jauh secara real time. `smd.get_hook`API kembali `None` dalam kasus ini. 

   Jika Anda ingin membuat hook manual untuk menyimpan tensor dalam mode lokal, gunakan cuplikan kode berikut dengan logika untuk memeriksa apakah `smd.get_hook` API kembali `None` dan membuat hook manual menggunakan kelas. `smd.Hook` Perhatikan bahwa Anda dapat menentukan direktori output apa pun di mesin lokal Anda.

   ```
   import smdebug.pytorch as smd
   hook=smd.get_hook(create_if_not_exists=True)
   
   if hook is None:
       hook=smd.Hook(
           out_dir='/path/to/your/local/output/',
           export_tensorboard=True
       )
   ```

1. Bungkus model Anda dengan metode kelas hook.

   `hook.register_module()`Metode ini mengambil model Anda dan mengulangi setiap lapisan, mencari tensor apa pun yang cocok dengan ekspresi reguler yang akan Anda berikan melalui konfigurasi. [Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK](debugger-configuration-for-debugging.md) Tensor yang dapat dikoleksi melalui metode kait ini adalah bobot, bias, aktivasi, gradien, input, dan output.

   ```
   hook.register_module(model)
   ```
**Tip**  
Jika Anda mengumpulkan seluruh tensor keluaran dari model pembelajaran mendalam yang besar, ukuran total koleksi tersebut dapat tumbuh secara eksponensial dan dapat menyebabkan kemacetan. Jika Anda ingin menyimpan tensor tertentu, Anda juga dapat menggunakan metode ini`hook.save_tensor()`. Metode ini membantu Anda memilih variabel untuk tensor tertentu dan menyimpannya ke koleksi khusus bernama sesuai keinginan. Untuk informasi lebih lanjut, lihat [langkah 7](#debugger-modify-script-pytorch-save-custom-tensor) dari instruksi ini.

1. Warp fungsi loss dengan metode kelas hook.

   `hook.register_loss`Metodenya adalah membungkus fungsi kerugian. Ini mengekstrak nilai kerugian setiap `save_interval` yang akan Anda atur selama konfigurasi[Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK](debugger-configuration-for-debugging.md), dan menyimpannya ke `"losses"` koleksi.

   ```
   hook.register_loss(loss_function)
   ```

1. Tambahkan `hook.set_mode(ModeKeys.TRAIN)` di blok kereta. Ini menunjukkan pengumpulan tensor diekstraksi selama fase pelatihan.

   ```
   def train():
       ...
       hook.set_mode(ModeKeys.TRAIN)
   ```

1. Tambahkan `hook.set_mode(ModeKeys.EVAL)` di blok validasi. Ini menunjukkan koleksi tensor diekstraksi selama fase validasi.

   ```
   def validation():
       ...
       hook.set_mode(ModeKeys.EVAL)
   ```

1. Gunakan [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar)untuk menyimpan skalar khusus. Anda dapat menyimpan nilai skalar yang tidak ada dalam model Anda. Misalnya, jika Anda ingin merekam nilai akurasi yang dihitung selama evaluasi, tambahkan baris kode berikut di bawah baris tempat Anda menghitung akurasi.

   ```
   hook.save_scalar("accuracy", accuracy)
   ```

   Perhatikan bahwa Anda perlu memberikan string sebagai argumen pertama untuk memberi nama koleksi skalar kustom. Ini adalah nama yang akan digunakan untuk memvisualisasikan nilai skalar di TensorBoard, dan dapat berupa string apa pun yang Anda inginkan.

1. <a name="debugger-modify-script-pytorch-save-custom-tensor"></a>Gunakan [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor)untuk menyimpan tensor khusus. Demikian pula [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar), Anda dapat menyimpan tensor tambahan, menentukan koleksi tensor Anda sendiri. Misalnya, Anda dapat mengekstrak data gambar input yang diteruskan ke model dan menyimpannya sebagai tensor khusus dengan menambahkan baris kode berikut, yang `"images"` merupakan contoh nama tensor khusus, `image_inputs` adalah variabel contoh untuk data gambar input.

   ```
   hook.save_tensor("images", image_inputs)
   ```

   Perhatikan bahwa Anda harus memberikan string ke argumen pertama untuk memberi nama tensor khusus. `hook.save_tensor()`memiliki argumen ketiga `collections_to_write` untuk menentukan koleksi tensor untuk menyimpan tensor khusus. Nilai default-nya `collections_to_write="default"`. Jika Anda tidak menentukan argumen ketiga secara eksplisit, tensor khusus disimpan ke koleksi `"default"` tensor.

Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan ke[Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK](debugger-configuration-for-debugging.md).

# Sesuaikan skrip TensorFlow pelatihan Anda
<a name="debugger-modify-script-tensorflow"></a>

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

**Buat pengait untuk pekerjaan pelatihan dalam SageMaker AI**

```
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](debugger-configuration-for-debugging.md) dengan salah satu`DebuggerHookConfig`,`TensorBoardConfig`, atau `Rules` di estimator Anda, SageMaker AI menambahkan file konfigurasi JSON ke instance pelatihan Anda yang diambil oleh metode tersebut`smd.get_hook`. 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 kembali`None`.

**(Opsional) Buat pengait untuk pekerjaan pelatihan di luar SageMaker AI**

Jika Anda menjalankan tugas pelatihan dalam mode lokal, langsung di instans SageMaker Notebook, instans Amazon EC2, atau perangkat lokal Anda sendiri, `smd.Hook` gunakan 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_hook`Metode 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
<a name="debugger-modify-script-tensorflow-keras"></a>

Preseden berikut memandu Anda melalui cara menggunakan kait 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. [Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK](debugger-configuration-for-debugging.md) Tensor yang dapat dikoleksi melalui metode kait ini adalah bobot, bias, dan aktivasi.

   ```
   model=tf.keras.Model(...)
   hook.register_model(model)
   ```

1. Bungkus pengoptimal dengan `hook.wrap_optimizer()` metode.

   ```
   optimizer=tf.keras.optimizers.Adam(...)
   optimizer=hook.wrap_optimizer(optimizer)
   ```

1. 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 AI 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
   )
   ```

1. Daftarkan kait ke [https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit)metode ini.

   Untuk mengumpulkan tensor dari kait yang Anda daftarkan, tambahkan `callbacks=[hook]` ke metode kelas Keras`model.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]
   )
   ```

1. TensorFlow 2.x hanya menyediakan variabel gradien simbolik yang tidak menyediakan akses ke nilainya. Untuk mengumpulkan gradien, bungkus `tf.GradientTape` dengan [https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html#tensorflow-specific-hook-api](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html#tensorflow-specific-hook-api)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](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html) dokumentasi Python `sagemaker-debugger` SDK.*

Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan ke[Luncurkan pekerjaan pelatihan dengan Debugger menggunakan Python SageMaker SDK](debugger-configuration-for-debugging.md).