Tehke pakettteisendusi Amazon SageMaker Kiirstardi Text2Text Generation suurte keelemudelitega | Amazoni veebiteenused

Tehke pakettteisendusi Amazon SageMaker Kiirstardi Text2Text Generation suurte keelemudelitega | Amazoni veebiteenused

Täna teatame rõõmuga, et saate nüüd teha pakettteisendusi Amazon SageMaker JumpStart suured keelemudelid (LLM-id) Text2Text Generation jaoks. Pakettteisendused on kasulikud olukordades, kus vastused ei pea olema reaalajas ja seetõttu saate teha järeldusi suurte andmehulkade puhul hulgi. Partii teisenduse jaoks käivitatakse paketttöö, mis võtab pakettsisendi andmestiku ja eelkoolitatud mudelina ning väljastab prognoosid andmestiku iga andmepunkti kohta. Pakettteisendus on kulutõhus, sest erinevalt reaalajas hostitud lõpp-punktidest, millel on püsiv riistvara, lammutatakse pakkteisenduse klastrid töö lõppedes maha ja seetõttu kasutatakse riistvara ainult paketttöö ajal.

Mõningatel kasutusjuhtudel saab reaalajas järelduspäringuid rühmitada väikesteks partiideks, et luua reaalajas või peaaegu reaalajas vastuseid. Näiteks kui teil on vaja töödelda pidevat andmevoogu väikese latentsuse ja suure läbilaskevõimega, nõuab iga päringu jaoks eraldi reaalajas lõpp-punkti kutsumine rohkem ressursse ja võib võtta rohkem aega kõigi päringute töötlemiseks, kuna töötlemine toimub järjestikku. . Parem lähenemine oleks rühmitada mõned päringud ja kutsuda reaalajas lõpp-punkt partii järeldamisrežiimis, mis töötleb teie päringuid mudeli ühe edasikäiguga ja tagastab päringu hulgivastuse reaalajas või peaaegu reaalajas. . Vastuse latentsusaeg sõltub sellest, kui palju taotlusi kokku rühmitate, ja eksemplari mälu suurusest, seega saate partii suurust häälestada vastavalt oma ärinõuetele latentsusaja ja läbilaskevõime osas. Me kutsume seda reaalajas partii järeldus sest see ühendab pakkimise kontseptsiooni, pakkudes samas reaalajas vastuseid. Reaalajas pakettjäreldamise abil saate saavutada tasakaalu madala latentsusaja ja suure läbilaskevõime vahel, võimaldades teil töödelda suuri andmemahtusid õigeaegselt ja tõhusalt.

Kiirkäivituse partii teisendus teksti2teksti genereerimise mudelite jaoks võimaldab teil edastada paketi hüperparameetrid keskkonnamuutujate kaudu, mis suurendavad veelgi läbilaskevõimet ja minimeerivad latentsust.

JumpStart pakub eelkoolitatud avatud lähtekoodiga mudeleid paljudele probleemitüüpidele, mis aitavad teil masinõppega (ML) alustada. Saate neid mudeleid enne juurutamist järk-järgult koolitada ja häälestada. KiirStart pakub ka lahendusmalle, mis seadistavad infrastruktuuri tavaliste kasutusjuhtude jaoks, ja käivitatavaid märkmikke ML-i jaoks Amazon SageMaker. Eelkoolitatud mudelitele, lahendusmallidele ja näidetele pääsete juurde JumpStarti sihtlehe kaudu Amazon SageMaker Studio. JumpStarti mudelitele pääsete juurde ka SageMaker Python SDK abil.

Selles postituses demonstreerime, kuidas kasutada eelkoolitatud tipptasemel tehnikat text2text FLAN T5 mudelid Hugging Face'ist partii teisendamiseks ja reaalajas partii järelduste tegemiseks.

Lahenduse ülevaade

Märkmik, mis näitab eelkoolitatud Text2Text FLAN T5 mudelite partii teisendust Kallistav nägu saadaval järgnevalt GitHubi hoidla. See märkmik kasutab Hugging Face'i andmeid cnn_dailymail SageMakeri SDK-d kasutava teksti kokkuvõtte ülesande andmestik.

Järgmised on peamised sammud partii teisenduse ja reaalajas partii järelduse rakendamiseks.

  1. Seadke eeltingimused.
  2. Valige eelkoolitatud mudel.
  3. Tooge mudeli artefaktid.
  4. Määrake partii teisenduse töö hüperparameetrid.
  5. Valmistage ette andmed partii teisendamiseks.
  6. Käivitage partii teisendustöö.
  7. Hinnake kokkuvõtet, kasutades a RED (Recall-Oriented Understudy for Gisting Evaluation) skoor.
  8. Tehke reaalajas partii järeldused.

Seadke eeltingimused

Enne sülearvuti käivitamist peate läbima mõned esialgsed seadistustoimingud. Seadistagem SageMakeri täitmisroll, et sellel oleks õigused teie nimel AWS-i teenuseid käitada:

sagemaker_session = Session()
aws_role = sagemaker_session.get_caller_identity_arn()
aws_region = boto3.Session().region_name
sess = sagemaker.Session()

Valige eelkoolitatud mudel

Vaikemudelina kasutame mudelit huggingface-text2text-flan-t5-large. Valikuliselt saate KiirStartis hankida saadaolevate Text2Text mudelite loendi ja valida oma eelistatud mudeli. See meetod pakub lihtsat viisi erinevate mudeli ID-de valimiseks sama sülearvuti abil. Demonstreerimiseks kasutame mudelit huggingface-text2text-flan-t5-large:

model_id, model_version, = ( "huggingface-text2text-flan-t5-large", "*",
)

Tooge mudeli artefaktid

SageMakeriga saame teha järeldusi eelkoolitatud mudeli kohta, isegi ilma seda uues andmestikus esmalt viimistlemata. Alustame otsimisega deploy_image_uri, deploy_source_urija model_uri eelkoolitatud mudeli jaoks:

inference_instance_type = "ml.p3.2xlarge" # Retrieve the inference docker container uri. This is the base HuggingFace container image for the default model above.
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 model uri.
model_uri = model_uris.retrieve(
model_id=model_id, model_version=model_version, model_scope="inference"
) #Create the SageMaker model instance
model = Model(
image_uri=deploy_image_uri,
model_data=model_uri,
role=aws_role,
predictor_cls=Predictor)

Määrake partii teisenduse töö hüperparameetrid

Pakettmuundustööle võite keskkonnamuutujatena edastada mis tahes hüperparameetrite alamhulka. Neid hüperparameetreid saate edastada ka JSON-i kasulikus koormuses. Kui aga määrate hüperparameetrite jaoks keskkonnamuutujaid, nagu näitab järgmine kood, siis JSON-i ridade kasuliku koormuse üksikute näidete täpsemaid hüperparameetreid ei kasutata. Kui soovite kasutada kasuliku koormuse hüperparameetreid, võiksite määrata hyper_params_dict parameetri asemel null.

#Specify the Batch Job Hyper Params Here, If you want to treate each example hyperparameters different please pass hyper_params_dict as None
hyper_params = {"batch_size":4, "max_length":50, "top_k": 50, "top_p": 0.95, "do_sample": True}
hyper_params_dict = {"HYPER_PARAMS":str(hyper_params)}

Valmistage andmed ette partii teisendamiseks

Nüüd oleme valmis laadima cnn_dailymail Hugging Face'i andmestik:

cnn_test = load_dataset('cnn_dailymail','3.0.0',split='test')

Käime iga andmesisestuse üle ja loome sisendandmed vajalikus vormingus. Loome an articles.jsonl fail testandmefailina, mis sisaldab artikleid, mis tuleb sisendkoormusena kokku võtta. Selle faili loomisel lisame viipa "Briefly summarize this text:" igale testisisestuse reale. Kui soovite iga testsisendi jaoks kasutada erinevaid hüperparameetreid, saate need hüperparameetrid andmestiku loomise osana lisada.

Me loome highlights.jsonl põhitõefailina, mis sisaldab iga testfaili salvestatud artikli esiletõstmisi articles.jsonl. Salvestame mõlemad testfailid an Amazoni lihtne salvestusteenus (Amazon S3) kopp. Vaadake järgmist koodi:

#You can specify a prompt here
prompt = "Briefly summarize this text: "
#Provide the test data and the ground truth file name
test_data_file_name = "articles.jsonl"
test_reference_file_name = 'highlights.jsonl' test_articles = []
test_highlights =[] # We will go over each data entry and create the data in the input required format as described above
for id, test_entry in enumerate(cnn_test): article = test_entry['article'] highlights = test_entry['highlights'] # Create a payload like this if you want to have different hyperparameters for each test input # payload = {"id": id,"text_inputs": f"{prompt}{article}", "max_length": 100, "temperature": 0.95} # Note that if you specify hyperparameter for each payload individually, you may want to ensure that hyper_params_dict is set to None instead payload = {"id": id,"text_inputs": f"{prompt}{article}"} test_articles.append(payload) test_highlights.append({"id":id, "highlights": highlights}) with open(test_data_file_name, "w") as outfile: for entry in test_articles: outfile.write("%sn" % json.dumps(entry)) with open(test_reference_file_name, "w") as outfile: for entry in test_highlights: outfile.write("%sn" % json.dumps(entry)) # Uploading the data s3 = boto3.client("s3")
s3.upload_file(test_data_file_name, output_bucket, os.path.join(output_prefix + "/batch_input/articles.jsonl"))

Käivitage partii teisendustöö

Kui käivitate pakettteisendustöö, käivitab SageMaker andmete töötlemiseks vajalikud arvutusressursid, sealhulgas protsessori või GPU eksemplarid, olenevalt valitud eksemplari tüübist. Pakettmuunduse töö ajal varustab ja haldab SageMaker automaatselt andmete töötlemiseks vajalikke arvutusressursse, sealhulgas eksemplare, salvestus- ja võrguressursse. Kui partii teisendustöö on lõpetatud, puhastab SageMaker arvutusressursid automaatselt. See tähendab, et töö käigus kasutatud eksemplarid ja salvestusruumid peatatakse ja eemaldatakse, vabastades ressursse ja minimeerides kulusid. Vaadake järgmist koodi:

# Creating the Batch transformer object
batch_transformer = model.transformer( instance_count=1, instance_type=inference_instance_type, output_path=s3_output_data_path, assemble_with="Line", accept="text/csv", max_payload=1, env = hyper_params_dict
) # Making the predications on the input data
batch_transformer.transform(s3_input_data_path, content_type="application/jsonlines", split_type="Line") batch_transformer.wait()

Järgmine on üks näide kirjest articles.jsonl testfail. Pange tähele, et selle faili kirjel on ID, mis ühtis predict.jsonl failikirjed, mis näitavad kokkuvõtlikku kirjet Hugging Face Text2Text mudeli väljundina. Samamoodi on alustõe failil ka andmekirje jaoks sobiv ID. Testfaili, põhitõefaili ja väljundfaili sobiv ID võimaldab tulemuste hõlpsaks tõlgendamiseks linkida sisendkirjeid väljundkirjetega.

Järgmine on kokkuvõtte tegemiseks mõeldud sisendkirje näide:

{"id": 0, "text_inputs": "Briefly summarize this text: (CNN)The Palestinian Authority officially became the 123rd member of the International Criminal Court on Wednesday, a step that gives the court jurisdiction over alleged crimes in Palestinian territories. The formal accession was marked with a ceremony at The Hague, in the Netherlands, where the court is based. The Palestinians signed the ICC's founding Rome Statute in January, when they also accepted its jurisdiction over alleged crimes committed "in the occupied Palestinian territory, including East Jerusalem, since June 13, 2014." Later that month, the ICC opened a preliminary examination into the situation in Palestinian territories, paving the way for possible war crimes investigations against Israelis. As members of the court, Palestinians may be subject to counter-charges as well. Israel and the United States, neither of which is an ICC member, opposed the Palestinians' efforts to join the body. But Palestinian Foreign Minister Riad al-Malki, speaking at Wednesday's ceremony, said it was a move toward greater justice. "As Palestine formally becomes a State Party to the Rome Statute today, the world is also a step closer to ending a long era of impunity and injustice," he said, according to an ICC news release. "Indeed, today brings us closer to our shared goals of justice and peace." Judge Kuniko Ozaki, a vice president of the ICC, said acceding to the treaty was just the first step for the Palestinians. "As the Rome Statute today enters into force for the State of Palestine, Palestine acquires all the rights as well as responsibilities that come with being a State Party to the Statute. These are substantive commitments, which cannot be taken lightly," she said. Rights group Human Rights Watch welcomed the development. "Governments seeking to penalize Palestine for joining the ICC should immediately end their pressure, and countries that support universal acceptance of the court's treaty should speak out to welcome its membership," said Balkees Jarrah, international justice counsel for the group. "What's objectionable is the attempts to undermine international justice, not Palestine's decision to join a treaty to which over 100 countries around the world are members." In January, when the preliminary ICC examination was opened, Israeli Prime Minister Benjamin Netanyahu described it as an outrage, saying the court was overstepping its boundaries. The United States also said it "strongly" disagreed with the court's decision. "As we have said repeatedly, we do not believe that Palestine is a state and therefore we do not believe that it is eligible to join the ICC," the State Department said in a statement. It urged the warring sides to resolve their differences through direct negotiations. "We will continue to oppose actions against Israel at the ICC as counterproductive to the cause of peace," it said. But the ICC begs to differ with the definition of a state for its purposes and refers to the territories as "Palestine." While a preliminary examination is not a formal investigation, it allows the court to review evidence and determine whether to investigate suspects on both sides. Prosecutor Fatou Bensouda said her office would "conduct its analysis in full independence and impartiality." The war between Israel and Hamas militants in Gaza last summer left more than 2,000 people dead. The inquiry will include alleged war crimes committed since June. The International Criminal Court was set up in 2002 to prosecute genocide, crimes against humanity and war crimes. CNN's Vasco Cotovio, Kareem Khadder and Faith Karimi contributed to this report."}

Järgmine on prognoositav väljund koos kokkuvõttega:

{'id': 0, 'generated_texts': ['The Palestinian Authority officially became a member of the International Criminal Court on Wednesday, a step that gives the court jurisdiction over alleged crimes in Palestinian territories.']}

Mudeli hindamise eesmärgil on põhitõe kokkuvõte järgmine:

{"id": 0, "highlights": "Membership gives the ICC jurisdiction over alleged crimes committed in Palestinian territories since last June .nIsrael and the United States opposed the move, which could open the door to war crimes investigations against Israelis ."}

Järgmisena kasutame mudeli hindamiseks põhitõde ja ennustatud väljundeid.

Hinnake mudelit ROUGE skooriga¶

REDe. meeldetuletustele orienteeritud põhiteabe hindamise alusuuring on mõõdikute kogum ja tarkvarapakett, mida kasutatakse automaatse kokkuvõtte ja masintõlke hindamiseks loomuliku keele töötlemisel. Mõõdikud võrdlevad automaatselt koostatud kokkuvõtet või tõlget viite (inimtoodetud) kokkuvõtte või tõlke või viidete komplektiga.

Järgmises koodis ühendame ennustatud ja algsed kokkuvõtted, ühendades need ühisel võtmel id ja kasutage seda ROUGE skoori arvutamiseks:

# Downloading the predictions
s3.download_file(
output_bucket, output_prefix + "/batch_output/" + "articles.jsonl.out", "predict.jsonl"
) with open('predict.jsonl', 'r') as json_file:
json_list = list(json_file) # Creating the prediction list for the dataframe
predict_dict_list = []
for predict in json_list:
if len(predict) > 1:
predict_dict = ast.literal_eval(predict)
predict_dict_req = {"id": predict_dict["id"], "prediction": predict_dict["generated_texts"][0]}
predict_dict_list.append(predict_dict_req) # Creating the predictions dataframe
predict_df = pd.DataFrame(predict_dict_list) test_highlights_df = pd.DataFrame(test_highlights) # Combining the predict dataframe with the original summarization on id to compute the rouge score
df_merge = test_highlights_df.merge(predict_df, on="id", how="left") rouge = evaluate.load('rouge')
results = rouge.compute(predictions=list(df_merge["prediction"]),references=list(df_merge["highlights"]))
print(results)
{'rouge1': 0.32749078992945646, 'rouge2': 0.126038645005132, 'rougeL': 0.22764277967933363, 'rougeLsum': 0.28162915746368966}

Tehke reaalajas partii järeldused

Järgmisena näitame teile, kuidas käivitada lõpp-punktis reaalajas partii järeldust, esitades sisendid loendina. Kasutame sama mudeli ID-d ja andmestikku nagu varem, välja arvatud juhul, kui võtame testandmestikust mõned kirjed ja kasutame neid reaalajas lõpp-punkti kutsumiseks.

Järgmine kood näitab, kuidas luua ja juurutada reaalajas lõpp-punkti reaalajas partii järeldamiseks:

from sagemaker.utils import name_from_base
endpoint_name = name_from_base(f"jumpstart-example-{model_id}")
# 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.
model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name
)

Järgmisena valmistame ette oma sisendkoorma. Selleks kasutame varem koostatud andmeid ja eraldame esimesed 10 testsisendit ning lisame tekstisisestele hüperparameetrid, mida soovime kasutada. Pakume seda kasulikku koormust reaalajas invoke_endpoint. Seejärel tagastatakse vastuse kasulik koormus vastuste loendina. Vaadake järgmist koodi:

#Provide all the text inputs to the model as a list
text_inputs = [entry["text_inputs"] for entry in test_articles[0:10]] # The information about the different Parameters is provided above
payload = { "text_inputs": text_inputs, "max_length": 50, "num_return_sequences": 1, "top_k": 50, "top_p": 0.95, "do_sample": True, "batch_size": 4
} def query_endpoint_with_json_payload(encoded_json, endpoint_name):
client = boto3.client("runtime.sagemaker")
response = client.invoke_endpoint(
EndpointName=endpoint_name, ContentType="application/json", Body=encoded_json
)
return response query_response = query_endpoint_with_json_payload(
json.dumps(payload).encode("utf-8"), endpoint_name=endpoint_name
) def parse_response_multiple_texts(query_response):
model_predictions = json.loads(query_response["Body"].read())
return model_predictions generated_text_list = parse_response_multiple_texts(query_response)
print(*generated_text_list, sep='n')

Koristage

Pärast lõpp-punkti testimist kustutage tasude vältimiseks kindlasti SageMakeri järelduse lõpp-punkt ja mudel.

Järeldus

Selles märkmikus viisime läbi pakkteisenduse, et tutvustada kokkuvõtlike ülesannete jaoks mudelit Hugging Face Text2Text Generator. Partii teisendus on kasulik järelduste tegemiseks suurtest andmekogumitest ilma püsivat lõpp-punkti nõudmata. Sidusime sisendkirjed järeldustega, et aidata tulemuste tõlgendamisel. Kasutasime ROUGE skoori, et võrrelda testiandmete kokkuvõtet mudeli loodud kokkuvõttega.

Lisaks demonstreerisime reaalajas pakettjäreldust, kus saate saata väikese andmepartii reaalajas lõpp-punkti, et saavutada tasakaal latentsusaja ja läbilaskevõime vahel selliste stsenaariumide puhul nagu sisendandmete voogesitamine. Reaalajas partii järeldus aitab suurendada reaalajas päringute läbilaskevõimet.

Proovige SageMakeris juba täna pakkteisendust Text2Text Generation mudelitega ja andke meile oma tagasisidest teada!


Autoritest

Tehke pakettteisendusi Amazon SageMaker Kiirstardi Text2Text Generation suurte keelemudelitega | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Hemant Singh on masinõppeinsener, kellel on kogemusi Amazon SageMaker JumpStart ja Amazon SageMaker sisseehitatud algoritmidega. Ta sai oma magistrikraadi Courant Institute of Mathematical Sciences ja B.Tech IIT Delhis. Tal on kogemusi mitmesuguste masinõppeprobleemidega loomuliku keele töötlemise, arvutinägemise ja aegridade analüüsi valdkonnas.

Tehke pakettteisendusi Amazon SageMaker Kiirstardi Text2Text Generation suurte keelemudelitega | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Rachna Chadha on AWS-i peamiste lahenduste arhitekti AI/ML strateegiliste kontode alal. Rachna on optimist, kes usub, et tehisintellekti eetiline ja vastutustundlik kasutamine võib tulevikus ühiskonda parandada ning tuua majanduslikku ja sotsiaalset õitsengut. Vabal ajal meeldib Rachnale perega aega veeta, matkata ja muusikat kuulata.

Tehke pakettteisendusi Amazon SageMaker Kiirstardi Text2Text Generation suurte keelemudelitega | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Dr Ashish Khetan on vanemrakendusteadlane, kellel on Amazon SageMaker sisseehitatud algoritmid ja aitab välja töötada masinõppe algoritme. Ta sai doktorikraadi Illinoisi Urbana-Champaigni ülikoolist. Ta on aktiivne masinõppe ja statistiliste järelduste uurija ning avaldanud palju artikleid NeurIPS, ICML, ICLR, JMLR, ACL ja EMNLP konverentsidel.

Ajatempel:

Veel alates AWS-i masinõpe