Thực hiện chuyển đổi hàng loạt với các mô hình ngôn ngữ lớn Khởi động Text2Text của Amazon SageMaker | Dịch vụ web của Amazon

Thực hiện chuyển đổi hàng loạt với các mô hình ngôn ngữ lớn Khởi động Text2Text của Amazon SageMaker | Dịch vụ web của Amazon

Hôm nay chúng tôi rất vui mừng thông báo rằng giờ đây bạn có thể thực hiện chuyển đổi hàng loạt với Khởi động Amazon SageMaker mô hình ngôn ngữ lớn (LLM) cho Text2Text Generation. Biến đổi hàng loạt rất hữu ích trong các tình huống mà phản hồi không cần phải theo thời gian thực và do đó bạn có thể thực hiện suy luận hàng loạt cho các tập dữ liệu lớn với số lượng lớn. Đối với chuyển đổi hàng loạt, một tác vụ hàng loạt được chạy, lấy đầu vào hàng loạt làm tập dữ liệu và mô hình được đào tạo trước, đồng thời đưa ra dự đoán cho từng điểm dữ liệu trong tập dữ liệu. Chuyển đổi hàng loạt tiết kiệm chi phí vì không giống như các điểm cuối được lưu trữ theo thời gian thực có phần cứng ổn định, các cụm chuyển đổi hàng loạt bị phá bỏ khi công việc hoàn tất và do đó, phần cứng chỉ được sử dụng trong suốt thời gian của công việc hàng loạt.

Trong một số trường hợp sử dụng, các yêu cầu suy luận thời gian thực có thể được nhóm thành các lô nhỏ để xử lý hàng loạt nhằm tạo phản hồi theo thời gian thực hoặc gần thời gian thực. Ví dụ: nếu bạn cần xử lý một luồng dữ liệu liên tục với độ trễ thấp và thông lượng cao, thì việc gọi riêng một điểm cuối thời gian thực cho từng yêu cầu sẽ yêu cầu nhiều tài nguyên hơn và có thể mất nhiều thời gian hơn để xử lý tất cả các yêu cầu vì quá trình xử lý đang được thực hiện theo trình tự . Cách tiếp cận tốt hơn là nhóm một số yêu cầu và gọi điểm cuối thời gian thực ở chế độ suy luận hàng loạt, xử lý các yêu cầu của bạn trong một lần chuyển tiếp của mô hình và trả về phản hồi hàng loạt cho yêu cầu trong thời gian thực hoặc thời gian gần như thực . Độ trễ của phản hồi sẽ phụ thuộc vào số lượng yêu cầu bạn nhóm lại với nhau và kích thước bộ nhớ phiên bản, do đó, bạn có thể điều chỉnh kích thước lô theo yêu cầu kinh doanh của mình về độ trễ và thông lượng. chúng tôi gọi đây là suy luận hàng loạt thời gian thực bởi vì nó kết hợp khái niệm theo đợt trong khi vẫn cung cấp phản hồi theo thời gian thực. Với suy luận lô thời gian thực, bạn có thể đạt được sự cân bằng giữa độ trễ thấp và thông lượng cao, cho phép bạn xử lý khối lượng dữ liệu lớn một cách kịp thời và hiệu quả.

Biến đổi lô khởi động cho các mô hình Tạo Text2Text cho phép bạn chuyển các siêu tham số lô thông qua các biến môi trường giúp tăng thêm thông lượng và giảm thiểu độ trễ.

JumpStart cung cấp các mô hình nguồn mở, được đào tạo trước cho nhiều loại vấn đề khác nhau để giúp bạn bắt đầu với máy học (ML). Bạn có thể dần dần đào tạo và điều chỉnh các mô hình này trước khi triển khai. JumpStart cũng cung cấp các mẫu giải pháp thiết lập cơ sở hạ tầng cho các trường hợp sử dụng phổ biến và sổ ghi chép ví dụ thực thi cho ML với Amazon SageMaker. Bạn có thể truy cập các mô hình, mẫu giải pháp và ví dụ được đào tạo trước thông qua trang đích JumpStart trong Xưởng sản xuất Amazon SageMaker. Bạn cũng có thể truy cập các mô hình JumpStart bằng SageMaker Python SDK.

Trong bài đăng này, chúng tôi trình bày cách sử dụng công cụ được đào tạo trước tiên tiến nhất text2text mô hình FLAN T5 từ Hugging Face để chuyển đổi hàng loạt và suy luận hàng loạt theo thời gian thực.

Tổng quan về giải pháp

Sổ ghi chép đang hiển thị biến đổi hàng loạt của các mẫu Text2Text FLAN T5 được đào tạo trước từ Ôm mặt có sẵn sau đây Kho GitHub. Sổ tay này sử dụng dữ liệu từ Mặt ôm cnn_dailymail tập dữ liệu cho tác vụ tóm tắt văn bản bằng SDK SageMaker.

Sau đây là các bước chính để triển khai biến đổi hàng loạt và suy luận hàng loạt theo thời gian thực:

  1. Thiết lập điều kiện tiên quyết.
  2. Chọn một mô hình được đào tạo trước.
  3. Lấy hiện vật cho mô hình.
  4. Chỉ định siêu tham số công việc biến đổi hàng loạt.
  5. Chuẩn bị dữ liệu cho chuyển đổi hàng loạt.
  6. Chạy công việc chuyển đổi hàng loạt.
  7. Đánh giá tổng kết bằng cách sử dụng một ĐỎ (Recall-Oriented Understudy for Gisting Assessment) điểm số.
  8. Thực hiện suy luận hàng loạt thời gian thực.

Thiết lập điều kiện tiên quyết

Trước khi chạy sổ ghi chép, bạn phải hoàn thành một số bước thiết lập ban đầu. Hãy thiết lập vai trò thực thi SageMaker để vai trò này có quyền thay mặt bạn chạy các dịch vụ AWS:

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

Chọn một mô hình được đào tạo trước

Chúng tôi sử dụng mô hình hugface-text2text-flan-t5-large làm mô hình mặc định. Theo tùy chọn, bạn có thể truy xuất danh sách các mô hình Text2Text có sẵn trên JumpStart và chọn mô hình ưa thích của mình. Phương pháp này cung cấp một cách đơn giản để chọn các ID kiểu máy khác nhau bằng cùng một sổ ghi chép. Đối với mục đích trình diễn, chúng tôi sử dụng mô hình hugface-text2text-flan-t5-large:

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

Truy xuất các hiện vật cho mô hình

Với SageMaker, chúng tôi có thể thực hiện suy luận trên mô hình được đào tạo trước, ngay cả khi không tinh chỉnh mô hình đó trước trên tập dữ liệu mới. Chúng tôi bắt đầu bằng cách truy xuất deploy_image_uri, deploy_source_urimodel_uri cho mô hình được đào tạo trước:

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)

Chỉ định siêu tham số công việc biến đổi hàng loạt

Bạn có thể chuyển bất kỳ tập hợp con siêu tham số nào dưới dạng biến môi trường cho tác vụ chuyển đổi hàng loạt. Bạn cũng có thể chuyển các siêu tham số này trong tải trọng JSON. Tuy nhiên, nếu bạn đang đặt các biến môi trường cho siêu tham số như đoạn mã sau hiển thị, thì các siêu tham số nâng cao từ các ví dụ riêng lẻ trong tải trọng dòng JSON sẽ không được sử dụng. Nếu bạn muốn sử dụng siêu tham số từ tải trọng, bạn có thể muốn đặt hyper_params_dict tham số là null thay thế.

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

Chuẩn bị dữ liệu cho chuyển đổi hàng loạt

Bây giờ chúng tôi đã sẵn sàng để tải cnn_dailymail tập dữ liệu từ Hugging Face:

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

Chúng tôi đi qua từng mục nhập dữ liệu và tạo dữ liệu đầu vào ở định dạng được yêu cầu. chúng tôi tạo ra một articles.jsonl tệp dưới dạng tệp dữ liệu thử nghiệm chứa các bài báo cần được tóm tắt dưới dạng tải trọng đầu vào. Khi chúng tôi tạo tệp này, chúng tôi sẽ thêm lời nhắc "Briefly summarize this text:" cho mỗi hàng đầu vào thử nghiệm. Nếu bạn muốn có các siêu đường kính khác nhau cho mỗi đầu vào thử nghiệm, bạn có thể nối thêm các siêu đường kính đó như một phần của việc tạo tập dữ liệu.

Chúng tôi tạo ra highlights.jsonl dưới dạng tệp sự thật cơ bản chứa các điểm nổi bật của từng bài viết được lưu trữ trong tệp thử nghiệm articles.jsonl. Chúng tôi lưu trữ cả hai tệp thử nghiệm trong một Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) xô. Xem đoạn mã sau:

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

Chạy công việc chuyển đổi hàng loạt

Khi bạn bắt đầu một tác vụ chuyển đổi hàng loạt, SageMaker sẽ khởi chạy các tài nguyên điện toán cần thiết để xử lý dữ liệu, bao gồm các phiên bản CPU hoặc GPU tùy thuộc vào loại phiên bản đã chọn. Trong tác vụ chuyển đổi hàng loạt, SageMaker tự động cung cấp và quản lý các tài nguyên điện toán cần thiết để xử lý dữ liệu, bao gồm các phiên bản, bộ nhớ và tài nguyên mạng. Khi công việc chuyển đổi hàng loạt hoàn tất, tài nguyên điện toán sẽ tự động được dọn sạch bởi SageMaker. Điều này có nghĩa là các phiên bản và dung lượng lưu trữ được sử dụng trong khi thực hiện tác vụ sẽ bị dừng và xóa, giúp giải phóng tài nguyên và giảm thiểu chi phí. Xem đoạn mã sau:

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

Sau đây là một bản ghi ví dụ từ articles.jsonl tập tin thử nghiệm. Lưu ý rằng bản ghi trong tệp này có ID phù hợp với predict.jsonl bản ghi tệp hiển thị bản ghi tóm tắt dưới dạng đầu ra từ mô hình Text2Text ôm mặt. Tương tự, tệp sự thật cơ bản cũng có ID phù hợp cho bản ghi dữ liệu. ID phù hợp trên tệp thử nghiệm, tệp sự thật cơ sở và tệp đầu ra cho phép liên kết các bản ghi đầu vào với các bản ghi đầu ra để dễ dàng giải thích kết quả.

Sau đây là ví dụ về bản ghi đầu vào được cung cấp để tóm tắt:

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

Sau đây là đầu ra dự đoán với tóm tắt:

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

Sau đây là tóm tắt sự thật cơ bản cho mục đích đánh giá mô hình:

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

Tiếp theo, chúng tôi sử dụng sự thật cơ bản và đầu ra dự đoán để đánh giá mô hình.

Đánh giá mô hình bằng điểm số ROUGE¶

ĐỎ, hay Nghiên cứu định hướng thu hồi để đánh giá Gisting, là một bộ số liệu và gói phần mềm được sử dụng để đánh giá tóm tắt tự động và dịch máy trong xử lý ngôn ngữ tự nhiên. Các số liệu so sánh bản tóm tắt hoặc bản dịch được tạo tự động với bản tóm tắt hoặc bản dịch tham chiếu (do con người tạo ra) hoặc một bộ tài liệu tham khảo.

Trong đoạn mã sau, chúng tôi kết hợp các bản tóm tắt được dự đoán và bản gốc bằng cách nối chúng trên khóa chung id và sử dụng điều này để tính điểm 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}

Thực hiện suy luận hàng loạt thời gian thực

Tiếp theo, chúng tôi chỉ cho bạn cách chạy suy luận hàng loạt thời gian thực trên điểm cuối bằng cách cung cấp đầu vào dưới dạng danh sách. Chúng tôi sử dụng cùng một ID mô hình và tập dữ liệu như trước đó, ngoại trừ việc chúng tôi lấy một vài bản ghi từ tập dữ liệu thử nghiệm và sử dụng chúng để gọi một điểm cuối thời gian thực.

Đoạn mã sau cho biết cách tạo và triển khai điểm cuối thời gian thực cho suy luận lô thời gian thực:

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
)

Tiếp theo, chúng tôi chuẩn bị tải trọng đầu vào của mình. Đối với điều này, chúng tôi sử dụng dữ liệu mà chúng tôi đã chuẩn bị trước đó và trích xuất 10 đầu vào kiểm tra đầu tiên và nối các đầu vào văn bản với siêu tham số mà chúng tôi muốn sử dụng. Chúng tôi cung cấp tải trọng này cho thời gian thực invoke_endpoint. Tải trọng phản hồi sau đó được trả về dưới dạng danh sách các phản hồi. Xem đoạn mã sau:

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

Làm sạch

Sau khi bạn đã kiểm tra điểm cuối, hãy nhớ xóa điểm cuối suy luận SageMaker và xóa mô hình để tránh phát sinh phí.

Kết luận

Trong sổ ghi chép này, chúng tôi đã thực hiện chuyển đổi hàng loạt để hiển thị mô hình Trình tạo văn bản Text2 ôm mặt cho các tác vụ tóm tắt. Biến đổi hàng loạt thuận lợi trong việc thu được kết luận từ các bộ dữ liệu lớn mà không yêu cầu điểm cuối liên tục. Chúng tôi đã liên kết các bản ghi đầu vào với các suy luận để hỗ trợ diễn giải kết quả. Chúng tôi đã sử dụng điểm ROUGE để so sánh tóm tắt dữ liệu thử nghiệm với tóm tắt do mô hình tạo.

Ngoài ra, chúng tôi đã trình diễn suy luận lô theo thời gian thực, trong đó bạn có thể gửi một lô dữ liệu nhỏ đến điểm cuối thời gian thực để đạt được sự cân bằng giữa độ trễ và thông lượng cho các tình huống như truyền dữ liệu đầu vào. Suy luận hàng loạt thời gian thực giúp tăng thông lượng cho các yêu cầu thời gian thực.

Hãy thử chuyển đổi hàng loạt với các mô hình Tạo Text2Text trong SageMaker ngay hôm nay và cho chúng tôi biết phản hồi của bạn!


Giới thiệu về tác giả

Thực hiện chuyển đổi hàng loạt với các mô hình ngôn ngữ lớn Amazon SageMaker Jumpstart Text2Text Generation | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Hemant Singh là Kỹ sư máy học có kinh nghiệm về Amazon SageMaker JumpStart và thuật toán tích hợp sẵn Amazon SageMaker. Anh ấy lấy bằng thạc sĩ tại Viện Khoa học Toán học Courant và B.Tech từ IIT Delhi. Anh ấy có kinh nghiệm làm việc với nhiều vấn đề về học máy khác nhau trong lĩnh vực xử lý ngôn ngữ tự nhiên, thị giác máy tính và phân tích chuỗi thời gian.

Thực hiện chuyển đổi hàng loạt với các mô hình ngôn ngữ lớn Amazon SageMaker Jumpstart Text2Text Generation | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.rachna chadha là Kiến trúc sư giải pháp chính AI/ML trong Tài khoản chiến lược tại AWS. Rachna là một người lạc quan tin rằng việc sử dụng AI có đạo đức và có trách nhiệm có thể cải thiện xã hội trong tương lai và mang lại sự thịnh vượng về kinh tế và xã hội. Khi rảnh rỗi, Rachna thích dành thời gian cho gia đình, đi bộ đường dài và nghe nhạc.

Thực hiện chuyển đổi hàng loạt với các mô hình ngôn ngữ lớn Amazon SageMaker Jumpstart Text2Text Generation | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Tiến sĩ Ashish Khetan là Nhà khoa học ứng dụng cấp cao với các thuật toán tích hợp Amazon SageMaker và giúp phát triển các thuật toán máy học. Ông lấy bằng Tiến sĩ tại Đại học Illinois Urbana-Champaign. Ông là một nhà nghiên cứu tích cực về học máy và suy luận thống kê, đồng thời đã xuất bản nhiều bài báo tại các hội nghị NeurIPS, ICML, ICLR, JMLR, ACL và EMNLP.

Dấu thời gian:

Thêm từ Học máy AWS