Formazione incrementale con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Formazione incrementale con Amazon SageMaker JumpStart

Nel mese di dicembre 2020, AWS ha annunciato la disponibilità generale di Amazon SageMaker JumpStart, una capacità di Amazon Sage Maker che ti aiuta a iniziare rapidamente e facilmente con l'apprendimento automatico (ML). SageMaker JumpStart fornisce la messa a punto e l'implementazione con un clic di un'ampia varietà di modelli pre-addestrati per le attività di machine learning più comuni, nonché una selezione di soluzioni end-to-end che risolvono problemi aziendali comuni. Queste funzionalità eliminano il lavoro gravoso da ogni fase del processo di machine learning, semplificando lo sviluppo di modelli di alta qualità e riducendo i tempi di implementazione.

Tutto il contenuto JumpStart era precedentemente disponibile solo tramite Amazon Sage Maker Studio, che fornisce a interfaccia grafica intuitiva per interagire con la funzione. Di recente, anche noi ha annunciato il lancio di facile utilizzo API JumpStart come estensione di SageMaker Python SDK, che consente di distribuire e ottimizzare a livello di codice un'ampia selezione di modelli pre-addestrati supportati da JumpStart sui propri set di dati. Questo lancio sblocca l'utilizzo delle funzionalità JumpStart nei flussi di lavoro del codice, nelle pipeline MLOps e in qualsiasi altro luogo in cui stai interagendo con SageMaker tramite SDK.

In questo post, siamo lieti di annunciare che tutti i modelli JumpStart addestrabili ora supportano la formazione incrementale. L'addestramento incrementale consente di addestrare un modello che è già stato ottimizzato utilizzando un set di dati esteso che contiene un modello sottostante non considerato nelle precedenti esecuzioni di ottimizzazione, che ha comportato prestazioni scadenti del modello. L'addestramento incrementale consente di risparmiare tempo e risorse perché non è necessario riqualificare il modello da zero. Se vuoi passare direttamente al codice API JumpStart che spieghiamo in questo post, puoi fare riferimento al taccuino di esempio.

Panoramica di JumpStart

JumpStart è un prodotto multiforme che include diverse funzionalità per aiutarti a iniziare rapidamente con ML su SageMaker. Al momento della scrittura, JumpStart ti consente di fare quanto segue:

  • Distribuisci modelli pre-addestrati per attività di machine learning comuni – JumpStart consente di affrontare le comuni attività di machine learning senza alcuno sforzo di sviluppo, fornendo una facile distribuzione di modelli pre-addestrati su set di dati di grandi dimensioni pubblicamente disponibili. La comunità di ricerca sul ML ha compiuto grandi sforzi per rendere pubblicamente disponibile per l'uso la maggior parte dei modelli sviluppati di recente; JumpStart ospita una raccolta di oltre 300 modelli, che coprono le 15 attività di ML più popolari come il rilevamento di oggetti, la classificazione del testo e la generazione di testo, facilitandone l'utilizzo da parte dei principianti. Questi modelli sono tratti da hub di modelli popolari, come TensorFlow, PyTorch, Hugging Face e MXNet Hub.
  • Perfeziona i modelli pre-addestrati – JumpStart ti consente di mettere a punto modelli pre-addestrati senza la necessità di scrivere il tuo algoritmo di addestramento. In ML, viene chiamata la capacità di trasferire le conoscenze apprese da un dominio a un altro trasferire l'apprendimento. Puoi utilizzare il transfer learning per produrre modelli accurati sui tuoi set di dati più piccoli, con costi di addestramento molto inferiori rispetto a quelli coinvolti nell'addestramento del modello originale. JumpStart include anche algoritmi di allenamento popolari basati su LightGBM, CatBoost, XGBoost e Scikit-learn che puoi addestrare da zero per la regressione tabulare e la classificazione.
  • Usa soluzioni predefinite – JumpStart fornisce una serie di 17 soluzioni per casi d'uso comuni di ML come la previsione della domanda e applicazioni industriali e finanziarie, che puoi implementare con pochi clic. Le soluzioni sono applicazioni ML end-to-end che mettono insieme vari servizi AWS per risolvere un particolare caso d'uso aziendale. Usano AWS CloudFormazione modelli e architetture di riferimento per un'implementazione rapida, il che significa che sono completamente personalizzabili.
  • Usa esempi di notebook per algoritmi SageMaker – SageMaker fornisce una suite di algoritmi integrati per aiutare i data scientist e i professionisti del machine learning a iniziare con la formazione e la distribuzione rapida dei modelli di machine learning. JumpStart fornisce notebook di esempio che puoi utilizzare per applicare rapidamente questi algoritmi.
  • Rivedi video e blog di formazione – JumpStart fornisce anche numerosi post di blog e video che ti insegnano come utilizzare diverse funzionalità all'interno di SageMaker.

JumpStart accetta impostazioni VPC personalizzate e Servizio di gestione delle chiavi AWS chiavi di crittografia (AWS KMS), così puoi utilizzare i modelli e le soluzioni disponibili in modo sicuro all'interno del tuo ambiente aziendale. Puoi passare le tue impostazioni di sicurezza a JumpStart all'interno di Studio o tramite SageMaker Python SDK.

Classificazione delle immagini

La classificazione dell'immagine si riferisce alla classificazione di un'immagine in una delle etichette di classe nel set di dati di addestramento. È possibile mettere a punto il modello in base a un determinato set di dati comprendente immagini appartenenti a un numero qualsiasi di classi. Il modello disponibile per la messa a punto su JumpStart allega un livello di classificazione al modello di estrattore di funzionalità corrispondente e inizializza i parametri del livello su valori casuali. La dimensione di output del livello di classificazione è determinata in base al numero di classi nei dati di input. La fase di regolazione fine ottimizza i parametri del livello di classificazione, mantenendo i parametri del modello di estrazione delle caratteristiche congelati e restituisce il modello ottimizzato. L'obiettivo è ridurre al minimo l'errore di previsione sui dati di input.

Per il nostro set di dati, l'input è una directory con tante sottodirectory quante sono le classi. Ogni sottodirectory dovrebbe avere immagini appartenenti a quella classe in formato .jpg. La directory di input dovrebbe apparire come la seguente gerarchia se i dati di addestramento contengono immagini di due classi: roses ed dandelion:

input_directory |--roses |--abc.jpg |--def.jpg |--dandelion |--ghi.jpg |--jkl.jpg

I nomi delle cartelle, delle classi e dei file .jpg possono essere qualsiasi cosa.

Forniamo il tf_flowers1 set di dati come set di dati predefinito per la messa a punto del modello. Questo set di dati comprende immagini di cinque tipi di fiori. Il set di dati è stato scaricato da TensorFlow.

Panoramica della procedura dettagliata

Le sezioni seguenti forniscono una demo dettagliata per eseguire la classificazione delle immagini con JumpStart, sia tramite l'interfaccia utente di Studio che tramite le API JumpStart.

Eseguiamo i seguenti passaggi:

  1. Accedi a JumpStart tramite l'interfaccia utente di Studio:
    1. Perfeziona il modello pre-addestrato.
    2. Distribuire il modello ottimizzato.
    3. Addestra in modo incrementale il modello ottimizzato e ridistribuiscilo.
  2. Usa JumpStart a livello di codice con SageMaker Python SDK:
    1. Perfeziona il modello pre-addestrato.
    2. Distribuire il modello ottimizzato.
    3. Addestra in modo incrementale il modello ottimizzato e ridistribuiscilo.

Accedi a JumpStart tramite l'interfaccia utente di Studio

In questa sezione viene illustrato come ottimizzare e distribuire i modelli JumpStart tramite l'interfaccia utente di Studio. Inoltre, mostriamo come addestrare in modo incrementale un modello che hai precedentemente messo a punto.

Perfeziona il modello pre-addestrato

Il video seguente mostra come trovare un modello di classificazione delle immagini pre-addestrato su JumpStart e perfezionarlo. La pagina del modello contiene informazioni preziose sul modello, su come utilizzarlo, sul formato dei dati previsto e alcuni dettagli di messa a punto.

A scopo dimostrativo, perfezioniamo il modello utilizzando il set di dati fornito per impostazione predefinita, che è il tf_flowers set di dati, composto da diverse varietà di fiori. La messa a punto del proprio set di dati implica la corretta formattazione dei dati (come spiegato nella pagina del modello), il caricamento su Servizio di archiviazione semplice Amazon (Amazon S3) e specificandone la posizione nella configurazione dell'origine dati.

Utilizziamo gli stessi valori di iperparametro impostati per impostazione predefinita (numero di epoche, velocità di apprendimento e dimensione del batch). Utilizziamo anche un'istanza ml.p3.2xlarge supportata da GPU come istanza di addestramento SageMaker.

Puoi monitorare il tuo lavoro di formazione direttamente sulla console di Studio e ricevere una notifica al suo completamento.

Distribuire il modello ottimizzato

Al termine dell'addestramento, è possibile distribuire il modello ottimizzato dalla stessa pagina che contiene i dettagli del lavoro di addestramento. Per distribuire il nostro modello, scegliamo un tipo di istanza diverso, ml.p2.xlarge. Fornisce comunque l'accelerazione GPU necessaria per una bassa latenza di inferenza, ma a un prezzo inferiore. Dopo aver configurato l'istanza di hosting SageMaker, scegli Schierare. Potrebbero essere necessari 5-10 minuti prima che l'endpoint persistente sia attivo e funzionante.

Quindi il tuo endpoint è operativo e pronto a rispondere alle richieste di inferenza!

Per accelerare il tuo tempo per l'inferenza, JumpStart fornisce un notebook di esempio che mostra come eseguire l'inferenza sull'endpoint appena distribuito. Scegliere Apri taccuino per Usa Endpoint da Studio.

Addestra in modo incrementale il modello ottimizzato e distribuiscilo

Al termine della messa a punto, è possibile addestrare ulteriormente il modello per aumentare le prestazioni. Questo passaggio è molto simile al processo di messa a punto iniziale, tranne per il fatto che utilizziamo il modello già messo a punto come punto di partenza. È possibile utilizzare nuovi dati, ma il formato del set di dati deve essere lo stesso (stesso insieme di classi).

Usa JumpStart a livello di codice con SageMaker SDK

Nelle sezioni precedenti, abbiamo mostrato come utilizzare l'interfaccia utente JumpStart per ottimizzare, distribuire e addestrare in modo incrementale un modello in modo interattivo in pochi clic. Puoi anche utilizzare i modelli di JumpStart e la semplice messa a punto a livello di codice utilizzando le API integrate nell'SDK SageMaker. Esaminiamo ora un rapido esempio di come è possibile replicare il processo precedente. Tutti i passaggi di questa demo sono disponibili nei taccuini allegati Introduzione a JumpStart – Classificazione delle immagini.

Perfeziona il modello pre-addestrato

Per mettere a punto un modello selezionato, è necessario ottenere l'URI di quel modello, nonché quello dello script di addestramento e l'immagine del contenitore utilizzata per l'addestramento. Per fortuna, questi tre input dipendono esclusivamente dal nome del modello, dalla versione (per un elenco dei modelli disponibili, vedere Tabella dei modelli disponibili JumpStart) e il tipo di istanza su cui vuoi allenarti. Ciò è dimostrato nel seguente frammento di codice:

from sagemaker import image_uris, model_uris, script_uris model_id, model_version = "pytorch-ic-mobilenet-v2", "1.0.0"
training_instance_type = "ml.p3.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve( region=None, framework=None, model_id=model_id, model_version=model_version, image_scope="training", instance_type=training_instance_type,
) # Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training") # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

Recuperiamo il model_id corrispondente allo stesso modello utilizzato in precedenza. L'ic nell'identificatore corrisponde alla classificazione dell'immagine.

Ora puoi perfezionare questo modello JumpStart sul tuo set di dati personalizzato utilizzando SageMaker SDK. Usiamo lo stesso tf_flowers set di dati ospitato pubblicamente su Amazon S3, opportunamente incentrato sull'analisi del sentimento. Il tuo set di dati dovrebbe essere strutturato per la messa a punto, come spiegato nella sezione precedente. Vedere il codice di esempio seguente:

# URI of your training dataset
training_dataset_s3_path = "s3://jumpstart-cache-prod-us-west-2/training-datasets/tf_flowers/"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning") # Create SageMaker Estimator instance
ic_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location,
) # Launch a SageMaker Training job by passing s3 path of the training data
ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Otteniamo gli stessi iperparametri predefiniti per il nostro modello selezionato di quelli che abbiamo visto nella sezione precedente, utilizzando sagemaker.hyperparameters.retrieve_default(). Quindi istanziamo uno stimatore SageMaker e chiamiamo il metodo .fit per iniziare a perfezionare il nostro modello, passandogli l'URI Amazon S3 per i nostri dati di addestramento. Come puoi vedere, il entry_point lo script fornito è denominato transfer_learning.py (lo stesso per altre attività e modelli) e il canale dati di input a cui è passato .fit deve essere nominato training.

Distribuzione del modello ottimizzato

Al termine dell'addestramento, puoi distribuire il tuo modello ottimizzato. Per fare ciò, tutto ciò che dobbiamo ottenere è l'URI dello script di inferenza (il codice che determina come il modello viene utilizzato per l'inferenza una volta distribuito) e l'URI dell'immagine del contenitore di inferenza, che include un server di modello appropriato per ospitare il modello scelto. Vedere il codice seguente:

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve( model_id=model_id, model_version=model_version, script_scope="inference"
) endpoint_name = name_from_base(f"jumpstart-example-FT-{model_id}-") # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = ic_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

Dopo pochi minuti, il nostro modello viene distribuito e possiamo ottenere previsioni da esso in tempo reale!

Successivamente, invochiamo l'endpoint per prevedere quale tipo di fiori esiste nell'immagine di esempio. Noi usiamo il query_endpoint ed parse_response funzioni di supporto, che sono definite nell'allegato taccuino.

query_response = finetuned_predictor.predict( img, {"ContentType": "application/x-image", "Accept": "application/json;verbose"} )
model_predictions = json.loads(query_response)
predicted_label = model_predictions["predicted_label"]
display( HTML( f'<img src={image_filename} alt={image_filename} align="left" style="width: 250px;"/>' f"<figcaption>Predicted Label: {predicted_label}</figcaption>" )
)

Addestra in modo incrementale il modello ottimizzato e ridistribuiscilo

Possiamo aumentare le prestazioni di un modello perfezionato addestrandolo ulteriormente su nuove immagini. È possibile utilizzare un numero qualsiasi di immagini nuove o vecchie per questo, tuttavia il formato del set di dati deve rimanere lo stesso (stesso insieme di classi). La fase di addestramento incrementale è simile al processo di messa a punto, con una differenza importante: nella messa a punto iniziale si inizia con un modello pre-addestrato, mentre nell'addestramento incrementale si parte con un modello di messa a punto esistente. Vedere il codice seguente:

last_trained_model_path = f"{s3_output_location}/{last_training_job_name}/output/model.tar.gz"
incremental_s3_output_location = f"s3://{output_bucket}/{incremental_output_prefix}/output"incremental_train_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=last_trained_model_path, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=incremental_s3_output_location, base_job_name=incremental_training_job_name,
) incremental_train_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Al termine dell'addestramento, è possibile utilizzare gli stessi passaggi descritti nella sezione precedente per distribuire il modello.

Conclusione

JumpStart è una funzionalità di SageMaker che ti consente di iniziare rapidamente con ML. JumpStart utilizza modelli pre-addestrati open source per risolvere problemi comuni di ML come la classificazione delle immagini, il rilevamento degli oggetti, la classificazione del testo, la classificazione delle coppie di frasi e la risposta alle domande.

In questo post, ti abbiamo mostrato come mettere a punto e distribuire un modello di classificazione delle immagini pre-addestrato. Abbiamo anche mostrato come addestrare in modo incrementale un modello ottimizzato per la classificazione delle immagini. Con JumpStart, puoi eseguire facilmente questo processo senza bisogno di codificare. Prova la soluzione da solo e facci sapere come va nei commenti. Per saperne di più su JumpStart, guarda il video di AWS re:Invent 2020 Inizia con il ML in pochi minuti con Amazon SageMaker JumpStart.

Riferimenti

  1. Il Team TensorFlow, 2019

Informazioni sugli autori

Formazione incrementale con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dott. Vivek Madan è uno scienziato applicato con il team Amazon SageMaker JumpStart. Ha conseguito il dottorato di ricerca. dell'Università dell'Illinois a Urbana-Champaign ed è stato ricercatore post-dottorato presso la Georgia Tech. È un ricercatore attivo nell'apprendimento automatico e nella progettazione di algoritmi e ha pubblicato articoli in conferenze EMNLP, ICLR, COLT, FOCS e SODA.

Formazione incrementale con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.João Moura è un architetto specializzato in soluzioni AI/ML presso Amazon Web Services. Si concentra principalmente sui casi d'uso della NLP e aiuta i clienti a ottimizzare la formazione e l'implementazione del modello di deep learning. È anche un attivo sostenitore di soluzioni ML a basso codice e hardware specializzato in ML.

Formazione incrementale con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Ashish Khetan è un Senior Applied Scientist con JumpStart di Amazon SageMaker ed Algoritmi integrati di Amazon SageMaker e aiuta a sviluppare algoritmi di apprendimento automatico. È un ricercatore attivo nell'apprendimento automatico e nell'inferenza statistica e ha pubblicato molti articoli in conferenze NeurIPS, ICML, ICLR, JMLR, ACL ed EMNLP.

Timestamp:

Di più da Apprendimento automatico di AWS