Esegui la generazione di testo con i modelli GPT e Bloom su Amazon SageMaker JumpStart

Nel mese di dicembre 2020, AWS ha annunciato la disponibilità generale di JumpStart di Amazon SageMaker, una capacità di Amazon Sage Maker che ti aiuta a iniziare rapidamente e facilmente con l'apprendimento automatico (ML). JumpStart offre 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.

Questo post è il quarto di una serie sull'utilizzo di JumpStart per attività ML specifiche. Nel primo post, abbiamo mostrato come eseguire i casi d'uso della classificazione delle immagini su JumpStart. Nel secondo post, abbiamo dimostrato come eseguire casi d'uso di classificazione del testo. Nel terzo post, abbiamo eseguito i casi d'uso della segmentazione delle immagini.

In questo post viene fornita una procedura dettagliata su come distribuire modelli di generazione di testo preaddestrati. Esploriamo due modi per ottenere lo stesso risultato: tramite l'interfaccia grafica di JumpStart su Amazon Sage Maker Studio, e a livello di codice API JumpStart.

Se vuoi passare direttamente al codice API JumpStart che esaminiamo in questo post, puoi fare riferimento al seguente esempio di notebook Jupyter: Introduzione a JumpStart – Generazione di testi.

Panoramica di JumpStart

JumpStart ti aiuta a iniziare con i modelli ML per una varietà di attività senza scrivere una singola riga di codice. Attualmente, JumpStart ti consente di fare quanto segue:

  • Distribuisci modelli pre-addestrati per attività di machine learning comuni – JumpStart ti consente di affrontare le comuni attività di ML 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.
  • Perfeziona i modelli pre-addestrati – JumpStart ti consente di mettere a punto i modelli pre-addestrati senza dover scrivere il tuo algoritmo di addestramento. In ML, viene chiamata la capacità di trasferire le conoscenze apprese in un dominio in un altro dominio 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 le 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.
  • Fare riferimento agli esempi di notebook per gli 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 è possibile utilizzare per utilizzare 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.

Generazione di testo, GPT-2 e Bloom

La generazione del testo è il compito di generare un testo che sia scorrevole e appaia indistinguibile dal testo scritto dall'uomo. È anche noto come generazione del linguaggio naturale.

GPT-2 è un popolare modello di generazione di testo basato su trasformatore. È pre-addestrato su un ampio corpus di testo inglese grezzo senza etichettatura umana. Viene addestrato sull'attività in cui, data una sequenza parziale (frase o parte di testo), il modello deve prevedere la parola o il token successivo nella sequenza.

Bloom è anche un modello di generazione di testo basato su trasformatore e addestrato in modo simile a GPT-2. Tuttavia, Bloom è pre-addestrato su 46 lingue diverse e 13 linguaggi di programmazione. Di seguito è riportato un esempio di esecuzione della generazione di testo con il modello Bloom:

Input: "Some people like dogs, some people like cats"
Output: "Some people like dogs, some people like cats some people like birds, some people like fish,"

Panoramica della soluzione

Le sezioni seguenti forniscono una demo passo passo per eseguire l'inferenza, sia tramite l'interfaccia utente di Studio che tramite le API JumpStart. Esaminiamo i seguenti passaggi:

  1. Accedi a JumpStart tramite l'interfaccia utente di Studio per distribuire ed eseguire l'inferenza sul modello pre-addestrato.
  2. Usa JumpStart a livello di codice con SageMaker Python SDK per distribuire il modello pre-addestrato ed eseguire l'inferenza.

Accedi a JumpStart tramite l'interfaccia utente di Studio ed esegui l'inferenza con un modello pre-addestrato

In questa sezione viene illustrato come addestrare e distribuire modelli JumpStart tramite l'interfaccia utente di Studio.

Il video seguente mostra come trovare un modello di generazione di testo pre-addestrato su JumpStart e distribuirlo. La pagina del modello contiene preziose informazioni sul modello e su come utilizzarlo. Puoi distribuire qualsiasi modello pre-addestrato disponibile in JumpStart. Per l'inferenza, scegliamo il tipo di istanza ml.p3.2xlarge, perché fornisce l'accelerazione GPU necessaria per una bassa latenza di inferenza a un prezzo basso. Dopo aver configurato l'istanza di hosting SageMaker, scegli Schierare. Potrebbero essere necessari 20-25 minuti prima che l'endpoint persistente sia attivo e funzionante.

Una volta che il tuo endpoint è operativo, è 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.

Usa JumpStart a livello di codice con SageMaker SDK

Nella sezione precedente, abbiamo mostrato come utilizzare l'interfaccia utente JumpStart per distribuire un modello pre-addestrato in modo interattivo, in pochi clic. Tuttavia, puoi anche utilizzare i modelli di JumpStart a livello di codice utilizzando le API integrate in SageMaker SDK.

In questa sezione, esamineremo un rapido esempio di come è possibile replicare il processo precedente con SageMaker SDK. Scegliamo un modello pre-addestrato appropriato in JumpStart, distribuiamo questo modello a un endpoint SageMaker ed eseguiamo l'inferenza sull'endpoint distribuito. Tutti i passaggi di questa demo sono disponibili nel taccuino allegato Introduzione a JumpStart – Generazione di testi.

Distribuire il modello pre-addestrato

SageMaker è una piattaforma che fa ampio uso di contenitori Docker per attività di compilazione e runtime. JumpStart utilizza il framework disponibile specifico Contenitori di deep learning di SageMaker (DLC). Per prima cosa recuperiamo eventuali pacchetti aggiuntivi, nonché gli script per gestire l'addestramento e l'inferenza per l'attività selezionata. Infine, gli artefatti del modello pre-addestrati vengono recuperati separatamente model_uris, che fornisce flessibilità alla piattaforma. È possibile utilizzare un numero qualsiasi di modelli pre-addestrati sulla stessa attività con un unico script di inferenza. Vedere il codice seguente:

model_id, model_version = "huggingface-textgeneration-bloom-560m", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    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")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Bloom è un modello molto grande e può richiedere fino a 20-25 minuti per la distribuzione. Puoi anche utilizzare un modello più piccolo come GPT-2. Per implementare un modello GPT-2 pre-addestrato, puoi impostare model_id = huggingface-textgeneration-gpt2. Per un elenco di altri modelli disponibili in JumpStart, fare riferimento a Tabella dei modelli disponibili JumpStart.

Successivamente, inseriamo le risorse in a Modello SageMaker istanza e distribuire un endpoint:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

Dopo che il nostro modello è stato distribuito, possiamo ottenere previsioni da esso in tempo reale!

Esegui l'inferenza

Il seguente frammento di codice offre un'idea dell'aspetto degli output. Per inviare richieste a un modello distribuito, il testo di input deve essere fornito in a utf-8 formato codificato.

def query(model_predictor, text):
    """Query the model predictor."""

    encoded_text = json.dumps(text).encode("utf-8")

    query_response = model_predictor.predict(
        encoded_text,
        {
            "ContentType": "application/x-text",
            "Accept": "application/json",
        },
    )
    return query_response

La risposta dell'endpoint è un oggetto JSON contenente il testo di input seguito dal testo generato:

def parse_response(query_response):
    """Parse response and return the generated text."""

    model_predictions = json.loads(query_response)
    generated_text = model_predictions["generated_text"]
    return generated_text
    
text = "Some people like dogs, some people like cats"
query_response = query(model_predictor, text)
parse_response(query_response)

Il nostro output è il seguente:

"Some people like dogs, some people like cats some people like birds, some people like fish,"

Conclusione

In questo post, abbiamo mostrato come distribuire un modello di generazione di testo pre-addestrato utilizzando JumpStart. Puoi farlo senza dover scrivere codice. Prova la soluzione da solo e inviaci i tuoi commenti. Per ulteriori informazioni su JumpStart e su come utilizzare modelli pre-addestrati open source per una varietà di altre attività ML, consulta quanto segue Video di AWS re:Invent 2020.


Informazioni sugli autori

Esegui la generazione di testo con modelli GPT e Bloom su 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 presso l'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.

Esegui la generazione di testo con modelli GPT e Bloom su Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Santosh Kulkarni è un Enterprise Solutions Architect presso Amazon Web Services che lavora con clienti sportivi in ​​Australia. È appassionato di creazione di applicazioni distribuite su larga scala per risolvere problemi aziendali utilizzando le sue conoscenze in AI/ML, big data e sviluppo software.

Esegui la generazione di testo con modelli GPT e Bloom su Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Ashish Khetan è un Senior Applied Scientist con algoritmi integrati di Amazon SageMaker e aiuta a sviluppare algoritmi di machine learning. Ha conseguito il dottorato di ricerca presso l'Università dell'Illinois Urbana Champaign. È un ricercatore attivo nell'apprendimento automatico e nell'inferenza statistica e ha pubblicato numerosi articoli nelle conferenze NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Timestamp:

Di più da Apprendimento automatico di AWS