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

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

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

В некоторых случаях запросы на логические выводы в реальном времени могут быть сгруппированы в небольшие пакеты для пакетной обработки для создания ответов в реальном или близком к реальному времени. Например, если вам нужно обрабатывать непрерывный поток данных с малой задержкой и высокой пропускной способностью, вызов конечной точки в реальном времени для каждого запроса отдельно потребует больше ресурсов и может занять больше времени для обработки всех запросов, поскольку обработка выполняется последовательно. . Лучшим подходом было бы сгруппировать некоторые запросы и вызвать конечную точку в режиме реального времени в режиме пакетного вывода, который обрабатывает ваши запросы за один прямой проход модели и возвращает массовый ответ на запрос в реальном времени или почти в реальном времени. . Задержка ответа будет зависеть от того, сколько запросов вы группируете вместе, и от размера памяти экземпляра, поэтому вы можете настроить размер пакета в соответствии с вашими бизнес-требованиями к задержке и пропускной способности. Мы называем это пакетный вывод в реальном времени потому что он сочетает в себе концепцию пакетной обработки, но при этом обеспечивает ответы в реальном времени. Благодаря пакетному выводу в реальном времени вы можете достичь баланса между малой задержкой и высокой пропускной способностью, что позволяет обрабатывать большие объемы данных своевременно и эффективно.

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

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

В этом посте мы покажем, как использовать современный предварительно обученный text2text Модели FLAN T5 от Hugging Face для пакетного преобразования и пакетного вывода в реальном времени.

Обзор решения

Блокнот, показывающий пакетное преобразование предварительно обученных моделей Text2Text FLAN T5 из Обнимая лицо в наличии в следующем Репозиторий GitHub. В этом блокноте используются данные Hugging Face. cnn_dailymail набор данных для задачи суммирования текста с помощью SageMaker SDK.

Ниже приведены ключевые шаги для реализации пакетного преобразования и пакетного вывода в реальном времени.

  1. Настройте предварительные условия.
  2. Выберите предварительно обученную модель.
  3. Получить артефакты для модели.
  4. Укажите гиперпараметры задания пакетного преобразования.
  5. Подготовьте данные для пакетного преобразования.
  6. Запустите задание пакетного преобразования.
  7. Оцените обобщение, используя RED (Ориентированный на припоминание дублер для оценки Gisting) оценка.
  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¶

RED, или 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 сегодня и сообщите нам свои отзывы!


Об авторах

Выполнение пакетных преобразований с помощью больших языковых моделей Amazon SageMaker Jumpstart Text2Text Generation | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Хемант Сингх — инженер по машинному обучению с опытом работы со встроенными алгоритмами Amazon SageMaker JumpStart и Amazon SageMaker. Он получил степень магистра в Институте математических наук Куранта и степень бакалавра технических наук в ИИТ Дели. У него есть опыт работы над широким спектром задач машинного обучения в области обработки естественного языка, компьютерного зрения и анализа временных рядов.

Выполнение пакетных преобразований с помощью больших языковых моделей Amazon SageMaker Jumpstart Text2Text Generation | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Рахна Чадха является главным архитектором решений AI/ML в области стратегических счетов в AWS. Рахна — оптимистка, считающая, что этичное и ответственное использование ИИ может улучшить общество в будущем и принести экономическое и социальное процветание. В свободное время Рахна любит проводить время со своей семьей, ходить в походы и слушать музыку.

Выполнение пакетных преобразований с помощью больших языковых моделей Amazon SageMaker Jumpstart Text2Text Generation | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Доктор Ашиш Хетан — старший научный сотрудник, работающий со встроенными алгоритмами Amazon SageMaker и помогающий разрабатывать алгоритмы машинного обучения. Он получил докторскую степень в Университете Иллинойса в Урбана-Шампейн. Он является активным исследователем в области машинного обучения и статистических выводов и опубликовал множество статей на конференциях NeurIPS, ICML, ICLR, JMLR, ACL и EMNLP.

Отметка времени:

Больше от Машинное обучение AWS