Esegui processi di addestramento TensorFlow con il compilatore Addestramento SageMaker - Amazon SageMaker AI

Esegui processi di addestramento TensorFlow con il compilatore Addestramento SageMaker

Puoi utilizzare qualsiasi interfaccia SageMaker AI per eseguire un job di addestramento con il Compilatore SageMaker per l’addestramento: Amazon SageMaker Studio Classic, istanze del notebook Amazon SageMaker, AWS SDK per Python (Boto3) e AWS Command Line Interface.

Utilizzo di SageMaker Python SDK

Per attivare il Compilatore SageMaker per l’addestramento, aggiungi il parametro compiler_config allo strumento di stima TensorFlow o Hugging Face di SageMaker AI. Importa la classe TrainingCompilerConfig e passa un'istanza al parametro compiler_config. I seguenti esempi di codice mostrano la struttura delle classi degli strumenti di stima di SageMaker AI con il Compilatore SageMaker per l’addestramento attivato.

Suggerimento

Per iniziare con i modelli predefiniti forniti dalle librerie TensorFlow e Transformers, prova a utilizzare le dimensioni dei batch fornite nella tabella di riferimento su Modelli testati.

Nota

Il Compilatore SageMaker per l’addestramento per TensorFlow è disponibile tramite gli strumenti di stima del framework TensorFlow e Hugging Face di SageMaker AI.

Per informazioni adatte al tuo caso d'uso, consulta una delle seguenti opzioni.

TensorFlow
from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update the global learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_estimator=TensorFlow( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', framework_version='2.9.1', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_estimator.fit()

Per preparare lo script di addestramento, consulta le pagine seguenti.

Hugging Face Estimator with TensorFlow
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update the global learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', transformers_version='4.21.1', tensorflow_version='2.6.3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_huggingface_estimator.fit()

Per preparare lo script di addestramento, consulta le pagine seguenti.

Hugging Face Estimator with TensorFlow
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # choose an instance type, specify the number of instances you want to use, # and set the num_gpus variable the number of GPUs per instance. instance_count=1 instance_type='ml.p3.8xlarge' num_gpus=4 # the original max batch size that can fit to GPU memory without compiler batch_size_native=16 learning_rate_native=float('5e-5') # an updated max batch size that can fit to GPU memory with compiler batch_size=26 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count hyperparameters={ "n_gpus": num_gpus, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=instance_count, instance_type=instance_type, transformers_version='4.21.1', tensorflow_version='2.6.3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_huggingface_estimator.fit()
Suggerimento

Per preparare lo script di addestramento, consulta le pagine seguenti.

L'elenco seguente è il set minimo di parametri richiesti per eseguire un processo di addestramento SageMaker con il compilatore.

Nota

In caso di utilizzo dello strumento di stima Hugging Face di SageMaker AI, è necessario specificare i parametri transformers_version, tensorflow_version, hyperparameters e compiler_config per abilitare il Compilatore SageMaker per l’addestramento. Non è possibile utilizzare image_uri per specificare manualmente i Deep Learning Containers integrati nel compilatore Addestramento elencati in Framework supportati.

  • entry_point (str) — Obbligatorio. Specifica il nome del file dello script di addestramento.

  • instance_count (int) — Obbligatorio. Specifica il numero di istanze.

  • instance_type (str) — Obbligatorio. Specifica il tipo di istanza.

  • transformers_version (str) - Obbligatorio solo quando si utilizza lo strumento di stima Hugging Face di SageMaker AI. Specifica la versione della libreria Hugging Face Transformers supportata da SageMaker Training Compiler. Per trovare le versioni disponibili, consulta Framework supportati.

  • framework_version o tensorflow_version (str) — Obbligatorio. Specifica la versione di TensorFlow supportata dal compilatore Addestramento SageMaker. Per trovare le versioni disponibili, consulta Framework supportati.

    Nota

    In caso di utilizzo dello strumento di stima TensorFlow di SageMaker AI, è necessario specificare framework_version.

    In caso di utilizzo dello strumento di stima Hugging Face di SageMaker AI, è necessario specificare transformers_version e tensorflow_version.

  • hyperparameters (dict) — Facoltativo. Specifica gli iperparametri per il processo di addestramento, ad esempio n_gpusbatch_size, e learning_rate. Quando abiliti il compilatore Addestramento SageMaker, prova batch di dimensioni maggiori e regola il tasso di apprendimento di conseguenza. Per trovare casi di studio sull'uso del compilatore e sulle dimensioni dei batch modificate per migliorare la velocità di addestramento, consulta Modelli testati e Notebook e blog di esempio di SageMaker Training Compiler.

  • compiler_config (oggetto TrainingCompilerConfig) — Obbligatorio. Includi questo parametro per attivare il compilatore Addestramento SageMaker. I seguenti sono parametri per la classe TrainingCompilerConfig.

    • enabled (bool) — Facoltativo. Specifica True o False per attivare o disattivare il compilatore Addestramento SageMaker. Il valore predefinito è True.

    • debug (bool) — Facoltativo. Per ricevere log di addestramento più dettagliati relativi ai processi di addestramento accelerati dal compilatore, modificalo in True. Tuttavia, la registrazione aggiuntiva potrebbe aumentare il sovraccarico e rallentare il processo di addestramento compilato. Il valore predefinito è False.

avvertimento

Se attivi Debugger SageMaker, ciò potrebbe influire sulle prestazioni del compilatore Addestramento SageMaker. Ti consigliamo di disattivare Debugger durante l'esecuzione del compilatore Addestramento SageMaker per assicurarti che non ci sia alcun impatto sulle prestazioni. Per ulteriori informazioni, consulta Considerazioni. Per disattivare le funzionalità di Debugger, aggiungi i seguenti due argomenti allo strumento di valutazione:

disable_profiler=True, debugger_hook_config=False

Se il processo di addestramento con il compilatore viene avviato correttamente, durante la fase di inizializzazione del processo vengono ricevuti i seguenti log:

  • Con TrainingCompilerConfig(debug=False)

    Found configuration for Training Compiler Configuring SM Training Compiler...
  • Con TrainingCompilerConfig(debug=True)

    Found configuration for Training Compiler Configuring SM Training Compiler... Training Compiler set to debug mode

Utilizzo di SageMaker AI Python SDK ed estensione dei Container per il Deep Learning del framework SageMaker AI

AWS Deep Learning Containers (DLC) per TensorFlow utilizzano versioni adattate di TensorFlow che includono modifiche al framework open source TensorFlow. I Container per il Deep Learning del framework SageMaker AI sono ottimizzati per l’infrastruttura AWS sottostante e Amazon SageMaker AI. Con il vantaggio dell'utilizzo dei DLC, l'integrazione con il compilatore Addestramento SageMaker aggiunge ulteriori miglioramenti delle prestazioni rispetto al TensorFlow nativo. Inoltre, puoi creare un container di addestramento personalizzato estendendo l'immagine DLC.

Nota

Questa funzionalità di personalizzazione Docker è attualmente disponibile solo per TensorFlow.

Per estendere e personalizzare i Container DL SageMaker AI TensorFlow per il tuo caso d’uso, utilizza le seguenti istruzioni.

Crea un Dockerfile.

Utilizza il seguente modello Dockerfile per estendere il Container DL SageMaker AI TensorFlow. È necessario utilizzare l’immagine del Container DL SageMaker AI TensorFlow come immagine di base del container Docker. Per trovare gli URI delle immagini dei Container DL SageMaker AI TensorFlow, consulta Framework supportati.

# SageMaker AI TensorFlow Deep Learning Container image FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/tensorflow-training:<image-tag> ENV PATH="/opt/ml/code:${PATH}" # This environment variable is used by the SageMaker AI container # to determine user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # Add more code lines to customize for your use-case ...

Per ulteriori informazioni, consulta Fase 2: creare e caricare gli script di addestramento Dockerfile e Python.

Considera le seguenti insidie quando estendi i Container DL del framework SageMaker AI:

  • Non disinstallare o modificare in modo esplicito la versione dei pacchetti TensorFlow nei container SageMaker AI. In questo modo i pacchetti TensorFlow AWS ottimizzati vengono sovrascritti da pacchetti TensorFlow open source, il che potrebbe comportare un peggioramento delle prestazioni.

  • Fai attenzione ai pacchetti che hanno una particolare versione o variante di TensorFlow come dipendenza. Questi pacchetti potrebbero disinstallare implicitamente il TensorFlow AWS ottimizzato e installare pacchetti TensorFlow open source.

Ad esempio, esiste un problema noto per cui le librerie tensorflow/models e tensorflow/text tentano sempre di reinstallare TensorFlow open source. Se devi installare queste librerie per scegliere una versione specifica per il tuo caso d’uso, ti consigliamo di esaminare i Dockerfile dei Container DL SageMaker AI TensorFlow per la versione 2.9 o successiva. I percorsi dei Dockerfile sono in genere nel seguente formato: tensorflow/training/docker/<tensorflow-version>/py3/<cuda-version>/Dockerfile.gpu. Nei Dockerfile, dovresti trovare le righe di codice per reinstallare il binario TensorFlow gestito AWS (specificato nella variabile di ambiente TF_URL) e altre dipendenze in ordine. La sezione di reinstallazione sarà simile all'esempio seguente:

# tf-models does not respect existing installations of TensorFlow # and always installs open source TensorFlow RUN pip3 install --no-cache-dir -U \ tf-models-official==x.y.z RUN pip3 uninstall -y tensorflow tensorflow-gpu \ ; pip3 install --no-cache-dir -U \ ${TF_URL} \ tensorflow-io==x.y.z \ tensorflow-datasets==x.y.z

Crea e invia a ECR

Per creare e inviare il tuo container Docker ad Amazon ECR, segui le istruzioni nei seguenti link:

Esegui utilizzando lo strumento di valutazione SageMaker Python SDK

Utilizza lo strumento di stima del framework TensorFlow di SageMaker AI come al solito. Devi specificare image_uri per utilizzare il nuovo container ospitato in Amazon ECR.

import sagemaker, boto3 from sagemaker import get_execution_role from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'tf-custom-container-test' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format( account_id, region, uri_suffix, ecr_repository + tag ) byoc_image_uri # This should return something like # 111122223333.dkr.ecr.us-east-2.amazonaws.com/tf-custom-container-test:latest estimator = TensorFlow( image_uri=image_uri, role=get_execution_role(), base_job_name='tf-custom-container-test-job', instance_count=1, instance_type='ml.p3.8xlarge' compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) # Start training estimator.fit()

Abilitare il Compilatore SageMaker per l’addestramento utilizzando l’operazione API CreateTrainingJob SageMaker AI

Le opzioni di configurazione del compilatore Addestramento SageMaker devono essere specificate tramite il campo AlgorithmSpecification e HyperParameters nella sintassi della richiesta per l’operazione API CreateTrainingJob.

"AlgorithmSpecification": { "TrainingImage": "<sagemaker-training-compiler-enabled-dlc-image>" }, "HyperParameters": { "sagemaker_training_compiler_enabled": "true", "sagemaker_training_compiler_debug_mode": "false" }

Per trovare un elenco completo degli URI delle immagini dei container di deep learning su cui è implementato il compilatore Addestramento SageMaker, consulta Framework supportati.