Виконуйте пакетне перетворення за допомогою великих мовних моделей Amazon SageMaker Jumpstart Text2Text Generation | Веб-сервіси Amazon

Виконуйте пакетне перетворення за допомогою великих мовних моделей Amazon SageMaker Jumpstart Text2Text Generation | Веб-сервіси Amazon

Сьогодні ми раді повідомити, що тепер ви можете виконувати пакетні перетворення за допомогою Amazon SageMaker JumpStart великі мовні моделі (LLM) для генерації Text2Text. Пакетні перетворення корисні в ситуаціях, коли відповіді не обов’язково мають бути в режимі реального часу, тому ви можете виконувати групові висновки для великих наборів даних. Для пакетного перетворення виконується пакетне завдання, яке приймає пакетний вхід як набір даних і попередньо навчену модель і виводить прогнози для кожної точки даних у наборі даних. Пакетне перетворення є економічно ефективним, оскільки на відміну від розміщених у реальному часі кінцевих точок із постійним апаратним забезпеченням, кластери пакетного перетворення розриваються після завершення завдання, тому апаратне забезпечення використовується лише протягом пакетного завдання.

У деяких випадках використання запити на висновок у реальному часі можна згрупувати в невеликі пакети для пакетної обробки для створення відповідей у ​​реальному або майже реальному часі. Наприклад, якщо вам потрібно обробити безперервний потік даних із низькою затримкою та високою пропускною здатністю, виклик кінцевої точки реального часу для кожного запиту окремо потребуватиме більше ресурсів і може зайняти більше часу для обробки всіх запитів, оскільки обробка виконується послідовно . Кращим підходом було б згрупувати деякі запити та викликати кінцеву точку реального часу в режимі пакетного висновку, який обробляє ваші запити за один прохід моделі та повертає масову відповідь на запит у реальному або майже реальному часі. . Затримка відповіді залежатиме від кількості запитів, які ви групуєте разом, і розміру пам’яті екземпляра, тому ви можете налаштувати розмір пакета відповідно до вимог вашого бізнесу щодо затримки та пропускної здатності. Ми називаємо це пакетний висновок у реальному часі оскільки він поєднує в собі концепцію групування, водночас надаючи відповіді в реальному часі. За допомогою пакетного аналізу в режимі реального часу ви можете досягти балансу між низькою затримкою та високою пропускною здатністю, дозволяючи обробляти великі обсяги даних своєчасно та ефективно.

Пакетне перетворення Jumpstart для моделей Text2Text Generation дозволяє передавати пакетні гіперпараметри через змінні середовища, що додатково збільшує пропускну здатність і мінімізує затримку.

JumpStart надає попередньо підготовлені моделі з відкритим вихідним кодом для широкого спектру типів проблем, щоб допомогти вам почати роботу з машинним навчанням (ML). Ви можете поступово навчати та налаштовувати ці моделі перед розгортанням. JumpStart також надає шаблони рішень, які налаштовують інфраструктуру для поширених випадків використання, і виконувані приклади блокнотів для ML з Amazon SageMaker. Ви можете отримати доступ до попередньо підготовлених моделей, шаблонів рішень і прикладів на цільовій сторінці JumpStart у Студія Amazon SageMaker. Ви також можете отримати доступ до моделей JumpStart за допомогою SageMaker Python SDK.

У цій публікації ми демонструємо, як використовувати найсучасніші попередньо навчені text2text моделі FLAN T5 від Hugging Face для пакетного перетворення та пакетного висновку в реальному часі.

Огляд рішення

Блокнот із пакетним перетворенням попередньо підготовлених моделей Text2Text FLAN T5 із Обіймати обличчя доступні в наступному GitHub сховище. Цей блокнот використовує дані з Hugging Face cnn_dailymail набір даних для завдання підсумовування тексту за допомогою SDK SageMaker.

Нижче наведено ключові кроки для впровадження пакетного перетворення та пакетного висновку в реальному часі:

  1. Створіть передумови.
  2. Виберіть попередньо навчену модель.
  3. Отримати артефакти для моделі.
  4. Укажіть гіперпараметри завдання пакетного перетворення.
  5. Підготуйте дані для пакетного перетворення.
  6. Запустіть завдання пакетного перетворення.
  7. Оцініть узагальнення за допомогою a ЧЕРВОНИЙ (Орієнтоване на запам’ятовування дослідження для оцінки Гістінга).
  8. Виконуйте пакетний висновок у реальному часі.

Створіть передумови

Перш ніж запустити ноутбук, ви повинні виконати деякі початкові кроки налаштування. Давайте налаштуємо роль виконання SageMaker, щоб вона мала дозволи запускати служби AWS від вашого імені:

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

Виберіть попередньо навчену модель

Ми використовуємо модель huggingface-text2text-flan-t5-large як модель за замовчуванням. За бажанням ви можете отримати список доступних моделей Text2Text на JumpStart і вибрати бажану модель. Цей метод забезпечує простий спосіб вибору різних ідентифікаторів моделі за допомогою одного блокнота. Для демонстрації ми використовуємо модель huggingface-text2text-flan-t5-large:

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

Отримати артефакти для моделі

За допомогою SageMaker ми можемо робити висновок на попередньо навченій моделі, навіть без попереднього тонкого налаштування на новому наборі даних. Ми починаємо з отримання deploy_image_uri, deploy_source_uri та model_uri для попередньо навченої моделі:

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)

Укажіть гіперпараметри завдання пакетного перетворення

Ви можете передати будь-яку підмножину гіперпараметрів як змінні середовища в завдання пакетного перетворення. Ви також можете передати ці гіперпараметри в корисне навантаження JSON. Однак якщо ви встановлюєте змінні середовища для гіперпараметрів, як показано в наведеному нижче коді, розширені гіперпараметри з окремих прикладів у корисному навантаженні рядків JSON не використовуватимуться. Якщо ви хочете використовувати гіперпараметри з корисного навантаження, ви можете встановити hyper_params_dict параметр як нульовий.

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

Підготувати дані для пакетного перетворення

Тепер ми готові завантажити cnn_dailymail набір даних із Hugging Face:

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

Ми переглядаємо кожне введення даних і створюємо вхідні дані в потрібному форматі. Ми створюємо articles.jsonl файл як тестовий файл даних, що містить статті, які потрібно підсумувати як вхідне корисне навантаження. Коли ми створюємо цей файл, ми додаємо підказку "Briefly summarize this text:" до кожного вхідного рядка тесту. Якщо ви хочете мати різні гіперпараметри для кожного входу тесту, ви можете додати ці гіперпараметри як частину створення набору даних.

Ми створюємо highlights.jsonl як основний файл правди, що містить основні моменти кожної статті, збереженої в тестовому файлі articles.jsonl. Ми зберігаємо обидва тестові файли в Служба простого зберігання Amazon (Amazon S3) відро. Перегляньте наступний код:

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

Запустіть завдання пакетного перетворення

Коли ви починаєте завдання пакетного перетворення, SageMaker запускає необхідні обчислювальні ресурси для обробки даних, включаючи екземпляри CPU або GPU залежно від вибраного типу екземпляра. Під час завдання пакетного перетворення SageMaker автоматично надає та керує обчислювальними ресурсами, необхідними для обробки даних, включаючи екземпляри, сховище та мережеві ресурси. Коли завдання пакетного перетворення завершено, SageMaker автоматично очищає обчислювальні ресурси. Це означає, що екземпляри та сховище, які використовуються під час завдання, зупиняються та видаляються, звільняючи ресурси та мінімізуючи витрати. Перегляньте наступний код:

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

Нижче наведено один приклад запису з articles.jsonl тестовий файл. Зауважте, що запис у цьому файлі має ідентифікатор, який збігається з predict.jsonl записів файлів, які показують узагальнений запис як результат моделі Hugging Face Text2Text. Подібним чином, базовий файл правди також має відповідний ідентифікатор для запису даних. Ідентифікатор відповідності в тестовому файлі, файлі реальних даних і вихідному файлі дозволяє пов’язувати вхідні записи з вихідними записами для легкої інтерпретації результатів.

Нижче наведено приклад вхідного запису, наданого для підсумовування:

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

Нижче наведено прогнозований результат із підсумковуванням:

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

Нижче наведено основний підсумок істини для цілей оцінки моделі:

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

Далі ми використовуємо базову істину та прогнозовані результати для оцінки моделі.

Оцініть модель за шкалою ROUGE¶

ЧЕРВОНИЙ, або Recall-Oriented Understudy for Gisting Evaluation, — це набір показників і програмний пакет, який використовується для оцінки автоматичного підсумовування та машинного перекладу в процесі обробки природної мови. Показники порівнюють автоматично створене резюме або переклад із довідковим (створеним людиною) резюме або перекладом або набором посилань.

У наведеному нижче коді ми об’єднуємо прогнозовані та вихідні підсумки, об’єднуючи їх за загальним ключем id і використовуйте це для обчислення балу 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}

Виконуйте пакетний висновок у реальному часі

Далі ми покажемо вам, як запустити пакетний аналіз у реальному часі на кінцевій точці, надавши вхідні дані у вигляді списку. Ми використовуємо той самий ідентифікатор моделі та набір даних, що й раніше, за винятком того, що ми беремо кілька записів із тестового набору даних і використовуємо їх для виклику кінцевої точки в реальному часі.

У наступному коді показано, як створити та розгорнути кінцеву точку реального часу для пакетного висновку в реальному часі:

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
)

Далі ми готуємо наше вхідне корисне навантаження. Для цього ми використовуємо дані, які підготували раніше, витягуємо перші 10 тестових вхідних даних і додаємо текстові вхідні дані з гіперпараметрами, які ми хочемо використовувати. Ми надаємо це корисне навантаження в режимі реального часу invoke_endpoint. Потім корисне навантаження відповіді повертається як список відповідей. Перегляньте наступний код:

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

Прибирати

Після перевірки кінцевої точки переконайтеся, що ви видалили кінцеву точку висновку SageMaker і видаліть модель, щоб уникнути стягнення плати.

Висновок

У цьому блокноті ми виконали пакетне перетворення, щоб продемонструвати модель Hugging Face Text2Text Generator для завдань узагальнення. Пакетне перетворення є вигідним для отримання висновків із великих наборів даних без потреби в постійній кінцевій точці. Ми пов’язали вхідні записи з висновками, щоб допомогти в інтерпретації результатів. Ми використали оцінку ROUGE, щоб порівняти узагальнення тестових даних із узагальненням, створеним моделлю.

Крім того, ми продемонстрували пакетний аналіз у реальному часі, коли ви можете надсилати невеликий пакет даних до кінцевої точки в реальному часі, щоб досягти балансу між затримкою та пропускною здатністю для таких сценаріїв, як потокове передавання вхідних даних. Пакетний аналіз у реальному часі допомагає збільшити пропускну здатність для запитів у реальному часі.

Спробуйте пакетне перетворення за допомогою моделей Text2Text Generation у SageMaker сьогодні та повідомте нам свої відгуки!


Про авторів

Perform batch transforms with Amazon SageMaker Jumpstart Text2Text Generation large language models | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Гемант Сінгх є інженером машинного навчання з досвідом роботи з Amazon SageMaker JumpStart і вбудованими алгоритмами Amazon SageMaker. Він отримав ступінь магістра в Інституті математичних наук ім. Куранта та ступінь бакалавра технічних наук в IIT Делі. Він має досвід роботи над різноманітними проблемами машинного навчання в області обробки природної мови, комп’ютерного зору та аналізу часових рядів.

Perform batch transforms with Amazon SageMaker Jumpstart Text2Text Generation large language models | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Рачна Чадха є головним архітектором рішень AI/ML у Strategic Accounts в AWS. Рахна — оптиміст, який вірить, що етичне та відповідальне використання ШІ може покращити суспільство в майбутньому та принести економічне та соціальне процвітання. У вільний час Рачна любить проводити час з сім'єю, гуляти в походах і слухати музику.

Perform batch transforms with Amazon SageMaker Jumpstart Text2Text Generation large language models | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Доктор Ашиш Хетан є старшим прикладним науковим співробітником із вбудованими алгоритмами Amazon SageMaker і допомагає розробляти алгоритми машинного навчання. Він отримав ступінь доктора філософії в Іллінойському університеті Урбана-Шампейн. Він активно досліджує машинне навчання та статистичні висновки та опублікував багато статей на конференціях NeurIPS, ICML, ICLR, JMLR, ACL та EMNLP.

Часова мітка:

Більше від AWS Машинне навчання