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 PyTorch di allenamento
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. torch.nn.functional
torch.nn
Per PyTorch 1.12.0
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 APIssagemaker-debugger
client. Segui le seguenti istruzioni che descrivono le fasi con esempi di codice.
-
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 usando Python SageMaker SDK con una delle regole o delle DebuggerHookConfig regole del tuo estimatore, l' SageMaker IA aggiunge un file di JSON configurazione 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, EC2 istanze Amazon o sui tuoi dispositivi locali, usa
smd.Hook
class 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. Ismd.get_hook
API rendimenti in questo caso.None
Se vuoi creare un hook manuale per salvare i tensori in modalità locale, usa il seguente frammento di codice con la logica per verificare se
smd.get_hook
API restituisceNone
e crea un hook manuale usando 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 ) -
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 usando Python SageMaker 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. -
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 ognisave_interval
che imposterai durante la configurazione in Avvia lavori di formazione con Debugger usando Python SageMaker SDK e li salva nella raccolta"losses"
.hook.register_loss(loss_function)
-
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)
-
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)
-
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 e può essere qualsiasi stringa tu TensorBoard voglia.
-
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 argomentocollections_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 usando Python SageMaker SDK.