Kjør tekstgenerering med GPT- og Bloom-modeller på Amazon SageMaker JumpStart

I desember 2020, AWS annonsert den generelle tilgjengeligheten av Amazon SageMaker JumpStart, en evne til Amazon SageMaker som hjelper deg raskt og enkelt å komme i gang med maskinlæring (ML). JumpStart gir ett-klikks finjustering og distribusjon av et bredt utvalg av forhåndstrente modeller på tvers av populære ML-oppgaver, samt et utvalg ende-til-ende-løsninger som løser vanlige forretningsproblemer. Disse funksjonene fjerner de tunge løftene fra hvert trinn i ML-prosessen, noe som gjør det enklere å utvikle høykvalitetsmodeller og reduserer tiden til utrulling.

Dette innlegget er det fjerde i en serie om bruk av JumpStart for spesifikke ML-oppgaver. I første innlegg, viste vi hvordan du kjører brukstilfeller for bildeklassifisering på JumpStart. I andre innlegg, viste vi hvordan man kjører brukstilfeller for tekstklassifisering. I tredje innlegg, kjørte vi brukstilfeller for bildesegmentering.

I dette innlegget gir vi en trinnvis gjennomgang av hvordan du distribuerer forhåndstrente tekstgenereringsmodeller. Vi utforsker to måter å oppnå det samme resultatet på: via JumpStarts grafiske grensesnitt på Amazon SageMaker Studio, og programmatisk gjennom JumpStart APIer.

Hvis du vil hoppe rett inn i JumpStart API-koden vi går gjennom i dette innlegget, kan du referere til følgende eksempel på Jupyter-notatboken: Introduksjon til JumpStart – Tekstgenerering.

JumpStart oversikt

JumpStart hjelper deg med å komme i gang med ML-modeller for en rekke oppgaver uten å skrive en eneste linje med kode. For øyeblikket lar JumpStart deg gjøre følgende:

  • Distribuer forhåndstrente modeller for vanlige ML-oppgaver – JumpStart lar deg løse vanlige ML-oppgaver uten utviklingsinnsats ved å tilby enkel distribusjon av modeller som er forhåndsopplært på store, offentlig tilgjengelige datasett. ML-forskningsmiljøet har lagt ned en stor innsats for å gjøre et flertall av nylig utviklede modeller offentlig tilgjengelig for bruk. JumpStart er vert for en samling på over 300 modeller, som spenner over de 15 mest populære ML-oppgavene som objektgjenkjenning, tekstklassifisering og tekstgenerering, noe som gjør det enkelt for nybegynnere å bruke dem. Disse modellene er hentet fra populære modellhuber som TensorFlow, PyTorch, Hugging Face og MXNet.
  • Finjuster forhåndstrente modeller – JumpStart lar deg finjustere ferdigtrente modeller uten å måtte skrive din egen treningsalgoritme. I ML kalles evnen til å overføre kunnskapen lært i ett domene til et annet domene overføre læring. Du kan bruke overføringslæring til å produsere nøyaktige modeller på de mindre datasettene dine, med mye lavere opplæringskostnader enn de som er involvert i opplæringen av den originale modellen. JumpStart inkluderer også populære treningsalgoritmer basert på LightGBM, CatBoost, XGBoost og Scikit-learn, som du kan trene fra bunnen av for tabellregresjon og klassifisering.
  • Bruk forhåndsbygde løsninger – JumpStart tilbyr et sett med 17 løsninger for vanlige ML-brukstilfeller, for eksempel etterspørselsprognoser og industrielle og finansielle applikasjoner, som du kan implementere med bare noen få klikk. Løsninger er ende-til-ende ML-applikasjoner som setter sammen ulike AWS-tjenester for å løse et bestemt forretningsbruk. De bruker AWS skyformasjon maler og referansearkitekturer for rask distribusjon, noe som betyr at de er fullt tilpassbare.
  • Se eksempler på bærbare datamaskiner for SageMaker-algoritmer – SageMaker tilbyr en pakke med innebygde algoritmer for å hjelpe dataforskere og ML-utøvere raskt i gang med opplæring og distribusjon av ML-modeller. JumpStart gir eksempler på notatbøker som du kan bruke for raskt å bruke disse algoritmene.
  • Gjennomgå treningsvideoer og blogger – JumpStart gir også en rekke blogginnlegg og videoer som lærer deg hvordan du bruker forskjellige funksjoner i SageMaker.

JumpStart godtar tilpassede VPC-innstillinger og AWS nøkkelstyringstjeneste (AWS KMS) krypteringsnøkler, slik at du kan bruke de tilgjengelige modellene og løsningene sikkert i bedriftsmiljøet ditt. Du kan sende sikkerhetsinnstillingene til JumpStart i Studio eller gjennom SageMaker Python SDK.

Tekstgenerering, GPT-2 og Bloom

Tekstgenerering er oppgaven med å generere tekst som er flytende og som virker umulig å skille fra menneskeskreven tekst. Det er også kjent som generasjon av naturlig språk.

GPT-2 er en populær transformatorbasert tekstgenereringsmodell. Den er forhåndstrent på et stort korpus av rå engelsk tekst uten menneskelig merking. Den er trent på oppgaven der, gitt en delsekvens (setning eller tekst), må modellen forutsi neste ord eller token i sekvensen.

Bloom er også en transformatorbasert tekstgenereringsmodell og trent på samme måte som GPT-2. Bloom er imidlertid forhåndsopplært på 46 forskjellige språk og 13 programmeringsspråk. Følgende er et eksempel på å kjøre tekstgenerering med Bloom-modellen:

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,"

Løsningsoversikt

De følgende delene gir en trinn-for-trinn-demo for å utføre slutninger, både via Studio-grensesnittet og via JumpStart APIer. Vi går gjennom følgende trinn:

  1. Få tilgang til JumpStart gjennom Studio-grensesnittet for å distribuere og kjøre inferens på den forhåndstrente modellen.
  2. Bruk JumpStart programmatisk med SageMaker Python SDK for å distribuere den forhåndstrente modellen og kjøre inferens.

Få tilgang til JumpStart gjennom Studio-grensesnittet og kjør inferens med en forhåndstrent modell

I denne delen viser vi hvordan du trener og distribuerer JumpStart-modeller gjennom Studio UI.

Følgende video viser deg hvordan du finner en forhåndsopplært tekstgenereringsmodell på JumpStart og distribuerer den. Modellsiden inneholder verdifull informasjon om modellen og hvordan du bruker den. Du kan distribuere hvilken som helst av de forhåndstrente modellene som er tilgjengelige i JumpStart. For slutninger velger vi forekomsttypen ml.p3.2xlarge, fordi den gir GPU-akselerasjonen som trengs for lav slutningsforsinkelse til et lavt prispunkt. Etter at du har konfigurert SageMaker-vertsinstansen, velger du Distribuer. Det kan ta 20–25 minutter før det vedvarende endepunktet ditt er oppe og går.

Når endepunktet ditt er operativt, er det klart til å svare på slutningsforespørsler!

For å akselerere tiden din til inferens gir JumpStart en eksempelnotisbok som viser deg hvordan du kjører inferens på det nylig distribuerte endepunktet. Velge Åpne Notebook etter Bruk endepunkt fra Studio.

Bruk JumpStart programmatisk med SageMaker SDK

I den foregående delen viste vi hvordan du kan bruke JumpStart UI til å distribuere en forhåndstrent modell interaktivt, i løpet av noen få klikk. Du kan imidlertid også bruke JumpStarts modeller programmatisk ved å bruke APIer som er integrert i SageMaker SDK.

I denne delen går vi over et raskt eksempel på hvordan du kan replikere den foregående prosessen med SageMaker SDK. Vi velger en passende forhåndsopplært modell i JumpStart, distribuerer denne modellen til et SageMaker-endepunkt og kjører slutninger om det distribuerte endepunktet. Alle trinnene i denne demoen er tilgjengelige i den medfølgende notatboken Introduksjon til JumpStart – Tekstgenerering.

Implementer den forhåndstrente modellen

SageMaker er en plattform som gjør omfattende bruk av Docker-containere for bygge- og kjøretidsoppgaver. JumpStart bruker den tilgjengelige rammespesifikke SageMaker Deep Learning-beholdere (DLC-er). Vi henter først eventuelle tilleggspakker, samt skript for å håndtere opplæring og slutninger for den valgte oppgaven. Til slutt hentes de forhåndstrente modellartefaktene separat med model_uris, som gir fleksibilitet til plattformen. Du kan bruke et hvilket som helst antall modeller som er forhåndsopplært på samme oppgave med et enkelt slutningsskript. Se følgende kode:

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 er en veldig stor modell og kan ta opptil 20–25 minutter å distribuere. Du kan også bruke en mindre modell som GPT-2. For å distribuere en forhåndsopplært GPT-2-modell kan du angi model_id = huggingface-textgeneration-gpt2. For en liste over andre tilgjengelige modeller i JumpStart, se JumpStart tilgjengelig modellbord.

Deretter mater vi ressursene inn i en SageMaker modell forekomst og distribuer et endepunkt:

# 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,
)

Etter at modellen vår er distribuert, kan vi få spådommer fra den i sanntid!

Kjør slutning

Følgende kodebit gir deg et glimt av hvordan utgangene ser ut. For å sende forespørsler til en distribuert modell, må inndatatekst leveres i en utf-8 kodet format.

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

Endepunktresponsen er et JSON-objekt som inneholder inndatateksten etterfulgt av den genererte teksten:

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)

Vår produksjon er som følger:

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

konklusjonen

I dette innlegget viste vi hvordan du distribuerer en forhåndsopplært tekstgenereringsmodell ved hjelp av JumpStart. Du kan oppnå dette uten å måtte skrive kode. Prøv løsningen på egen hånd og send oss ​​dine kommentarer. For å lære mer om JumpStart og hvordan du kan bruke åpen kildekode ferdigtrente modeller for en rekke andre ML-oppgaver, sjekk ut følgende AWS re:Invent 2020-video.


Om forfatterne

Kjør tekstgenerering med GPT- og Bloom-modeller på Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Vivek Madan er en Applied Scientist med Amazon SageMaker JumpStart-teamet. Han fikk sin doktorgrad fra University of Illinois i Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker innen maskinlæring og algoritmedesign og har publisert artikler på EMNLP-, ICLR-, COLT-, FOCS- og SODA-konferanser.

Kjør tekstgenerering med GPT- og Bloom-modeller på Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Santosh Kulkarni er en Enterprise Solutions Architect hos Amazon Web Services som jobber med sportskunder i Australia. Han brenner for å bygge distribuerte applikasjoner i stor skala for å løse forretningsproblemer ved å bruke sin kunnskap innen AI/ML, big data og programvareutvikling.

Kjør tekstgenerering med GPT- og Bloom-modeller på Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Ashish Khetan er en Senior Applied Scientist med Amazon SageMaker innebygde algoritmer og hjelper til med å utvikle maskinlæringsalgoritmer. Han fikk sin doktorgrad fra University of Illinois Urbana Champaign. Han er en aktiv forsker innen maskinlæring og statistisk inferens og har publisert mange artikler i NeurIPS, ICML, ICLR, JMLR, ACL og EMNLP-konferanser.

Tidstempel:

Mer fra AWS maskinlæring