Führen Sie Batch-Transformationen mit Amazon SageMaker durch. Jumpstart Text2Text Generierung großer Sprachmodelle | Amazon Web Services

Führen Sie Batch-Transformationen mit Amazon SageMaker durch. Jumpstart Text2Text Generierung großer Sprachmodelle | Amazon Web Services

Heute freuen wir uns, Ihnen mitteilen zu können, dass Sie jetzt Batch-Transformationen mit durchführen können Amazon SageMaker-JumpStart große Sprachmodelle (LLMs) für die Text2Text-Generierung. Batch-Transformationen sind in Situationen nützlich, in denen die Antworten nicht in Echtzeit erfolgen müssen und Sie daher Rückschlüsse im Batch für große Datenmengen in großen Mengen ziehen können. Für die Batch-Transformation wird ein Batch-Job ausgeführt, der Batch-Input als Datensatz und ein vorab trainiertes Modell verwendet und Vorhersagen für jeden Datenpunkt im Datensatz ausgibt. Die Batch-Transformation ist kosteneffektiv, da Batch-Transformationscluster im Gegensatz zu in Echtzeit gehosteten Endpunkten mit dauerhafter Hardware abgebaut werden, wenn der Job abgeschlossen ist, und die Hardware daher nur für die Dauer des Batch-Jobs verwendet wird.

In einigen Anwendungsfällen können Echtzeit-Inferenzanfragen zur Stapelverarbeitung in kleinen Stapeln gruppiert werden, um Antworten in Echtzeit oder nahezu in Echtzeit zu erstellen. Wenn Sie beispielsweise einen kontinuierlichen Datenstrom mit geringer Latenz und hohem Durchsatz verarbeiten müssen, würde das separate Aufrufen eines Echtzeitendpunkts für jede Anforderung mehr Ressourcen erfordern und die Verarbeitung aller Anforderungen kann länger dauern, da die Verarbeitung seriell erfolgt . Ein besserer Ansatz wäre, einige der Anfragen zu gruppieren und den Echtzeit-Endpunkt im Batch-Inferenzmodus aufzurufen, der Ihre Anfragen in einem Vorwärtsdurchlauf des Modells verarbeitet und die Massenantwort für die Anfrage in Echtzeit oder nahezu in Echtzeit zurückgibt . Die Latenz der Antwort hängt davon ab, wie viele Anfragen Sie gruppieren und wie groß der Instanzspeicher ist. Daher können Sie die Batchgröße entsprechend Ihren Geschäftsanforderungen hinsichtlich Latenz und Durchsatz anpassen. Wir nennen das Batch-Inferenz in Echtzeit weil es das Konzept der Stapelverarbeitung kombiniert und dennoch Echtzeitantworten liefert. Mit Echtzeit-Batch-Inferenz können Sie ein Gleichgewicht zwischen geringer Latenz und hohem Durchsatz erreichen und so große Datenmengen zeitnah und effizient verarbeiten.

Mit der Jumpstart-Batchtransformation für Text2Text-Generierungsmodelle können Sie die Batch-Hyperparameter über Umgebungsvariablen übergeben, was den Durchsatz weiter erhöht und die Latenz minimiert.

JumpStart bietet vorab trainierte Open-Source-Modelle für eine Vielzahl von Problemtypen, um Ihnen den Einstieg in maschinelles Lernen (ML) zu erleichtern. Sie können diese Modelle vor der Bereitstellung schrittweise trainieren und optimieren. JumpStart bietet außerdem Lösungsvorlagen, die eine Infrastruktur für gängige Anwendungsfälle einrichten, sowie ausführbare Beispiel-Notebooks für ML mit Amazon Sage Maker. Sie können über die JumpStart-Landingpage in auf die vorab trainierten Modelle, Lösungsvorlagen und Beispiele zugreifen Amazon SageMaker-Studio. Sie können auch mit dem SageMaker Python SDK auf JumpStart-Modelle zugreifen.

In diesem Beitrag zeigen wir, wie man die hochmodernen vorab trainierten Tools nutzt text2text FLAN T5-Modelle von Hugging Face für Batch-Transformation und Echtzeit-Batch-Inferenz.

Lösungsüberblick

Das Notizbuch zeigt die Stapeltransformation vorab trainierter Text2Text FLAN T5-Modelle von Gesicht umarmen im Folgenden verfügbar GitHub-Repository. Dieses Notizbuch verwendet Daten vom Hugging Face cnn_dailymail Datensatz für eine Textzusammenfassungsaufgabe mit dem SageMaker SDK.

Im Folgenden sind die wichtigsten Schritte zur Implementierung der Batch-Transformation und der Echtzeit-Batch-Inferenz aufgeführt:

  1. Voraussetzungen einrichten.
  2. Wählen Sie ein vorab trainiertes Modell aus.
  3. Rufen Sie Artefakte für das Modell ab.
  4. Geben Sie Hyperparameter für Batchtransformationsjobs an.
  5. Bereiten Sie Daten für die Batch-Transformation vor.
  6. Führen Sie den Batch-Transformationsauftrag aus.
  7. Bewerten Sie die Zusammenfassung mit a ROT (Recall-Oriented Understudy for Gisting Evaluation) Ergebnis.
  8. Führen Sie Batch-Inferenzen in Echtzeit durch.

Voraussetzungen einrichten

Bevor Sie das Notebook ausführen, müssen Sie einige anfängliche Einrichtungsschritte durchführen. Lassen Sie uns die SageMaker-Ausführungsrolle so einrichten, dass sie berechtigt ist, AWS-Dienste in Ihrem Namen auszuführen:

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

Wählen Sie ein vorab trainiertes Modell aus

Wir verwenden das Modell „hugingface-text2text-flan-t5-large“ als Standardmodell. Optional können Sie die Liste der verfügbaren Text2Text-Modelle auf JumpStart abrufen und Ihr bevorzugtes Modell auswählen. Diese Methode bietet eine einfache Möglichkeit, verschiedene Modell-IDs mit demselben Notebook auszuwählen. Zu Demonstrationszwecken verwenden wir das Modell „hugingface-text2text-flan-t5-large“:

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

Rufen Sie Artefakte für das Modell ab

Mit SageMaker können wir Rückschlüsse auf das vorab trainierte Modell ziehen, auch ohne es zuerst an einem neuen Datensatz zu optimieren. Wir beginnen mit dem Abrufen der deploy_image_uri, deploy_source_uri und model_uri für das vorab trainierte Modell:

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)

Geben Sie Hyperparameter für Batchtransformationsjobs an

Sie können eine beliebige Teilmenge von Hyperparametern als Umgebungsvariablen an den Batch-Transformationsauftrag übergeben. Sie können diese Hyperparameter auch in einer JSON-Nutzlast übergeben. Wenn Sie jedoch Umgebungsvariablen für Hyperparameter festlegen, wie im folgenden Code gezeigt, werden die erweiterten Hyperparameter aus den einzelnen Beispielen in der Nutzlast der JSON-Zeilen nicht verwendet. Wenn Sie Hyperparameter aus der Nutzlast verwenden möchten, möchten Sie möglicherweise die festlegen hyper_params_dict Geben Sie stattdessen den Parameter null ein.

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

Bereiten Sie Daten für die Stapeltransformation vor

Jetzt können wir das laden cnn_dailymail Datensatz von Hugging Face:

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

Wir gehen jede Dateneingabe durch und erstellen die Eingabedaten im erforderlichen Format. Wir erstellen eine articles.jsonl Datei als Testdatendatei mit Artikeln, die als Eingabenutzlast zusammengefasst werden müssen. Während wir diese Datei erstellen, hängen wir die Eingabeaufforderung an "Briefly summarize this text:" zu jeder Testeingangszeile. Wenn Sie für jede Testeingabe unterschiedliche Hyperparameter haben möchten, können Sie diese Hyperparameter im Rahmen der Erstellung des Datensatzes anhängen.

Wir erstellen highlights.jsonl als Ground-Truth-Datei, die die Höhepunkte jedes in der Testdatei gespeicherten Artikels enthält articles.jsonl. Wir speichern beide Testdateien in einem Amazon Simple Storage-Service (Amazon S3) Eimer. Siehe den folgenden Code:

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

Führen Sie den Batch-Transformationsauftrag aus

Wenn Sie einen Batch-Transformationsauftrag starten, startet SageMaker die erforderlichen Rechenressourcen zur Verarbeitung der Daten, einschließlich CPU- oder GPU-Instanzen, je nach ausgewähltem Instanztyp. Während des Batch-Transformationsauftrags stellt SageMaker automatisch die zur Verarbeitung der Daten erforderlichen Rechenressourcen bereit und verwaltet sie, einschließlich Instanzen, Speicher und Netzwerkressourcen. Wenn der Batch-Transformationsauftrag abgeschlossen ist, werden die Rechenressourcen automatisch von SageMaker bereinigt. Dies bedeutet, dass die während des Auftrags verwendeten Instanzen und Speicher angehalten und entfernt werden, wodurch Ressourcen freigesetzt und Kosten minimiert werden. Siehe den folgenden Code:

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

Das Folgende ist ein Beispieldatensatz aus dem articles.jsonl Testdatei. Beachten Sie, dass der Datensatz in dieser Datei eine ID hat, die mit übereinstimmt predict.jsonl Dateidatensätze, die einen zusammengefassten Datensatz als Ausgabe des Hugging Face Text2Text-Modells anzeigen. Ebenso verfügt die Ground-Truth-Datei über eine passende ID für den Datensatz. Die übereinstimmende ID in der Testdatei, der Ground-Truth-Datei und der Ausgabedatei ermöglicht die Verknüpfung von Eingabedatensätzen mit Ausgabedatensätzen für eine einfache Interpretation der Ergebnisse.

Das Folgende ist der Beispiel-Eingabedatensatz, der zur Zusammenfassung bereitgestellt wird:

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

Das Folgende ist die vorhergesagte Ausgabe mit Zusammenfassung:

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

Das Folgende ist die Grundwahrheitszusammenfassung für Modellbewertungszwecke:

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

Als nächstes verwenden wir die Grundwahrheit und die vorhergesagten Ergebnisse für die Modellbewertung.

Bewerten Sie das Modell mithilfe eines ROUGE-Scores¶

ROT, oder Recall-Oriented Understudy for Gisting Evaluation, ist eine Reihe von Metriken und ein Softwarepaket, das zur Bewertung der automatischen Zusammenfassung und maschinellen Übersetzung bei der Verarbeitung natürlicher Sprache verwendet wird. Die Metriken vergleichen eine automatisch erstellte Zusammenfassung oder Übersetzung mit einer (von Menschen erstellten) Referenzzusammenfassung oder -übersetzung oder einer Reihe von Referenzen.

Im folgenden Code kombinieren wir die vorhergesagten und ursprünglichen Zusammenfassungen, indem wir sie mit dem gemeinsamen Schlüssel verbinden id und verwenden Sie dies, um den ROUGE-Score zu berechnen:

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

Führen Sie Batch-Inferenzen in Echtzeit durch

Als Nächstes zeigen wir Ihnen, wie Sie eine Batch-Inferenz in Echtzeit auf dem Endpunkt ausführen, indem Sie die Eingaben als Liste bereitstellen. Wir verwenden dieselbe Modell-ID und denselben Datensatz wie zuvor, nehmen jedoch einige Datensätze aus dem Testdatensatz und verwenden sie, um einen Echtzeit-Endpunkt aufzurufen.

Der folgende Code zeigt, wie ein Echtzeit-Endpunkt für Echtzeit-Batch-Inferenz erstellt und bereitgestellt wird:

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
)

Als nächstes bereiten wir unsere Eingabenutzlast vor. Dazu verwenden wir die Daten, die wir zuvor vorbereitet haben, extrahieren die ersten 10 Testeingaben und hängen die Texteingaben mit Hyperparametern an, die wir verwenden möchten. Wir stellen diese Nutzlast in Echtzeit zur Verfügung invoke_endpoint. Die Antwortnutzlast wird dann als Liste von Antworten zurückgegeben. Siehe den folgenden Code:

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

Aufräumen

Stellen Sie nach dem Testen des Endpunkts sicher, dass Sie den SageMaker-Inferenzendpunkt und das Modell löschen, um Gebühren zu vermeiden.

Zusammenfassung

In diesem Notizbuch haben wir eine Batch-Transformation durchgeführt, um das Hugging Face Text2Text Generator-Modell für Zusammenfassungsaufgaben vorzustellen. Die Stapeltransformation ist vorteilhaft, wenn es darum geht, Rückschlüsse aus großen Datensätzen zu ziehen, ohne dass ein persistenter Endpunkt erforderlich ist. Wir haben Eingabedatensätze mit Schlussfolgerungen verknüpft, um die Ergebnisinterpretation zu erleichtern. Wir haben den ROUGE-Score verwendet, um die Testdatenzusammenfassung mit der modellgenerierten Zusammenfassung zu vergleichen.

Darüber hinaus haben wir Echtzeit-Batch-Inferenz demonstriert, bei der Sie einen kleinen Datenstapel an einen Echtzeit-Endpunkt senden können, um ein Gleichgewicht zwischen Latenz und Durchsatz für Szenarien wie das Streamen von Eingabedaten zu erreichen. Echtzeit-Batch-Inferenz trägt dazu bei, den Durchsatz für Echtzeitanfragen zu erhöhen.

Probieren Sie noch heute die Batch-Transformation mit Text2Text-Generierungsmodellen in SageMaker aus und teilen Sie uns Ihr Feedback mit!


Über die Autoren

Führen Sie Batch-Transformationen mit Amazon SageMaker durch. Jumpstart Text2Text Generierung großer Sprachmodelle | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Hemant Singh ist ein Ingenieur für maschinelles Lernen mit Erfahrung in Amazon SageMaker JumpStart und den in Amazon SageMaker integrierten Algorithmen. Er erhielt seinen Master vom Courant Institute of Mathematical Sciences und seinen B.Tech vom IIT Delhi. Er verfügt über Erfahrung in der Arbeit an einer Vielzahl von Problemen des maschinellen Lernens im Bereich der Verarbeitung natürlicher Sprache, Computer Vision und Zeitreihenanalyse.

Führen Sie Batch-Transformationen mit Amazon SageMaker durch. Jumpstart Text2Text Generierung großer Sprachmodelle | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Rachna Chadha ist Principal Solutions Architect AI/ML in Strategic Accounts bei AWS. Rachna ist eine Optimistin, die glaubt, dass der ethische und verantwortungsvolle Einsatz von KI die Gesellschaft in Zukunft verbessern und wirtschaftlichen und sozialen Wohlstand bringen kann. In ihrer Freizeit verbringt Rachna gerne Zeit mit ihrer Familie, wandert und hört Musik.

Führen Sie Batch-Transformationen mit Amazon SageMaker durch. Jumpstart Text2Text Generierung großer Sprachmodelle | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Dr. Ashish Khetan ist Senior Applied Scientist mit integrierten Amazon SageMaker-Algorithmen und hilft bei der Entwicklung von Algorithmen für maschinelles Lernen. Er promovierte an der University of Illinois Urbana-Champaign. Er ist ein aktiver Forscher auf dem Gebiet des maschinellen Lernens und der statistischen Inferenz und hat viele Artikel auf den Konferenzen NeurIPS, ICML, ICLR, JMLR, ACL und EMNLP veröffentlicht.

Zeitstempel:

Mehr von AWS Maschinelles Lernen