Esegui trasformazioni batch con Amazon SageMaker Jumpstart Text2Text Generation modelli di linguaggi di grandi dimensioni | Servizi Web Amazon

Esegui trasformazioni batch con Amazon SageMaker Jumpstart Text2Text Generation modelli di linguaggi di grandi dimensioni | Servizi Web Amazon

Oggi siamo lieti di annunciare che ora puoi eseguire trasformazioni batch con JumpStart di Amazon SageMaker modelli di linguaggio di grandi dimensioni (LLM) per la generazione di testo2testo. Le trasformazioni batch sono utili in situazioni in cui non è necessario che le risposte siano in tempo reale e pertanto è possibile eseguire l'inferenza in batch per set di dati di grandi dimensioni in blocco. Per la trasformazione batch, viene eseguito un processo batch che accetta l'input batch come un set di dati e un modello preaddestrato e genera previsioni per ogni punto dati nel set di dati. La trasformazione in batch è economica perché, a differenza degli endpoint ospitati in tempo reale che dispongono di hardware persistente, i cluster di trasformazione in batch vengono eliminati al termine del processo e pertanto l'hardware viene utilizzato solo per la durata del processo in batch.

In alcuni casi d'uso, le richieste di inferenza in tempo reale possono essere raggruppate in piccoli batch per l'elaborazione in batch per creare risposte in tempo reale o quasi in tempo reale. Ad esempio, se è necessario elaborare un flusso continuo di dati con bassa latenza e velocità effettiva elevata, richiamare separatamente un endpoint in tempo reale per ogni richiesta richiederebbe più risorse e potrebbe richiedere più tempo per elaborare tutte le richieste poiché l'elaborazione viene eseguita in modo seriale . Un approccio migliore sarebbe raggruppare alcune delle richieste e chiamare l'endpoint in tempo reale in modalità di inferenza batch, che elabora le richieste in un passaggio in avanti del modello e restituisce la risposta in blocco per la richiesta in tempo reale o quasi in tempo reale . La latenza della risposta dipenderà dal numero di richieste raggruppate e dalle dimensioni della memoria dell'istanza, pertanto è possibile ottimizzare le dimensioni del batch in base ai requisiti aziendali per latenza e velocità effettiva. Lo chiamiamo inferenza batch in tempo reale perché combina il concetto di batch pur fornendo risposte in tempo reale. Con l'inferenza batch in tempo reale, puoi raggiungere un equilibrio tra bassa latenza e throughput elevato, consentendoti di elaborare grandi volumi di dati in modo tempestivo ed efficiente.

La trasformazione batch Jumpstart per i modelli di generazione Text2Text consente di passare gli iperparametri batch attraverso variabili di ambiente che aumentano ulteriormente la velocità effettiva e riducono al minimo la latenza.

JumpStart fornisce modelli open source preaddestrati per un'ampia gamma di tipi di problemi per aiutarti a iniziare con il machine learning (ML). Puoi addestrare e ottimizzare questi modelli in modo incrementale prima della distribuzione. JumpStart fornisce anche modelli di soluzioni che configurano l'infrastruttura per casi d'uso comuni e notebook di esempio eseguibili per ML con Amazon Sage Maker. Puoi accedere ai modelli pre-addestrati, ai modelli di soluzione e agli esempi tramite la pagina di destinazione JumpStart in Amazon Sage Maker Studio. Puoi anche accedere ai modelli JumpStart utilizzando SageMaker Python SDK.

In questo post, dimostriamo come utilizzare lo stato dell'arte pre-addestrato text2text Modelli FLAN T5 da Hugging Face per la trasformazione batch e l'inferenza batch in tempo reale.

Panoramica della soluzione

Il notebook che mostra la trasformazione batch di modelli Text2Text FLAN T5 pre-addestrati da Abbracciare il viso disponibile di seguito Repository GitHub. Questo taccuino utilizza i dati di Hugging Face cnn_dailymail set di dati per un'attività di riepilogo del testo utilizzando SageMaker SDK.

Di seguito sono riportati i passaggi chiave per l'implementazione della trasformazione batch e dell'inferenza batch in tempo reale:

  1. Impostare i prerequisiti.
  2. Seleziona un modello preaddestrato.
  3. Recupera artefatti per il modello.
  4. Specifica gli iperparametri del processo di trasformazione batch.
  5. Preparare i dati per la trasformazione batch.
  6. Eseguire il processo di trasformazione batch.
  7. Valutare il riepilogo utilizzando a ROUGE (Recall-Oriented Understudy for Gisting Evaluation).
  8. Eseguire l'inferenza batch in tempo reale.

Prerequisiti di configurazione

Prima di eseguire il notebook, è necessario completare alcuni passaggi di configurazione iniziale. Impostiamo il ruolo di esecuzione di SageMaker in modo che disponga delle autorizzazioni per eseguire i servizi AWS per tuo conto:

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

Seleziona un modello preaddestrato

Usiamo il modello huggingface-text2text-flan-t5-large come modello predefinito. Facoltativamente, puoi recuperare l'elenco dei modelli Text2Text disponibili su JumpStart e scegliere il tuo modello preferito. Questo metodo fornisce un modo semplice per selezionare diversi ID modello utilizzando lo stesso notebook. A scopo dimostrativo, utilizziamo il modello huggingface-text2text-flan-t5-large:

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

Recupera artefatti per il modello

Con SageMaker, possiamo eseguire l'inferenza sul modello pre-addestrato, anche senza ottimizzarlo prima su un nuovo set di dati. Iniziamo recuperando il file deploy_image_uri, deploy_source_urie model_uri per il modello pre-addestrato:

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)

Specifica gli iperparametri del processo di trasformazione batch

È possibile passare qualsiasi sottoinsieme di iperparametri come variabili di ambiente al processo di trasformazione batch. Puoi anche passare questi iperparametri in un payload JSON. Tuttavia, se imposti variabili di ambiente per iperparametri come mostrato nel codice seguente, gli iperparametri avanzati dei singoli esempi nel payload delle righe JSON non verranno utilizzati. Se desideri utilizzare gli iperparametri dal payload, potresti voler impostare l'estensione hyper_params_dict parametro come null invece.

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

Preparare i dati per la trasformazione batch

Ora siamo pronti per caricare il file cnn_dailymail set di dati da Hugging Face:

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

Esaminiamo ogni immissione di dati e creiamo i dati di input nel formato richiesto. Creiamo un articles.jsonl file come file di dati di test contenente articoli che devono essere riepilogati come payload di input. Mentre creiamo questo file, aggiungiamo il prompt "Briefly summarize this text:" a ciascuna riga di input del test. Se desideri avere iperparametri diversi per ogni input di test, puoi aggiungere tali iperparametri come parte della creazione del set di dati.

Noi creiamo highlights.jsonl come file di verità di base contenente i punti salienti di ciascun articolo memorizzato nel file di test articles.jsonl. Archiviamo entrambi i file di test in un file Servizio di archiviazione semplice Amazon (Amazon S3) secchio. Vedere il seguente codice:

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

Eseguire il processo di trasformazione batch

Quando avvii un processo di trasformazione in batch, SageMaker avvia le risorse di calcolo necessarie per elaborare i dati, comprese le istanze CPU o GPU a seconda del tipo di istanza selezionato. Durante il processo di trasformazione in batch, SageMaker fornisce e gestisce automaticamente le risorse di calcolo necessarie per elaborare i dati, incluse le istanze, l'archiviazione e le risorse di rete. Quando il processo di trasformazione in batch è completo, le risorse di calcolo vengono automaticamente ripulite da SageMaker. Ciò significa che le istanze e lo storage utilizzati durante il lavoro vengono arrestati e rimossi, liberando risorse e riducendo al minimo i costi. Vedere il seguente codice:

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

Di seguito è riportato un record di esempio da articles.jsonl file di prova. Tieni presente che il record in questo file ha un ID che corrisponde a predict.jsonl record di file che mostra un record di riepilogo come output del modello Hugging Face Text2Text. Allo stesso modo, anche il Ground Truth File ha un ID corrispondente per il record di dati. L'ID corrispondente nel file di test, nel file di verità fondamentale e nel file di output consente di collegare i record di input con i record di output per una facile interpretazione dei risultati.

Di seguito è riportato il record di input di esempio fornito per il riepilogo:

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

Di seguito è riportato l'output previsto con il riepilogo:

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

Quanto segue è il riepilogo della verità fondamentale ai fini della valutazione del modello:

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

Successivamente, utilizziamo la verità fondamentale e gli output previsti per la valutazione del modello.

Valuta il modello utilizzando un punteggio ROUGE¶

ROUGE, o Recall-Oriented Understudy for Gisting Evaluation, è un insieme di metriche e un pacchetto software utilizzato per valutare il riepilogo automatico e la traduzione automatica nell'elaborazione del linguaggio naturale. Le metriche confrontano un riepilogo o una traduzione prodotti automaticamente con un riepilogo o una traduzione di riferimento (prodotto dall'uomo) o un insieme di riferimenti.

Nel codice seguente, combiniamo i riepiloghi previsti e originali unendoli sulla chiave comune id e usa questo per calcolare il punteggio 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}

Eseguire l'inferenza batch in tempo reale

Successivamente, ti mostriamo come eseguire l'inferenza batch in tempo reale sull'endpoint fornendo gli input come elenco. Utilizziamo lo stesso ID modello e set di dati di prima, tranne per il fatto che prendiamo alcuni record dal set di dati di test e li usiamo per richiamare un endpoint in tempo reale.

Il codice seguente mostra come creare e distribuire un endpoint in tempo reale per l'inferenza batch in tempo reale:

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
)

Successivamente, prepariamo il nostro payload di input. Per questo, utilizziamo i dati che abbiamo preparato in precedenza ed estraiamo i primi 10 input di test e aggiungiamo gli input di testo con gli iperparametri che vogliamo utilizzare. Forniamo questo payload in tempo reale invoke_endpoint. Il payload della risposta viene quindi restituito come un elenco di risposte. Vedere il seguente codice:

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

ripulire

Dopo aver testato l'endpoint, assicurati di eliminare l'endpoint di inferenza SageMaker ed eliminare il modello per evitare di incorrere in addebiti.

Conclusione

In questo notebook, abbiamo eseguito una trasformazione batch per mostrare il modello Hugging Face Text2Text Generator per le attività di riepilogo. La trasformazione in batch è vantaggiosa per ottenere inferenze da set di dati di grandi dimensioni senza richiedere un endpoint persistente. Abbiamo collegato i record di input con le inferenze per facilitare l'interpretazione dei risultati. Abbiamo utilizzato il punteggio ROUGE per confrontare il riepilogo dei dati del test con il riepilogo generato dal modello.

Inoltre, abbiamo dimostrato l'inferenza batch in tempo reale, in cui è possibile inviare un piccolo batch di dati a un endpoint in tempo reale per raggiungere un equilibrio tra latenza e velocità effettiva per scenari come lo streaming di dati di input. L'inferenza batch in tempo reale aiuta ad aumentare il throughput per le richieste in tempo reale.

Prova oggi la trasformazione in batch con i modelli di generazione Text2Text in SageMaker e facci sapere il tuo feedback!


Circa gli autori

Esegui trasformazioni batch con Amazon SageMaker Jumpstart Text2Text Generation modelli linguistici di grandi dimensioni | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Hemant Singh è un Machine Learning Engineer con esperienza in Amazon SageMaker JumpStart e negli algoritmi integrati di Amazon SageMaker. Ha ottenuto i suoi master presso Courant Institute of Mathematical Sciences e B.Tech presso IIT Delhi. Ha esperienza nel lavoro su una vasta gamma di problemi di apprendimento automatico nel campo dell'elaborazione del linguaggio naturale, della visione artificiale e dell'analisi delle serie temporali.

Esegui trasformazioni batch con Amazon SageMaker Jumpstart Text2Text Generation modelli linguistici di grandi dimensioni | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Rachna Chada è Principal Solutions Architect AI/ML in Strategic Accounts presso AWS. Rachna è un'ottimista che crede che l'uso etico e responsabile dell'IA possa migliorare la società in futuro e portare prosperità economica e sociale. Nel tempo libero, a Rachna piace passare il tempo con la sua famiglia, fare escursioni e ascoltare musica.

Esegui trasformazioni batch con Amazon SageMaker Jumpstart Text2Text Generation modelli linguistici di grandi dimensioni | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Ashish Khetan è un Senior Applied Scientist con algoritmi integrati di Amazon SageMaker e aiuta a sviluppare algoritmi di machine learning. Ha conseguito il dottorato di ricerca presso l'Università dell'Illinois Urbana-Champaign. È un ricercatore attivo nell'apprendimento automatico e nell'inferenza statistica e ha pubblicato numerosi articoli nelle conferenze NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Timestamp:

Di più da Apprendimento automatico di AWS