

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à.

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

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

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

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

Se utilizzi uno script di PyTorch addestramento, puoi eseguire il processo di formazione ed estrarre i tensori di output del modello con alcune righe di codice aggiuntive nello script di addestramento. È necessario utilizzare l'[hook APIs](https://sagemaker-debugger.readthedocs.io/en/website/hook-api.html) nella libreria `sagemaker-debugger` client. 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 delle regole o delle DebuggerHookConfig regole del tuo estimatore, SageMaker AI aggiunge un file di configurazione JSON all'istanza di formazione che viene rilevato dalla `get_hook` funzione. TensorBoardConfig Nota che se non includi alcuna configurazione APIs nel tuo estimatore, non ci sarà alcun file di configurazione che l'hook possa trovare e la funzione verrà restituita. `None`

   **(Facoltativo) Per lavori di formazione al di fuori dell'IA SageMaker **

   Se esegui lavori di formazione in modalità locale, direttamente su istanze SageMaker Notebook, istanze Amazon EC2 o sui tuoi dispositivi locali, `smd.Hook` usa la classe per creare un hook. Tuttavia, questo approccio può solo memorizzare le raccolte di tensori e utilizzarlo per la visualizzazione. TensorBoard SageMaker Le regole integrate di Debugger non funzionano con la modalità locale perché le regole 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 [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) 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 e può essere qualsiasi stringa tu voglia. TensorBoard

1. <a name="debugger-modify-script-pytorch-save-custom-tensor"></a>Usa [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) per salvare i tensori personalizzati. Analogamente a [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), 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).