

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Adatta il tuo script di formazione PyTorch
<a name="debugger-modify-script-pytorch"></a>

**Nota**  
Amazon SageMaker Debugger non è più aperto a nuovi clienti. I clienti esistenti possono continuare a utilizzare il servizio normalmente. AWS continua a investire in miglioramenti della sicurezza e della disponibilità di Debugger, ma non prevediamo di introdurre nuove funzionalità. Per ulteriori informazioni, consulta [Modifica della disponibilità del debugger](debugger-availability-change.md). 

Per iniziare a raccogliere i tensori di output del modello ed eseguire il debug dei problemi di addestramento, apportate le seguenti modifiche allo script di addestramento. PyTorch 

**Nota**  
SageMaker Il debugger non è in grado di raccogliere i tensori di output del modello dalle operazioni API. [`torch.nn.functional`](https://pytorch.org/docs/stable/nn.functional.html) Quando si scrive uno script di PyTorch addestramento, si consiglia di utilizzare invece i [`torch.nn`](https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html) moduli.

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

Se si utilizza uno script di PyTorch addestramento, è possibile eseguire il processo di addestramento ed estrarre i tensori di output del modello con alcune righe di codice aggiuntive nello script di addestramento. Devi utilizzare le [API hook](https://sagemaker-debugger.readthedocs.io/en/website/hook-api.html) nella libreria client `sagemaker-debugger`. Segui le seguenti istruzioni che descrivono le fasi con esempi di codice.

1. Crea un hook.

   **(Consigliato) Per lavori di formazione nell'ambito dell' SageMaker IA **

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

   Quando avvii un processo di formazione [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md) con una qualsiasi delle regole presenti DebuggerHookConfig TensorBoardConfig ModelTrainer, SageMaker AI aggiunge un file di configurazione JSON all'istanza di formazione che viene raccolto dalla `get_hook` funzione. Nota che se non includi nessuna delle API di configurazione nella tua ModelTrainer, l'hook non troverà alcun file di configurazione e la funzione verrà restituita. `None`

   **(Facoltativo) Per lavori di formazione esterni all' SageMaker IA **

   Se esegui lavori di formazione in modalità locale, direttamente su istanze SageMaker Notebook, istanze Amazon EC2 o dispositivi locali, usa `smd.Hook` class per creare un hook. Tuttavia, questo approccio può solo archiviare le raccolte di tensori ed è utilizzabile per la visualizzazione. TensorBoard SageMaker Le regole integrate di Debugger non funzionano con la modalità locale perché richiedono istanze di addestramento SageMaker AI ML e S3 per archiviare gli output delle istanze remote in tempo reale. In questo caso , l’API `smd.get_hook` restituisce `None`. 

   Se desideri creare un hook manuale per salvare i tensori in modalità locale, usa il seguente frammento di codice con la logica per verificare se l'API `smd.get_hook` restituisce `None` e crea un hook manuale utilizzando la classe `smd.Hook`. Tieni presente che puoi specificare qualsiasi directory di output nel tuo computer locale.

   ```
   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. Esegui il wrapping del tuo modello con i metodi di classe dell'hook.

   Il metodo `hook.register_module()` prende il tuo modello e scorre attraverso ogni livello, cercando i tensori che corrispondono alle espressioni regolari che fornirai attraverso la configurazione in [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md). I tensori raccolti tramite questo metodo hook sono pesi, bias, attivazioni, gradienti, input e output.

   ```
   hook.register_module(model)
   ```
**Suggerimento**  
Se raccogli tutti i tensori di output da un modello di deep learning di grandi dimensioni, la dimensione totale di tali raccolte può aumentare esponenzialmente e causare colli di bottiglia. Se desideri salvare tensori specifici, puoi anche utilizzare il metodo `hook.save_tensor()`. Questo metodo ti aiuta a scegliere la variabile per il tensore specifico e a salvarla in una raccolta personalizzata denominata come desideri. Per ulteriori informazioni, consulta la [fase 7](#debugger-modify-script-pytorch-save-custom-tensor) di queste istruzioni.

1. Esegui il wrapping della funzione di perdita con i metodi di classe dell'hook.

   Il metodo `hook.register_loss` consiste nel racchiudere la funzione di perdita. Estrae i valori di perdita ogni `save_interval` che imposterai durante la configurazione in [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md) e li salva nella raccolta `"losses"`.

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

1. Aggiungi `hook.set_mode(ModeKeys.TRAIN)` nel blocco di addestramento. Ciò indica che la raccolta dei tensori viene estratta durante la fase di addestramento.

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

1. Aggiungi `hook.set_mode(ModeKeys.EVAL)` nel blocco di convalida. Ciò indica che la raccolta dei tensori viene estratta durante la fase di convalida.

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

1. Usa [`hook.save_scalar()`](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar) per salvare scalari personalizzati. Puoi salvare valori scalari che non sono presenti nel modello. Ad esempio, se desideri registrare i valori di precisione calcolati durante la valutazione, aggiungila seguente riga di codice sotto la riga in cui calcoli la precisione.

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

   Si noti che è necessario fornire una stringa come primo argomento per denominare la raccolta scalare personalizzata. Questo è il nome che verrà utilizzato per visualizzare i valori scalari in TensorBoard e può essere qualsiasi stringa desiderata.

1. <a name="debugger-modify-script-pytorch-save-custom-tensor"></a>Usa [`hook.save_tensor()`](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor) per salvare i tensori personalizzati. Analogamente a [`hook.save_scalar()`](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar), puoi salvare tensori aggiuntivi, definendo la tua raccolta di tensori. Ad esempio, puoi possibile estrarre i dati dell'immagine di input che vengono passati al modello e salvarli come tensore personalizzato aggiungendo la seguente riga di codice, dove `"images"` è riportato un nome di esempio del tensore personalizzato, `image_inputs` è una variabile di esempio per i dati dell'immagine di input.

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

   Nota che devi fornire una stringa al primo argomento per denominare il tensore personalizzato. `hook.save_tensor()` ha il terzo argomento `collections_to_write` per specificare la raccolta di tensori per salvare il tensore personalizzato. Il valore predefinito è `collections_to_write="default"`. Se non specifichi esplicitamente il terzo argomento, il tensore personalizzato viene salvato nella raccolta di tensori `"default"`.

Dopo aver completato l’adattamento dello script di addestramento, procedi con [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md).