Kötegelt átalakítások végrehajtása az Amazon SageMaker Jumpstart Text2Text Generation nagy nyelvi modellekkel | Amazon webszolgáltatások

Kötegelt átalakítások végrehajtása az Amazon SageMaker Jumpstart Text2Text Generation nagy nyelvi modellekkel | Amazon webszolgáltatások

Ma örömmel jelentjük be, hogy mostantól csoportos átalakításokat hajthat végre a következővel Amazon SageMaker JumpStart nagy nyelvi modellek (LLM) a Text2Text Generation számára. A kötegelt átalakítások olyan helyzetekben hasznosak, amikor a válaszoknak nem kell valós idejűnek lenniük, és ezért tömegesen köthet következtetéseket nagy adatkészletekre. A kötegelt átalakításhoz egy kötegelt feladat fut, amely a kötegelt bemenetet adatkészletként és előre betanított modellként veszi, és előrejelzéseket ad ki az adatkészlet minden adatpontjához. A kötegelt átalakítás költséghatékony, mivel ellentétben a valós idejű hosztolt végpontokkal, amelyek állandó hardverrel rendelkeznek, a kötegelt átalakítási fürtök a feladat befejezésekor lebontódnak, és ezért a hardvert csak a kötegelt feladat időtartamára használják.

Egyes felhasználási esetekben a valós idejű következtetési kérelmek kis kötegekbe csoportosíthatók kötegelt feldolgozás céljából, hogy valós idejű vagy közel valós idejű válaszokat hozzanak létre. Például, ha folyamatos adatfolyamot kell feldolgoznia alacsony késleltetéssel és nagy áteresztőképességgel, egy valós idejű végpont külön-külön történő meghívása minden kéréshez több erőforrást igényel, és tovább tarthat az összes kérés feldolgozása, mivel a feldolgozás sorozatosan történik. . Egy jobb megközelítés az lenne, ha csoportosítaná a kérések egy részét, és kötegelt következtetési módban hívná meg a valós idejű végpontot, amely a kéréseket a modell egy előrehaladási lépésében dolgozza fel, és valós időben vagy közel valós időben adja vissza a kérés tömeges választ. . A válasz várakozási ideje a csoportosított kérések számától és a példánymemória méretétől függ, ezért a kötegméretet a várakozási idő és az átviteli sebesség üzleti követelményei szerint hangolhatja. Ezt hívjuk valós idejű kötegelt következtetés mert egyesíti a kötegelés fogalmát, miközben valós idejű válaszokat ad. A valós idejű kötegelt következtetéssel egyensúlyt érhet el az alacsony késleltetés és a nagy átviteli sebesség között, lehetővé téve a nagy mennyiségű adat időbeni és hatékony feldolgozását.

A Jumpstart kötegelt átalakítás a szöveg2szöveggenerációs modellekhez lehetővé teszi a kötegelt hiperparaméterek átadását olyan környezeti változókon keresztül, amelyek tovább növelik az átviteli sebességet és minimalizálják a késleltetést.

A JumpStart előképzett, nyílt forráskódú modelleket kínál számos problématípushoz, hogy segítsen a gépi tanulás (ML) elkezdésében. Ezeket a modelleket a telepítés előtt fokozatosan betaníthatja és hangolhatja. A JumpStart megoldássablonokat is kínál, amelyek infrastruktúrát állítanak be a gyakori felhasználási esetekhez, valamint futtatható példajegyzetfüzeteket az ML-hez Amazon SageMaker. Az előre betanított modelleket, megoldássablonokat és példákat a JumpStart nyitóoldalán érheti el Amazon SageMaker Studio. A JumpStart modelleket a SageMaker Python SDK használatával is elérheti.

Ebben a bejegyzésben bemutatjuk, hogyan kell használni a legkorszerűbb előképzettséget text2text FLAN T5 modellek a Hugging Face-ből a kötegelt átalakításhoz és a valós idejű kötegelt következtetésekhez.

Megoldás áttekintése

A notebook, amely az előre betanított Text2Text FLAN T5 modellek kötegelt átalakítását mutatja Átölelő arc a következőkben érhető el GitHub tárház. Ez a notebook a Hugging Face adatait használja cnn_dailymail adatkészlet egy szöveges összegzési feladathoz a SageMaker SDK használatával.

A következő lépések a kötegelt átalakítás és a valós idejű kötegkövetkeztetés megvalósításának legfontosabb lépései:

  1. Állítsa be az előfeltételeket.
  2. Válasszon egy előre betanított modellt.
  3. A modell műtermékeinek lekérése.
  4. Adja meg a kötegelt átalakítási feladat hiperparamétereit.
  5. Készítse elő az adatokat a kötegelt átalakításhoz.
  6. Futtassa a kötegelt átalakítási feladatot.
  7. Értékelje az összegzést a segítségével PIROS (Recall-Oriented Understudy for Gisting Evaluation) pontszáma.
  8. Végezzen valós idejű kötegelt következtetést.

Állítsa be az előfeltételeket

A notebook futtatása előtt el kell végeznie néhány kezdeti beállítási lépést. Állítsuk be a SageMaker végrehajtási szerepkört, hogy jogosult legyen AWS-szolgáltatások futtatására az Ön nevében:

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

Válasszon egy előre betanított modellt

Alapértelmezett modellként a huggingface-text2text-flan-t5-large modellt használjuk. Opcionálisan lekérheti az elérhető Text2Text modellek listáját a JumpStartban, és kiválaszthatja a kívánt modellt. Ez a módszer egyszerű módot kínál különböző modellazonosítók kiválasztására ugyanazon notebook használatával. Bemutató céljára a huggingface-text2text-flan-t5-large modellt használjuk:

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

A modell műtermékeinek lekérése

A SageMaker segítségével az előre betanított modellen következtetést tudunk levonni anélkül, hogy először finomhangolnánk egy új adatkészleten. Kezdjük azzal, hogy lekérjük a deploy_image_uri, deploy_source_uriés model_uri az előre betanított modell számára:

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)

Adja meg a kötegelt átalakítási feladat hiperparamétereit

A hiperparaméterek bármely részhalmazát átadhatja környezeti változóként a kötegelt átalakítási feladatnak. Ezeket a hiperparamétereket JSON-adatállományban is átadhatja. Ha azonban a következő kódban bemutatott módon állít be környezeti változókat a hiperparaméterekhez, akkor a JSON-sorok hasznos adattartalmában szereplő egyedi példák speciális hiperparaméterei nem kerülnek felhasználásra. Ha hiperparamétereket szeretne használni a hasznos terhelésből, érdemes beállítani a hyper_params_dict paraméter helyett nulla.

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

Adatok előkészítése kötegelt átalakításhoz

Most készen állunk a betöltésre cnn_dailymail Hugging Face adatkészlete:

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

Minden adatbevitelt átnézünk, és elkészítjük a bemeneti adatokat a kívánt formátumban. Létrehozunk egy articles.jsonl fájl tesztadatfájlként, amely olyan cikkeket tartalmaz, amelyeket bemeneti hasznos adatként kell összefoglalni. A fájl létrehozásakor hozzáfűzzük a promptot "Briefly summarize this text:" minden tesztbeviteli sorhoz. Ha különböző hiperparamétereket szeretne minden egyes tesztbemenethez, akkor az adatkészlet létrehozásának részeként hozzáfűzheti ezeket a hiperparamétereket.

Létrehozunk highlights.jsonl mint az alapigazság-fájl, amely a tesztfájlban tárolt egyes cikkek kiemeléseit tartalmazza articles.jsonl. Mindkét tesztfájlt egy Amazon egyszerű tárolási szolgáltatás (Amazon S3) vödör. Lásd a következő kódot:

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

Futtassa a kötegelt átalakítási feladatot

Amikor elindít egy kötegelt átalakítási feladatot, a SageMaker elindítja a szükséges számítási erőforrásokat az adatok feldolgozásához, beleértve a CPU- vagy GPU-példányokat is, a kiválasztott példánytípustól függően. A kötegelt átalakítási feladat során a SageMaker automatikusan létrehozza és kezeli az adatok feldolgozásához szükséges számítási erőforrásokat, beleértve a példányokat, a tárolást és a hálózati erőforrásokat. Amikor a kötegelt átalakítási feladat befejeződött, a SageMaker automatikusan megtisztítja a számítási erőforrásokat. Ez azt jelenti, hogy a feladat során használt példányokat és tárhelyeket leállítják és eltávolítják, így erőforrások szabadulnak fel és a költségek minimalizálódnak. Lásd a következő kódot:

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

A következő egy példa rekord a articles.jsonl tesztfájl. Vegye figyelembe, hogy a fájl rekordjának azonosítója megegyezik a predict.jsonl fájlrekordok, amelyek egy összefoglaló rekordot jelenítenek meg a Hugging Face Text2Text modell kimeneteként. Hasonlóképpen, az alapigazság-fájlnak is van egy megfelelő azonosítója az adatrekordhoz. A tesztfájlban, a földi igazságfájlban és a kimeneti fájlban található egyező azonosító lehetővé teszi a bemeneti rekordok összekapcsolását a kimeneti rekordokkal az eredmények egyszerű értelmezéséhez.

A következő példa az összefoglaláshoz biztosított bemeneti rekord:

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

A következő a várható kimenet összegzéssel:

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

A következő az alapigazság összegzése modellértékelési célokra:

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

Ezután az alapigazságot és a megjósolt kimeneteket használjuk a modellértékeléshez.

Értékelje a modellt a ROUGE pontszám segítségével¶

PIROS, vagy Recall-Oriented Understudy for Gisting Evaluation, metrikák és szoftvercsomag, amelyet az automatikus összegzés és a gépi fordítás kiértékelésére használnak a természetes nyelvi feldolgozásban. A mérőszámok összehasonlítják az automatikusan készített összefoglalót vagy fordítást egy referencia (ember által készített) összefoglalóval vagy fordítással vagy hivatkozások halmazával.

A következő kódban az előrejelzett és az eredeti összefoglalókat a közös kulcson egyesítjük id és ezt használja a ROUGE pontszám kiszámításához:

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

Végezzen valós idejű kötegelt következtetést

Ezután bemutatjuk, hogyan futtathat valós idejű kötegelt következtetést a végponton a bemenetek listaként történő megadásával. Ugyanazt a modellazonosítót és adatkészletet használjuk, mint korábban, kivéve, hogy néhány rekordot veszünk a tesztadatkészletből, és valós idejű végpont meghívására használjuk őket.

A következő kód bemutatja, hogyan hozhat létre és telepíthet valós idejű végpontot a valós idejű kötegelt következtetéshez:

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
)

Ezután elkészítjük a bemeneti hasznos terhet. Ehhez a korábban elkészített adatokat használjuk fel, és kivonjuk az első 10 tesztbevitelt, és a szövegbevitelhez hozzáfűzzük a használni kívánt hiperparamétereket. Ezt a rakományt valós időben biztosítjuk invoke_endpoint. A válasz hasznos adata ezután válaszlistaként kerül visszaadásra. Lásd a következő kódot:

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

Tisztítsuk meg

A végpont tesztelése után feltétlenül törölje a SageMaker következtetési végpontot, és törölje a modellt, hogy elkerülje a költségeket.

Következtetés

Ebben a jegyzetfüzetben kötegelt átalakítást végeztünk, hogy bemutassuk a Hugging Face Text2Text Generator modellt az összegzési feladatokhoz. A kötegelt átalakítás előnyös nagy adatkészletekből következtetések levonásában, anélkül, hogy állandó végpontra lenne szükség. A bemeneti rekordokat következtetésekkel kapcsoltuk össze, hogy segítsük az eredmények értelmezését. A tesztadatok összegzésének összehasonlítására a ROUGE pontszámot használtuk a modell által generált összegzéssel.

Ezenkívül bemutattuk a valós idejű kötegelt következtetést, ahol kis mennyiségű adatot küldhet egy valós idejű végpontra, hogy egyensúlyt érjen el a várakozási idő és az átviteli sebesség között olyan forgatókönyveknél, mint a bemeneti adatok streamelése. A valós idejű kötegelt következtetés segít növelni a valós idejű kérések átviteli sebességét.

Próbálja ki a kötegelt átalakítást a Text2Text Generation modellekkel a SageMakerben még ma, és ossza meg velünk visszajelzését!


A szerzőkről

Perform batch transforms with Amazon SageMaker Jumpstart Text2Text Generation large language models | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Hemant Singh gépi tanulási mérnök, aki tapasztalattal rendelkezik az Amazon SageMaker JumpStart és az Amazon SageMaker beépített algoritmusaiban. Mesterképzését a Courant Institute of Mathematical Sciences-ben, a B.Tech-et pedig az IIT Delhiben szerezte. Tapasztalattal rendelkezik a természetes nyelvi feldolgozás, a számítógépes látás és az idősorelemzés területén a gépi tanulási problémák legkülönbözőbb skáláján.

Perform batch transforms with Amazon SageMaker Jumpstart Text2Text Generation large language models | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Rachna Chadha az AWS stratégiai számláinak fő megoldási építésze AI/ML. Rachna optimista, aki hisz abban, hogy a mesterséges intelligencia etikus és felelős használata javíthatja a társadalmat a jövőben, és gazdasági és társadalmi jólétet hozhat. Szabadidejében Rachna szereti a családjával tölteni az idejét, kirándulni és zenét hallgatni.

Perform batch transforms with Amazon SageMaker Jumpstart Text2Text Generation large language models | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Dr. Ashish Khetan vezető alkalmazott tudós az Amazon SageMaker beépített algoritmusaival, és segít gépi tanulási algoritmusok fejlesztésében. PhD fokozatát az Illinois Urbana-Champaign Egyetemen szerezte. A gépi tanulás és a statisztikai következtetések aktív kutatója, és számos közleményt publikált NeurIPS, ICML, ICLR, JMLR, ACL és EMNLP konferenciákon.

Időbélyeg:

Még több AWS gépi tanulás