Adatta il tuo script di addestramento PyTorch - Amazon SageMaker AI

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 addestramento PyTorch

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

Nota

SageMaker Debugger non può raccogliere i tensori di output del modello dalle operazioni API torch.nn.functional. Quando si scrive uno script di addestramento per PyTorch, si consiglia di utilizzare i moduli torch.nn.

Per PyTorch 1.12.0

Se porti uno script di addestramento PyTorch, puoi 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 nella libreria client sagemaker-debugger. Segui le seguenti istruzioni che descrivono le fasi con esempi di codice.

  1. Crea un hook.

    (Consigliato) Per job di addestramento all’interno di SageMaker AI

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

    All’avvio di un job di addestramento in Avvio dei job di addestramento con Debugger utilizzando SageMaker Python SDK con uno qualsiasi degli oggetti DebuggerHookConfig, TensorBoardConfig o Rules dello strumento di stima, SageMaker AI aggiunge un file di configurazione JSON all’istanza di addestramento raccolta dalla funzione get_hook. Nota che se non includi nessuna delle API di configurazione nel tuo strumento di valutazione, non ci sarà alcun file di configurazione che l'hook possa trovare e la funzione restituirà None.

    (Facoltativo) Per job di addestramento esterni a SageMaker AI

    Se esegui processi di addestramento in modalità locale, direttamente sulle istanze SageMaker Notebook, sulle istanze Amazon EC2 o sui tuoi dispositivi locali, usa la classe smd.Hook per creare un hook. Tuttavia, questo approccio può memorizzare solo le raccolte di tensori ed è utilizzabile per la visualizzazione di TensorBoard. Le regole integrate di SageMaker Debugger non funzionano con la modalità locale perché le regole richiedono istanze di addestramento ML di SageMaker AI 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 )
  2. 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 Avvio dei job di addestramento con Debugger utilizzando SageMaker Python SDK. 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 di queste istruzioni.

  3. 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 Avvio dei job di addestramento con Debugger utilizzando SageMaker Python SDK e li salva nella raccolta "losses".

    hook.register_loss(loss_function)
  4. 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)
  5. 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)
  6. Usa hook.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 tu voglia.

  7. Usa hook.save_tensor() per salvare i tensori personalizzati. Analogamente a hook.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 Avvio dei job di addestramento con Debugger utilizzando SageMaker Python SDK.