Riduci il tempo necessario per distribuire i tuoi modelli su Amazon SageMaker per testare PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Riduci il tempo necessario per distribuire i tuoi modelli su Amazon SageMaker per i test

I data scientist spesso addestrano i loro modelli a livello locale e cercano un servizio di hosting adeguato per distribuire i loro modelli. Sfortunatamente, non esiste un meccanismo o una guida impostati per la distribuzione di modelli pre-addestrati nel cloud. In questo post, esamineremo la distribuzione di modelli addestrati a Amazon Sage Maker hosting per ridurre i tempi di implementazione.

SageMaker è un servizio di machine learning (ML) completamente gestito. Con SageMaker, puoi creare e addestrare rapidamente modelli ML e distribuirli direttamente in un ambiente ospitato pronto per la produzione. Inoltre, non è necessario gestire i server. Ottieni un ambiente notebook Jupyter integrato con facile accesso alle tue origini dati. Puoi eseguire analisi dei dati, addestrare i tuoi modelli e testarli utilizzando i tuoi algoritmi o utilizzare algoritmi ML forniti da SageMaker che sono ottimizzati per funzionare in modo efficiente su set di dati di grandi dimensioni distribuiti su più macchine. La formazione e l'hosting vengono fatturati in base ai minuti di utilizzo, senza costi minimi e senza impegni anticipati.

Panoramica della soluzione

I data scientist a volte addestrano i modelli in locale utilizzando il loro IDE e inviano tali modelli al team di ingegneri di ML per l'implementazione o semplicemente eseguono previsioni in locale su macchine potenti. In questo post, introduciamo una libreria Python che semplifica il processo di distribuzione dei modelli in SageMaker per di hosting su endpoint in tempo reale o serverless.

Questa libreria Python offre ai data scientist un'interfaccia semplice per iniziare rapidamente a utilizzare SageMaker senza dover conoscere nessuna delle funzionalità di basso livello di SageMaker.

Se disponi di modelli addestrati in locale utilizzando il tuo IDE preferito e desideri trarre vantaggio dalla scalabilità del cloud, puoi utilizzare questa libreria per distribuire il tuo modello su SageMaker. Con SageMaker, oltre a tutti i vantaggi di scalabilità di una piattaforma di machine learning basata su cloud, hai accesso a strumenti di formazione specifici (formazione distribuita, ottimizzazione degli iperparametri), gestione degli esperimenti, gestione dei modelli, rilevamento dei bias, spiegazione del modello e molti altri funzionalità che possono aiutarti in qualsiasi aspetto del ciclo di vita di ML. Puoi scegliere tra i tre framework più popolari per ML: Scikit-learn, PyTorch e TensorFlow e puoi scegliere il tipo di calcolo che desideri. I valori predefiniti vengono forniti lungo il percorso in modo che gli utenti di questa libreria possano distribuire i propri modelli senza dover prendere decisioni complesse o apprendere nuovi concetti. In questo post, ti mostriamo come iniziare con questa libreria e ottimizzare la distribuzione dei tuoi modelli ML sull'hosting SageMaker.

La biblioteca si trova nel Repository GitHub.

Il kit di strumenti per la migrazione di SageMaker

Il SageMakerMigration class è disponibile tramite una libreria Python pubblicata su GitHub. Le istruzioni per installare questa libreria sono fornite nel repository; assicurati di seguire il README per configurare correttamente il tuo ambiente. Dopo aver installato questa libreria, il resto di questo post parla di come utilizzarla.

Il SageMakerMigration La classe è costituita da astrazioni di alto livello sulle API SageMaker che riducono significativamente i passaggi necessari per distribuire il modello in SageMaker, come illustrato nella figura seguente. Questo è destinato alla sperimentazione in modo che gli sviluppatori possano iniziare rapidamente e testare SageMaker. Non è destinato alle migrazioni di produzione.

Per i modelli Scikit-learn, PyTorch e TensorFlow, questa libreria supporta la distribuzione di modelli addestrati a un endpoint in tempo reale di SageMaker o a un endpoint serverless. Per ulteriori informazioni sulle opzioni di inferenza in SageMaker, fare riferimento a Distribuire modelli per l'inferenza.

Endpoint in tempo reale e senza server

L'inferenza in tempo reale è l'ideale per i carichi di lavoro di inferenza in cui sono richiesti requisiti in tempo reale, interattivi e a bassa latenza. Puoi distribuire il tuo modello ai servizi di hosting SageMaker e ottenere un endpoint che può essere utilizzato per l'inferenza. Questi endpoint sono completamente gestiti e supportano la scalabilità automatica.

SageMaker Serverless Inference è un'opzione di inferenza appositamente creata che semplifica la distribuzione e la scalabilità dei modelli ML. Serverless Inference è l'ideale per i carichi di lavoro che hanno periodi di inattività tra gli scatti di traffico e possono tollerare avviamenti a freddo. Gli endpoint serverless avviano automaticamente le risorse di calcolo e le ridimensionano in base al traffico, eliminando la necessità di scegliere i tipi di istanza o di gestire le policy di dimensionamento. Ciò elimina il pesante lavoro indifferenziato della selezione e della gestione dei server.

A seconda del tuo caso d'uso, potresti voler ospitare rapidamente il tuo modello su SageMaker senza avere effettivamente un'istanza sempre attiva e sostenere costi, nel qual caso un endpoint serverless è un'ottima soluzione.

Prepara il tuo modello addestrato e lo script di inferenza

Dopo aver identificato il modello che desideri distribuire su SageMaker, devi assicurarti che il modello venga presentato a SageMaker nel formato corretto. Gli endpoint SageMaker sono generalmente costituiti da due componenti: l'artefatto del modello addestrato (.pth, .pkl e così via) e uno script di inferenza. Lo script di inferenza non è sempre obbligatorio, ma se non viene fornito, vengono applicati i gestori predefiniti per il contenitore di servizio che stai utilizzando. È essenziale fornire questo script se è necessario personalizzare la funzionalità di input/output per l'inferenza.

L'artefatto del modello addestrato è semplicemente un modello Scikit-learn, PyTorch o TensorFlow salvato. Per Scikit-learn, questo è in genere un file pickle, per PyTorch è un file .pt o .pth e per TensorFlow è una cartella con risorse, file .pb e altre variabili.

In generale, devi essere in grado di controllare il modo in cui il tuo modello elabora l'input ed esegue l'inferenza e controllare il formato di output per la tua risposta. Con SageMaker, puoi fornire un script di inferenza per aggiungere questa personalizzazione. Qualsiasi script di inferenza utilizzato da SageMaker deve avere una o più delle seguenti quattro funzioni di gestione: model_fn, input_fn, predict_fne output_fn.

Si noti che queste quattro funzioni si applicano a PyTorch ed Scikit-learn contenitori nello specifico. TensorFlow ha gestori leggermente diversi perché è integrato con Servizio TensorFlow. Per uno script di inferenza con TensorFlow, ne hai due gestori di modelli: gestore_input e gestore_output. Anche in questo caso, hanno lo stesso scopo di preelaborazione e postelaborazione con cui puoi lavorare, ma sono configurati in modo leggermente diverso per integrarsi con Servizio TensorFlow. Per i modelli PyTorch, model_fn è una funzione obbligatoria da avere nello script di inferenza.

modello_fn

Questa è la funzione che viene chiamata per la prima volta quando si richiama l'endpoint SageMaker. Qui è dove scrivi il tuo codice per caricare il modello. Per esempio:

def model_fn(model_dir):
    model = Your_Model()
    with open(os.path.join(model_dir, 'model.pth'), 'rb') as f:
        model.load_state_dict(torch.load(f))
    return model

A seconda del framework e del tipo di modello, questo codice potrebbe cambiare, ma la funzione deve restituire un modello inizializzato.

ingresso_fn

Questa è la seconda funzione che viene chiamata quando viene richiamato l'endpoint. Questa funzione prende i dati inviati all'endpoint per l'inferenza e li analizza nel formato richiesto dal modello per generare una previsione. Per esempio:

def input_fn(request_body, request_content_type):
    """An input_fn that loads a pickled tensor"""
    if request_content_type == 'application/python-pickle':
        return torch.load(BytesIO(request_body))
    else:
        # Handle other content-types here or raise an Exception
        # if the content type is not supported.
        pass

Il request_body contiene i dati da utilizzare per generare l'inferenza dal modello e viene analizzato in questa funzione in modo che sia nel formato richiesto.

predizione_fn

Questa è la terza funzione che viene chiamata quando viene richiamato il modello. Questa funzione prende i dati di input preelaborati restituiti da input_fn e utilizza il modello restituito da model_fn per fare la previsione. Per esempio:

def predict_fn(input_data, model):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model.to(device)
    model.eval()
    with torch.no_grad():
        return model(input_data.to(device))

Puoi opzionalmente aggiungere output_fn per analizzare l'output di predict_fn prima di restituirlo al cliente. La firma della funzione è def output_fn(prediction, content_type).

Sposta il tuo modello pre-addestrato su SageMaker

Dopo aver eseguito il training del file del modello e dello script di inferenza, è necessario inserire questi file in una cartella come segue:

#SKLearn Model

model_folder/
    model.pkl
    inference.py
    
# Tensorflow Model
model_folder/
    0000001/
        assets/
        variables/
        keras_metadata.pb
        saved_model.pb
    inference.py
    
# PyTorch Model
model_folder/
    model.pth
    inference.py

Dopo che il modello e lo script di inferenza sono stati preparati e salvati in questa struttura di cartelle, il modello è pronto per la distribuzione su SageMaker. Vedere il codice seguente:

from sagemaker_migration import frameworks as fwk

if __name__ == "__main__":
    ''' '''
    sk_model = fwk.SKLearnModel(
        version = "0.23-1", 
        model_data = 'model.joblib',
        inference_option = 'real-time',
        inference = 'inference.py',
        instance_type = 'ml.m5.xlarge'
    )
    sk_model.deploy_to_sagemaker()

Dopo la distribuzione dell'endpoint, assicurati di ripulire tutte le risorse che non utilizzerai tramite la console SageMaker o tramite il elimina_punto finale Chiamata API Boto3.

Conclusione

L'obiettivo del progetto SageMaker Migration Toolkit è rendere più semplice per i data scientist l'onboarding dei loro modelli su SageMaker per sfruttare l'inferenza basata su cloud. Il repository continuerà ad evolversi e supporterà più opzioni per la migrazione dei carichi di lavoro a SageMaker. Il codice è open source e accogliamo con favore i contributi della community tramite richieste pull e problemi.

Guarda la Repository GitHub per esplorare di più sull'utilizzo di SageMaker Migration Toolkit e sentiti libero di contribuire anche con esempi o richieste di funzionalità da aggiungere al progetto!


Circa gli autori

Riduci il tempo necessario per distribuire i tuoi modelli su Amazon SageMaker per testare PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Kirit Tadaka è un ML Solutions Architect che lavora nel team Amazon SageMaker Service SA. Prima di entrare in AWS, Kirit ha lavorato nelle fasi iniziali di avvio dell'IA, seguito da un po' di tempo nella consulenza in vari ruoli nella ricerca sull'IA, MLOps e leadership tecnica.

Riduci il tempo necessario per distribuire i tuoi modelli su Amazon SageMaker per testare PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Ram Vegiraju è un ML Architect con il team SageMaker Service. Si concentra sull'aiutare i clienti a creare e ottimizzare le loro soluzioni AI/ML su Amazon SageMaker. Nel tempo libero ama viaggiare e scrivere.

Timestamp:

Di più da Apprendimento automatico di AWS