Izvedite paketne transformacije z velikimi jezikovnimi modeli Amazon SageMaker Jumpstart Text2Text Generation | Spletne storitve Amazon

Izvedite paketne transformacije z velikimi jezikovnimi modeli Amazon SageMaker Jumpstart Text2Text Generation | Spletne storitve Amazon

Danes z veseljem sporočamo, da lahko zdaj izvajate paketne transformacije z Amazon SageMaker JumpStart veliki jezikovni modeli (LLM) za generiranje Text2Text. Paketne transformacije so uporabne v situacijah, ko ni treba, da so odgovori v realnem času, zato lahko izvedete paketno sklepanje za velike nabore podatkov v velikem obsegu. Za paketno pretvorbo se zažene paketno opravilo, ki sprejme paketni vnos kot nabor podatkov in vnaprej usposobljen model ter izda napovedi za vsako podatkovno točko v naboru podatkov. Paketno preoblikovanje je stroškovno učinkovito, ker se za razliko od gostujočih končnih točk v realnem času, ki imajo obstojno strojno opremo, gruče paketnega preoblikovanja raztrgajo, ko je opravilo končano, zato se strojna oprema uporablja samo v času trajanja paketnega opravila.

V nekaterih primerih uporabe je mogoče zahteve za sklepanje v realnem času združiti v majhne pakete za paketno obdelavo, da se ustvarijo odgovori v realnem ali skoraj realnem času. Na primer, če morate obdelati neprekinjen tok podatkov z nizko zakasnitvijo in visoko prepustnostjo, bi priklic končne točke v realnem času za vsako zahtevo posebej zahteval več virov in lahko traja dlje za obdelavo vseh zahtev, ker se obdelava izvaja zaporedno . Boljši pristop bi bil, da združite nekatere zahteve in pokličete končno točko v realnem času v načinu paketnega sklepanja, ki obdela vaše zahteve v enem prehodu modela naprej in vrne množični odgovor za zahtevo v realnem ali skoraj realnem času . Zakasnitev odgovora bo odvisna od tega, koliko zahtev združite skupaj, in velikosti pomnilnika primerka, zato lahko prilagodite velikost paketa glede na vaše poslovne zahteve za zakasnitev in prepustnost. Temu pravimo paketno sklepanje v realnem času ker združuje koncept šarženja, medtem ko še vedno zagotavlja odgovore v realnem času. S paketnim sklepanjem v realnem času lahko dosežete ravnotežje med nizko zakasnitvijo in visoko prepustnostjo, kar vam omogoča obdelavo velikih količin podatkov na pravočasen in učinkovit način.

Paketno preoblikovanje Jumpstart za modele Text2Text Generation vam omogoča posredovanje paketnih hiperparametrov prek spremenljivk okolja, ki dodatno povečajo prepustnost in zmanjšajo zakasnitev.

JumpStart ponuja vnaprej pripravljene odprtokodne modele za širok nabor vrst problemov, ki vam pomagajo začeti s strojnim učenjem (ML). Te modele lahko postopoma usposabljate in prilagajate pred uvedbo. JumpStart ponuja tudi predloge rešitev, ki nastavijo infrastrukturo za pogoste primere uporabe, in primere izvedljivih prenosnih računalnikov za ML z Amazon SageMaker. Do vnaprej usposobljenih modelov, predlog rešitev in primerov lahko dostopate prek ciljne strani JumpStart v Amazon SageMaker Studio. Do modelov JumpStart lahko dostopate tudi s SDK-jem SageMaker Python.

V tej objavi prikazujemo, kako uporabljati najsodobnejše predhodno usposobljene text2text modeli FLAN T5 iz Hugging Face za paketno pretvorbo in paketno sklepanje v realnem času.

Pregled rešitev

Beležnica, ki prikazuje paketno pretvorbo vnaprej usposobljenih modelov Text2Text FLAN T5 iz Objemni obraz na voljo v naslednjem GitHub repozitorij. Ta zvezek uporablja podatke iz Hugging Face cnn_dailymail nabor podatkov za nalogo povzemanja besedila z uporabo SDK SageMaker.

Sledijo ključni koraki za implementacijo paketne transformacije in paketnega sklepanja v realnem času:

  1. Nastavite predpogoje.
  2. Izberite vnaprej usposobljen model.
  3. Pridobite artefakte za model.
  4. Podajte hiperparametre opravila paketnega preoblikovanja.
  5. Pripravite podatke za paketno pretvorbo.
  6. Zaženite opravilo paketnega preoblikovanja.
  7. Ocenite povzetek z uporabo a RED (Recall-Oriented Understudy for Gisting Evaluation) rezultat.
  8. Izvedite paketno sklepanje v realnem času.

Nastavite predpogoje

Preden zaženete prenosni računalnik, morate izvesti nekaj začetnih namestitvenih korakov. Nastavimo izvršilno vlogo SageMaker, da bo imela dovoljenja za izvajanje storitev AWS v vašem imenu:

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

Izberite vnaprej usposobljen model

Kot privzeti model uporabljamo model huggingface-text2text-flan-t5-large. Po želji lahko na JumpStart pridobite seznam razpoložljivih modelov Text2Text in izberete želeni model. Ta metoda zagotavlja preprost način za izbiro različnih ID-jev modela z uporabo istega zvezka. Za predstavitvene namene uporabljamo model huggingface-text2text-flan-t5-large:

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

Pridobite artefakte za model

S SageMakerjem lahko izvedemo sklepanje na predhodno usposobljenem modelu, tudi brez natančnega prilagajanja na novem naboru podatkov. Začnemo s pridobivanjem deploy_image_uri, deploy_source_uriin model_uri za predhodno usposobljen model:

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)

Podajte hiperparametre opravila paketnega preoblikovanja

Opravilu paketnega preoblikovanja lahko posredujete katero koli podmnožico hiperparametrov kot spremenljivke okolja. Te hiperparametre lahko posredujete tudi v obremenitvi JSON. Vendar, če nastavljate spremenljivke okolja za hiperparametre, kot prikazuje naslednja koda, potem napredni hiperparametri iz posameznih primerov v obremenitvi vrstic JSON ne bodo uporabljeni. Če želite uporabiti hiperparametre iz tovora, boste morda želeli nastaviti hyper_params_dict parameter kot nič.

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

Pripravite podatke za paketno pretvorbo

Zdaj smo pripravljeni za nalaganje cnn_dailymail nabor podatkov iz Hugging Face:

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

Vsak vnos podatkov pregledamo in izdelamo vhodne podatke v zahtevani obliki. Ustvarjamo articles.jsonl datoteka kot testna podatkovna datoteka, ki vsebuje članke, ki jih je treba povzeti kot vhodni koristni tovor. Ko ustvarimo to datoteko, dodamo poziv "Briefly summarize this text:" v vsako testno vhodno vrstico. Če želite imeti različne hiperparametre za vsak testni vnos, lahko te hiperparametre dodate kot del ustvarjanja nabora podatkov.

Ustvarjamo highlights.jsonl kot datoteka temeljne resnice, ki vsebuje poudarke vsakega članka, shranjenega v testni datoteki articles.jsonl. Obe testni datoteki shranimo v an Preprosta storitev shranjevanja Amazon (Amazon S3) vedro. Oglejte si naslednjo kodo:

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

Zaženite opravilo paketnega preoblikovanja

Ko zaženete opravilo paketnega preoblikovanja, SageMaker zažene potrebne računalniške vire za obdelavo podatkov, vključno z instancami CPE ali GPE, odvisno od izbrane vrste instance. Med opravilom paketnega preoblikovanja SageMaker samodejno zagotavlja in upravlja računalniške vire, potrebne za obdelavo podatkov, vključno z instancami, shrambo in omrežnimi viri. Ko je opravilo paketnega preoblikovanja končano, SageMaker samodejno očisti računalniške vire. To pomeni, da se primerki in shramba, uporabljena med opravilom, ustavijo in odstranijo, s čimer se sprostijo viri in zmanjšajo stroški. Oglejte si naslednjo kodo:

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

Sledi en primer zapisa iz articles.jsonl testna datoteka. Upoštevajte, da ima zapis v tej datoteki ID, ki se ujema z predict.jsonl zapisi datoteke, ki prikazuje povzeti zapis kot izhod iz modela Hugging Face Text2Text. Podobno ima datoteka z resničnostjo tal tudi ujemajoč se ID za zapis podatkov. Ujemanje ID-ja v testni datoteki, datoteki z resničnimi podatki in izhodni datoteki omogoča povezovanje vhodnih zapisov z izhodnimi zapisi za enostavno interpretacijo rezultatov.

Sledi primer vhodnega zapisa, ki je na voljo za povzemanje:

{"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."}

Sledi predviden rezultat s povzetkom:

{'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.']}

Sledi povzetek osnovne resnice za namene vrednotenja modela:

{"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 ."}

Nato uporabimo osnovno resnico in predvidene rezultate za vrednotenje modela.

Ocenite model z oceno ROUGE¶

RED, ali Recall-Oriented Understudy for Gisting Evaluation, je nabor meritev in programski paket, ki se uporablja za ocenjevanje samodejnega povzemanja in strojnega prevajanja pri obdelavi naravnega jezika. Meritve primerjajo samodejno ustvarjen povzetek ali prevod z referenčnim (človeško ustvarjenim) povzetkom ali prevodom ali nizom referenc.

V naslednji kodi združimo predvidene in izvirne povzetke tako, da jih združimo na skupnem ključu id in uporabite to za izračun ocene ROUGE:

# 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}

Izvedite paketno sklepanje v realnem času

Nato vam pokažemo, kako izvajati paketno sklepanje v realnem času na končni točki, tako da podate vnose kot seznam. Uporabljamo isti ID modela in nabor podatkov kot prej, le da vzamemo nekaj zapisov iz testnega nabora podatkov in jih uporabimo za priklic končne točke v realnem času.

Naslednja koda prikazuje, kako ustvariti in razmestiti končno točko v realnem času za paketno sklepanje v realnem času:

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
)

Nato pripravimo naš vhodni tovor. Za to uporabimo podatke, ki smo jih pripravili prej, in ekstrahiramo prvih 10 testnih vnosov ter dodamo besedilne vnose s hiperparametri, ki jih želimo uporabiti. To koristno obremenitev zagotavljamo v realnem času invoke_endpoint. Tovor odgovora se nato vrne kot seznam odgovorov. Oglejte si naslednjo kodo:

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

Čiščenje

Ko ste preizkusili končno točko, izbrišite končno točko sklepanja SageMaker in izbrišite model, da se izognete zaračunavanju.

zaključek

V tem zvezku smo izvedli paketno pretvorbo za predstavitev modela Hugging Face Text2Text Generator za naloge povzemanja. Paketno preoblikovanje je koristno pri pridobivanju sklepov iz velikih naborov podatkov, ne da bi zahtevali obstojno končno točko. Vhodne zapise smo povezali s sklepi za pomoč pri interpretaciji rezultatov. Rezultat ROUGE smo uporabili za primerjavo povzemanja testnih podatkov s povzemanjem, ustvarjenim z modelom.

Poleg tega smo prikazali paketno sklepanje v realnem času, kjer lahko pošljete majhen paket podatkov na končno točko v realnem času, da dosežete ravnotežje med zakasnitvijo in prepustnostjo za scenarije, kot je pretakanje vhodnih podatkov. Paketno sklepanje v realnem času pomaga povečati prepustnost za zahteve v realnem času.

Preizkusite paketno pretvorbo z modeli Text2Text Generation v SageMakerju še danes in nam sporočite svoje povratne informacije!


O avtorjih

Izvedite paketne transformacije z velikimi jezikovnimi modeli Amazon SageMaker Jumpstart Text2Text Generation | Spletne storitve Amazon PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Hemant Singh je inženir strojnega učenja z izkušnjami z vgrajenimi algoritmi Amazon SageMaker JumpStart in Amazon SageMaker. Magistriral je na Courantovem inštitutu za matematične znanosti in diplomiral na IIT Delhi. Ima izkušnje z delom na različnih problemih strojnega učenja na področju obdelave naravnega jezika, računalniškega vida in analize časovnih vrst.

Izvedite paketne transformacije z velikimi jezikovnimi modeli Amazon SageMaker Jumpstart Text2Text Generation | Spletne storitve Amazon PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Rachna Chadha je glavni arhitekt rešitev AI/ML v Strategic Accounts pri AWS. Rachna je optimist, ki verjame, da lahko etična in odgovorna uporaba umetne inteligence izboljša družbo v prihodnosti ter prinese gospodarsko in družbeno blaginjo. V prostem času Rachna rada preživlja čas z družino, hodi na pohode in posluša glasbo.

Izvedite paketne transformacije z velikimi jezikovnimi modeli Amazon SageMaker Jumpstart Text2Text Generation | Spletne storitve Amazon PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Dr. Ashish Khetan je višji aplikativni znanstvenik z vgrajenimi algoritmi Amazon SageMaker in pomaga pri razvoju algoritmov strojnega učenja. Doktoriral je na Univerzi Illinois Urbana-Champaign. Je aktiven raziskovalec strojnega učenja in statističnega sklepanja ter je objavil številne članke na konferencah NeurIPS, ICML, ICLR, JMLR, ACL in EMNLP.

Časovni žig:

Več od Strojno učenje AWS