Ridimensiona l'addestramento e l'inferenza di migliaia di modelli ML con Amazon SageMaker | Servizi Web Amazon

Ridimensiona l'addestramento e l'inferenza di migliaia di modelli ML con Amazon SageMaker | Servizi Web Amazon

Man mano che l'apprendimento automatico (ML) diventa sempre più diffuso in una vasta gamma di settori, le organizzazioni stanno riscontrando la necessità di addestrare e servire un gran numero di modelli ML per soddisfare le diverse esigenze dei propri clienti. In particolare, per i fornitori di software come servizio (SaaS), la capacità di addestrare e servire migliaia di modelli in modo efficiente ed economico è fondamentale per rimanere competitivi in ​​un mercato in rapida evoluzione.

La formazione e il servizio di migliaia di modelli richiedono un'infrastruttura robusta e scalabile, che è dove Amazon Sage Maker può aiutare. SageMaker è una piattaforma completamente gestita che consente a sviluppatori e data scientist di creare, addestrare e distribuire rapidamente modelli ML, offrendo al contempo i vantaggi in termini di risparmio dei costi derivanti dall'utilizzo dell'infrastruttura AWS Cloud.

In questo post, esploriamo come utilizzare le funzionalità di SageMaker, tra cui Elaborazione di Amazon SageMaker, i lavori di formazione SageMaker e gli endpoint multi-modello (MME) SageMaker, per addestrare e servire migliaia di modelli in modo conveniente. Per iniziare con la soluzione descritta, puoi fare riferimento al taccuino allegato su GitHub.

Caso d'uso: previsione energetica

Per questo post, assumiamo il ruolo di un'azienda ISV che aiuta i propri clienti a diventare più sostenibili monitorando il loro consumo energetico e fornendo previsioni. La nostra azienda ha 1,000 clienti che desiderano comprendere meglio il proprio consumo di energia e prendere decisioni informate su come ridurre il proprio impatto ambientale. Per fare ciò, utilizziamo un set di dati sintetico e addestriamo un modello ML basato su Profeta per ogni cliente per fare previsioni di consumo energetico. Con SageMaker, possiamo addestrare e servire in modo efficiente questi 1,000 modelli, fornendo ai nostri clienti informazioni accurate e fruibili sul loro consumo energetico.

Ci sono tre funzionalità nel set di dati generato:

  • identificativo del cliente – Si tratta di un identificatore intero per ciascun cliente, compreso tra 0 e 999.
  • timestamp – Questo è un valore di data/ora che indica l'ora in cui è stato misurato il consumo di energia. I timestamp vengono generati casualmente tra le date di inizio e di fine specificate nel codice.
  • consumo – Questo è un valore float che indica il consumo di energia, misurato in qualche unità arbitraria. I valori di consumo sono generati casualmente tra 0 e 1,000 con stagionalità sinusoidale.

Panoramica della soluzione

Per addestrare e servire in modo efficiente migliaia di modelli ML, possiamo utilizzare le seguenti funzionalità di SageMaker:

  • Elaborazione di SageMaker – SageMaker Processing è un servizio di preparazione dei dati completamente gestito che consente di eseguire attività di elaborazione dei dati e valutazione del modello sui dati di input. Puoi utilizzare SageMaker Processing per trasformare i dati grezzi nel formato necessario per l'addestramento e l'inferenza, nonché per eseguire valutazioni in batch e online dei tuoi modelli.
  • Lavori di formazione SageMaker – Puoi utilizzare i processi di addestramento di SageMaker per addestrare i modelli su una varietà di algoritmi e tipi di dati di input e specificare le risorse di calcolo necessarie per l'addestramento.
  • MME SageMaker – Gli endpoint multi-modello consentono di ospitare più modelli su un singolo endpoint, il che semplifica la fornitura di previsioni da più modelli utilizzando un'unica API. Gli MME SageMaker possono risparmiare tempo e risorse riducendo il numero di endpoint necessari per fornire previsioni da più modelli. Gli MME supportano l'hosting di entrambi i modelli supportati da CPU e GPU. Tieni presente che nel nostro scenario utilizziamo 1,000 modelli, ma questa non è una limitazione del servizio stesso.

Il diagramma seguente illustra l'architettura della soluzione.

architettura che visualizza il processo descritto

Il flusso di lavoro include i seguenti passaggi:

  1. Utilizziamo SageMaker Processing per preelaborare i dati e creare un singolo file CSV per cliente e memorizzarlo Servizio di archiviazione semplice Amazon (Amazon S3).
  2. Il processo di addestramento SageMaker è configurato per leggere l'output del processo di elaborazione SageMaker e distribuirlo in modalità round robin alle istanze di addestramento. Si noti che questo può essere ottenuto anche con Pipeline di Amazon SageMaker.
  3. Gli artefatti del modello vengono archiviati in Amazon S3 dal processo di addestramento e vengono forniti direttamente da SageMaker MME.

Adatta l'addestramento a migliaia di modelli

Scalare l'addestramento di migliaia di modelli è possibile tramite il distribution parametro del Ingresso di formazione class in SageMaker Python SDK, che consente di specificare in che modo i dati vengono distribuiti su più istanze di addestramento per un processo di addestramento. Ci sono tre opzioni per il distribution parametro: FullyReplicated, ShardedByS3Keye ShardedByRecord. ShardedByS3Key L'opzione indica che i dati di addestramento sono partizionati dalla chiave dell'oggetto S3, con ogni istanza di addestramento che riceve un sottoinsieme univoco dei dati, evitando la duplicazione. Dopo che i dati sono stati copiati da SageMaker nei contenitori di addestramento, possiamo leggere la struttura delle cartelle e dei file per addestrare un modello univoco per file del cliente. Di seguito è riportato un frammento di codice di esempio:

# Assume that the training data is in an S3 bucket already, pass the parent folder
s3_input_train = sagemaker.inputs.TrainingInput( s3_data='s3://my-bucket/customer_data', distribution='ShardedByS3Key'
) # Create a SageMaker estimator and set the training input
estimator = sagemaker.estimator.Estimator(...)
estimator.fit(inputs=s3_input_train)

Ogni processo di addestramento SageMaker memorizza il modello salvato nel file /opt/ml/model cartella del contenitore di formazione prima di archiviarlo in a model.tar.gz file, quindi lo carica su Amazon S3 al completamento del processo di addestramento. Gli utenti esperti possono anche automatizzare questo processo con SageMaker Pipelines. Quando si memorizzano più modelli tramite lo stesso lavoro di addestramento, SageMaker ne crea uno singolo model.tar.gz file contenente tutti i modelli addestrati. Ciò significherebbe quindi che, per servire il modello, dovremmo prima decomprimere l'archivio. Per evitare questo, usiamo posti di blocco per salvare lo stato dei singoli modelli. SageMaker fornisce la funzionalità per copiare i checkpoint creati durante il processo di addestramento in Amazon S3. Qui, i checkpoint devono essere salvati in una posizione pre-specificata, con l'impostazione predefinita /opt/ml/checkpoints. Questi punti di controllo possono essere utilizzati per riprendere l'addestramento in un secondo momento o come modello da distribuire su un endpoint. Per un riepilogo di alto livello su come la piattaforma di formazione SageMaker gestisce i percorsi di archiviazione per i set di dati di formazione, gli artefatti del modello, i checkpoint e gli output tra lo storage AWS Cloud e i processi di formazione in SageMaker, fare riferimento a Cartelle di storage per la formazione di Amazon SageMaker per set di dati di formazione, checkpoint, artefatti del modello e output.

Il codice seguente utilizza un file fittizio model.save() funzione all'interno di train.py script contenente la logica di addestramento:

import tarfile
import boto3
import os [ ... argument parsing ... ] for customer in os.list_dir(args.input_path): # Read data locally within the Training job df = pd.read_csv(os.path.join(args.input_path, customer, 'data.csv')) # Define and train the model model = MyModel() model.fit(df) # Save model to output directory with open(os.path.join(output_dir, 'model.json'), 'w') as fout: fout.write(model_to_json(model)) # Create the model.tar.gz archive containing the model and the training script with tarfile.open(os.path.join(output_dir, '{customer}.tar.gz'), "w:gz") as tar: tar.add(os.path.join(output_dir, 'model.json'), "model.json") tar.add(os.path.join(args.code_dir, "training.py"), "training.py")

Adatta l'inferenza a migliaia di modelli con gli MME di SageMaker

Gli MME SageMaker ti consentono di servire più modelli contemporaneamente creando una configurazione dell'endpoint che include un elenco di tutti i modelli da servire e quindi creando un endpoint utilizzando quella configurazione dell'endpoint. Non è necessario ridistribuire l'endpoint ogni volta che aggiungi un nuovo modello perché l'endpoint servirà automaticamente tutti i modelli archiviati nei percorsi S3 specificati. Questo si ottiene con Server multimodello (MMS), un framework open source per servire modelli ML che possono essere installati nei container per fornire il front-end che soddisfa i requisiti per le nuove API del container MME. Inoltre, è possibile utilizzare altri server modello inclusi Torcia Servire ed tritone. MMS può essere installato nel tuo contenitore personalizzato tramite il file SageMaker Toolkit di inferenza. Per saperne di più su come configurare il tuo Dockerfile per includere MMS e usarlo per servire i tuoi modelli, fai riferimento a Crea il tuo container per endpoint multi-modello SageMaker.

Il seguente frammento di codice mostra come creare un MME utilizzando SageMaker Python SDK:

from sagemaker.multidatamodel import MultiDataModel # Create the MultiDataModel definition
multimodel = MultiDataModel( name='customer-models', model_data_prefix=f's3://{bucket}/scaling-thousand-models/models', model=your_model,
) # Deploy on a real-time endpoint
predictor = multimodel.deploy( initial_instance_count=1, instance_type='ml.c5.xlarge',
)

Quando l'MME è attivo, possiamo invocarlo per generare previsioni. Le chiamate possono essere eseguite in qualsiasi SDK AWS e con SageMaker Python SDK, come mostrato nel seguente frammento di codice:

predictor.predict( data='{"period": 7}', # the payload, in this case JSON target_model='{customer}.tar.gz' # the name of the target model
)

Quando si chiama un modello, il modello viene inizialmente caricato da Amazon S3 sull'istanza, il che può comportare un avvio a freddo quando si chiama un nuovo modello. I modelli utilizzati di frequente vengono memorizzati nella cache in memoria e su disco per fornire inferenza a bassa latenza.

Conclusione

SageMaker è una piattaforma potente ed economica per la formazione e la gestione di migliaia di modelli ML. Le sue funzionalità, tra cui SageMaker Processing, i processi di formazione e gli MME, consentono alle organizzazioni di addestrare e servire in modo efficiente migliaia di modelli su larga scala, beneficiando anche dei vantaggi in termini di risparmio dei costi derivanti dall'utilizzo dell'infrastruttura AWS Cloud. Per ulteriori informazioni su come utilizzare SageMaker per addestrare e servire migliaia di modelli, fare riferimento a Dati di processo, Addestra un modello con Amazon SageMaker ed Ospita più modelli in un contenitore dietro un endpoint.


Informazioni sugli autori

Foto di DavideDavide Gallitelli è uno Specialist Solutions Architect per AI/ML nella regione EMEA. Ha sede a Bruxelles e lavora a stretto contatto con i clienti in tutto il Benelux. È uno sviluppatore sin da quando era molto giovane, iniziando a programmare all'età di 7 anni. Ha iniziato a studiare AI/ML all'università e da allora se ne è innamorato.

Immagine di MaurizioMaurizio de Groot è un Solutions Architect presso Amazon Web Services, con sede ad Amsterdam. Gli piace lavorare su argomenti legati al machine learning e ha una predilezione per le startup. Nel tempo libero ama sciare e giocare a squash.

Timestamp:

Di più da Apprendimento automatico di AWS