Utilizzo di Debugger con container di addestramento personalizzati - 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à.

Utilizzo di Debugger con container di addestramento personalizzati

Amazon SageMaker Debugger è disponibile per tutti i modelli di deep learning che introduci in Amazon SageMaker AI. La AWS CLI, l’API Estimator SageMaker AI e le API Debugger consentono di utilizzare qualsiasi immagine di base Docker per creare e personalizzare container per addestrare i modelli. Per utilizzare Debugger con container personalizzati, è necessario apportare una modifica minima allo script di addestramento per implementare la richiamata dell’hook Debugger e recuperare i tensori dai processi di addestramento. Nelle seguenti sezioni verrà illustrato l’utilizzo di Debugger con container di addestramento personalizzati.

Sono necessarie le seguenti risorse per creare un container personalizzato con Debugger.

Per un esempio end-to-end di utilizzo di Debugger con un container di addestramento personalizzato, consulta il seguente esempio di notebook.

Suggerimento

Questa guida relativa ai container personalizzati con Debugger è un'estensione della guida Adattamento del container di addestramento che illustra come creare e inviare un container di addestramento personalizzato ad Amazon ECR.

Preparazione per la creazione di un container di addestramento personalizzato

Per creare un container docker, la struttura di base dei file deve essere la seguente:

├── debugger_custom_container_test_notebook.ipynb # a notebook to run python snippet codes └── debugger_custom_container_test_folder # this is a docker folder ├── your-training-script.py # your training script with Debugger hook └── Dockerfile # a Dockerfile to build your own container

Registrazione di hook Debugger nel tuo script di addestramento

Per eseguire il debug dell'addestramento del modello, è necessario aggiungere un hook Debugger allo script di addestramento.

Nota

Questa fase è necessaria per raccogliere i parametri del modello (tensori di output) per il debug dell'addestramento del modello. Se desideri solo monitorare e profilare, puoi saltare questa fase di registrazione degli hook ed escludere il parametro debugger_hook_config durante la creazione di uno stimatore.

Il codice di esempio seguente mostra la struttura di uno script di addestramento che utilizza il modello Keras ResNet50 e come passare l'hook Debugger come richiamata Keras per il debug. Per trovare uno script di addestramento completo, consulta Script di addestramento TensorFlow con l’hook Debugger SageMaker.

# An example of training script (your-training-script.py) import tensorflow.compat.v2 as tf from tensorflow.keras.applications.resnet50 import ResNet50 import smdebug.tensorflow as smd def train(batch_size, epoch, model, hook): ... model.fit(X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, # smdebug modification: Pass the Debugger hook in the main() as a Keras callback callbacks=[hook]) def main(): parser=argparse.ArgumentParser(description="Train resnet50 cifar10") # hyperparameter settings parser.add_argument(...) args = parser.parse_args() model=ResNet50(weights=None, input_shape=(32,32,3), classes=10) # Add the following line to register the Debugger hook for Keras. hook=smd.KerasHook.create_from_json_file() # Start the training. train(args.batch_size, args.epoch, model, hook) if __name__ == "__main__": main()

Per ulteriori informazioni sulla registrazione dell'hook Debugger per i framework e gli algoritmi supportati, consulta i seguenti collegamenti nella libreria client SMDebug:

Negli script di addestramento dei notebook di esempio seguenti, puoi trovare altri esempi su come aggiungere gli hook Debugger agli script di addestramento e raccogliere i tensori di output in dettaglio:

  • Debugger in modalità script con un framework TensorFlow 2.1

    Per vedere la differenza tra l'utilizzo di Debugger in un Deep Learning Container e in modalità script, aprire questo notebook e inserirlo affiancato al Debugger precedente in un esempio di notebook TensorFlow v2.1 di Deep Learning Container.

    In modalità script, la parte di configurazione hook viene rimossa dallo script in cui si imposta lo strumento di valutazione. Invece, la funzionalità hook Debugger viene unita nello script di addestramento, script di addestramento TensorFlow Keras ResNet in modalità script. Lo script di addestramento importa la libreria smdebug nell'ambiente TensorFlow Keras richiesto per comunicare con l'algoritmo TensorFlow ResNet50. Implementa anche manualmente la funzionalità hook smdebug aggiungendo l'argomento callbacks=[hook] all'interno della funzione train (nella riga 49) e aggiungendo la configurazione manuale dell'hook (nella riga 89) fornita tramite l’SDK SageMaker Python.

    In questo esempio di modalità script viene eseguito il processo di addestramento nel framework TF 2.1 per il confronto diretto con la modifica dello script zero nell'esempio TF 2.1. Il vantaggio della configurazione di Debugger in modalità script è la flessibilità di scegliere versioni framework non coperte da AWS Deep Learning Containers.

  • Utilizzo di Debugger Amazon SageMaker in un container PyTorch in modalità script

    Questo notebook abilita Debugger in modalità script nel framework PyTorch v1.3.1. PyTorch v1.3.1 è supportato dai container SageMaker AI e questo esempio mostra nei dettagli come modificare uno script di addestramento.

    Lo strumento di stima SageMaker AI PyTorch è già in modalità script per impostazione predefinita. Nel notebook, la linea per attivare script_mode non è inclusa nella configurazione dello strumento di stima.

    Questo notebook mostra le fasi dettagliate per modificare lo script di addestramento PyTorch originale in una versione modificata con Debugger abilitato. Inoltre, questo esempio mostra come è possibile utilizzare le regole integrate di Debugger per rilevare problemi di addestramento, come il problema di gradienti di fuga, e le funzionalità di prova di Debugger per chiamare e analizzare i tensori salvati.

Creazione e configurazione di un Dockerfile

Apri SageMaker AI JupyterLab e crea una nuova cartella, debugger_custom_container_test_folder in questo esempio, per salvare lo script di addestramento e Dockerfile. Il seguente esempio di codice è un Dockerfile che include i comandi di build docker essenziali. Incolla il seguente codice nel file di testo Dockerfile e salvalo. Carica lo script di addestramento nella stessa cartella.

# Specify a docker base image FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3 RUN /usr/bin/python3 -m pip install --upgrade pip RUN pip install --upgrade protobuf # Install required packages to enable the SageMaker Python SDK and the smdebug library RUN pip install sagemaker-training RUN pip install smdebug CMD ["bin/bash"]

Se desideri utilizzare un'immagine predefinita di AWS Deep Learning Container, consulta Immagini di AWS Deep Learning Containers disponibili.

Creazione e invio del container di addestramento personalizzato su Amazon ECR

Crea un notebook di test, debugger_custom_container_test_notebook.ipynb, ed esegui il seguente codice nella cella del notebook. Questo accederà alla directory debugger_byoc_test_docker, creerà il docker con quanto il algorithm_namespecificato e invierà il container docker al tuo Amazon ECR.

import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'sagemaker-debugger-mnist-byoc-tf2' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) !docker build -t $ecr_repository docker !$(aws ecr get-login --region $region --registry-ids $account_id --no-include-email) !aws ecr create-repository --repository-name $ecr_repository !docker tag {ecr_repository + tag} $byoc_image_uri !docker push $byoc_image_uri
Suggerimento

Se utilizzi una delle immagini di base di AWS Deep Learning Container, esegui il codice seguente per accedere ad Amazon ECR e accedere al repository di immagini del Deep Learning Container.

! aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com

Avvio e debug dei job di addestramento utilizzando il container di addestramento personalizzato

Dopo aver creato e inviato il container Docker ad Amazon ECR, configura uno strumento di stima SageMaker AI con lo script di addestramento e i parametri specifici di Debugger. Dopo aver eseguito estimator.fit(), Debugger raccoglierà i tensori di output, li monitorerà e rileverà i problemi di addestramento. Utilizzando i tensori salvati, è possibile analizzare ulteriormente il processo di addestramento utilizzando le funzionalità e gli strumenti principali smdebug. Configurando un flusso di lavoro del processo di monitoraggio delle regole di Debugger con Eventi Amazon CloudWatch e AWS Lambda, puoi automatizzare un processo di arresto del processo di addestramento ogni volta che le regole di Debugger rilevano problemi di addestramento.

import sagemaker from sagemaker.estimator import Estimator from sagemaker.debugger import Rule, DebuggerHookConfig, CollectionConfig, rule_configs profiler_config=ProfilerConfig(...) debugger_hook_config=DebuggerHookConfig(...) rules=[ Rule.sagemaker(rule_configs.built_in_rule()), ProfilerRule.sagemaker(rule_configs.BuiltInRule()) ] estimator=Estimator( image_uri=byoc_image_uri, entry_point="./debugger_custom_container_test_folder/your-training-script.py" role=sagemaker.get_execution_role(), base_job_name='debugger-custom-container-test', instance_count=1, instance_type='ml.p3.2xlarge', # Debugger-specific parameters profiler_config=profiler_config, debugger_hook_config=debugger_hook_config, rules=rules ) # start training estimator.fit()