Lakukan transformasi batch dengan model bahasa besar Amazon SageMaker Jumpstart Text2Text Generation | Layanan Web Amazon

Lakukan transformasi batch dengan model bahasa besar Amazon SageMaker Jumpstart Text2Text Generation | Layanan Web Amazon

Hari ini kami dengan senang hati mengumumkan bahwa Anda sekarang dapat melakukan transformasi batch dengan Mulai Lompatan Amazon SageMaker model bahasa besar (LLM) untuk Text2Text Generation. Transformasi batch berguna dalam situasi di mana respons tidak perlu waktu nyata dan oleh karena itu Anda dapat melakukan inferensi secara batch untuk kumpulan data besar secara massal. Untuk transformasi batch, tugas batch dijalankan yang mengambil masukan batch sebagai kumpulan data dan model pra-pelatihan, serta prediksi keluaran untuk setiap titik data dalam kumpulan data. Transformasi batch hemat biaya karena tidak seperti titik akhir yang dihosting secara real-time yang memiliki perangkat keras persisten, cluster transformasi batch dirobohkan saat pekerjaan selesai dan oleh karena itu perangkat keras hanya digunakan selama durasi pekerjaan batch.

Dalam beberapa kasus penggunaan, permintaan inferensi real-time dapat dikelompokkan dalam batch kecil untuk pemrosesan batch guna membuat respons real-time atau hampir real-time. Misalnya, jika Anda perlu memproses aliran data berkelanjutan dengan latensi rendah dan throughput tinggi, meminta titik akhir real-time untuk setiap permintaan secara terpisah akan membutuhkan lebih banyak sumber daya dan dapat memakan waktu lebih lama untuk memproses semua permintaan karena pemrosesan dilakukan secara berurutan. . Pendekatan yang lebih baik adalah mengelompokkan beberapa permintaan dan memanggil titik akhir real-time dalam mode inferensi batch, yang memproses permintaan Anda dalam satu penerusan model dan mengembalikan respons massal untuk permintaan secara real time atau mendekati waktu nyata . Latensi respons akan bergantung pada berapa banyak permintaan yang Anda kelompokkan bersama dan ukuran memori instans, sehingga Anda dapat menyesuaikan ukuran batch sesuai kebutuhan bisnis Anda untuk latensi dan throughput. Kami menyebutnya inferensi batch waktu-nyata karena menggabungkan konsep batching dengan tetap memberikan respon real-time. Dengan inferensi batch waktu nyata, Anda dapat mencapai keseimbangan antara latensi rendah dan throughput tinggi, memungkinkan Anda memproses data dalam jumlah besar secara tepat waktu dan efisien.

Transformasi batch jumpstart untuk model Text2Text Generation memungkinkan Anda melewatkan hyperparameter batch melalui variabel lingkungan yang selanjutnya meningkatkan throughput dan meminimalkan latensi.

JumpStart menyediakan model sumber terbuka yang telah dilatih sebelumnya untuk berbagai jenis masalah guna membantu Anda memulai pembelajaran mesin (ML). Anda dapat melatih dan menyetel model ini secara bertahap sebelum diterapkan. JumpStart juga menyediakan template solusi yang menyiapkan infrastruktur untuk kasus penggunaan umum, dan notebook contoh yang dapat dieksekusi untuk ML dengan Amazon SageMaker. Anda dapat mengakses model terlatih, template solusi, dan contoh melalui halaman arahan JumpStart di Studio Amazon SageMaker. Anda juga dapat mengakses model JumpStart menggunakan SageMaker Python SDK.

Dalam posting ini, kami mendemonstrasikan cara menggunakan pra-terlatih yang canggih model text2text FLAN T5 dari Hugging Face untuk transformasi batch dan inferensi batch real-time.

Ikhtisar solusi

Notebook yang menampilkan transformasi batch model Text2Text FLAN T5 pra-pelatihan dari Wajah Memeluk tersedia berikut ini Repositori GitHub. Notebook ini menggunakan data dari Hugging Face cnn_dailymail dataset untuk tugas peringkasan teks menggunakan SageMaker SDK.

Berikut adalah langkah-langkah kunci untuk mengimplementasikan transformasi batch dan inferensi batch waktu nyata:

  1. Siapkan prasyarat.
  2. Pilih model terlatih.
  3. Ambil artefak untuk model.
  4. Tentukan hyperparameter tugas transformasi batch.
  5. Siapkan data untuk transformasi batch.
  6. Jalankan tugas transformasi batch.
  7. Evaluasi ringkasan menggunakan a RED (Recall-Oriented Understudy for Gisting Evaluation) skor.
  8. Lakukan inferensi batch waktu nyata.

Siapkan prasyarat

Sebelum menjalankan notebook, Anda harus menyelesaikan beberapa langkah penyiapan awal. Mari siapkan peran eksekusi SageMaker agar memiliki izin untuk menjalankan layanan AWS atas nama Anda:

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

Pilih model terlatih

Kami menggunakan model huggingface-text2text-flan-t5-large sebagai model default. Opsional, Anda dapat mengambil daftar model Text2Text yang tersedia di JumpStart dan memilih model pilihan Anda. Metode ini memberikan cara mudah untuk memilih ID model yang berbeda menggunakan notebook yang sama. Untuk tujuan demonstrasi, kami menggunakan model huggingface-text2text-flan-t5-large :

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

Ambil artefak untuk model

Dengan SageMaker, kami dapat melakukan inferensi pada model yang telah dilatih sebelumnya, bahkan tanpa menyempurnakannya terlebih dahulu pada kumpulan data baru. Kita mulai dengan mengambil file deploy_image_uri, deploy_source_uri, dan model_uri untuk model pra-terlatih:

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)

Tentukan hyperparameter tugas transformasi batch

Anda dapat meneruskan subset hyperparameter apa pun sebagai variabel lingkungan ke tugas transformasi batch. Anda juga dapat melewatkan hyperparameter ini dalam payload JSON. Namun, jika Anda menyetel variabel lingkungan untuk hyperparameter seperti yang ditunjukkan kode berikut, maka hyperparameter lanjutan dari contoh individual dalam payload baris JSON tidak akan digunakan. Jika Anda ingin menggunakan hyperparameter dari payload, Anda mungkin ingin mengaturnya hyper_params_dict parameter sebagai null sebagai gantinya.

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

Menyiapkan data untuk transformasi batch

Sekarang kita siap untuk memuat cnn_dailymail dataset dari Hugging Face:

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

Kami memeriksa setiap entri data dan membuat data input dalam format yang diperlukan. Kami membuat sebuah articles.jsonl file sebagai file data uji yang berisi artikel yang perlu dirangkum sebagai muatan input. Saat kami membuat file ini, kami menambahkan prompt "Briefly summarize this text:" untuk setiap baris input tes. Jika Anda ingin memiliki hyperparameter yang berbeda untuk setiap input pengujian, Anda dapat menambahkan hyperparameter tersebut sebagai bagian dari pembuatan dataset.

Kami menciptakan highlights.jsonl sebagai file kebenaran dasar yang berisi sorotan dari setiap artikel yang disimpan dalam file uji articles.jsonl. Kami menyimpan kedua file uji dalam file Layanan Penyimpanan Sederhana Amazon (Amazon S3) ember. Lihat kode berikut:

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

Jalankan tugas transformasi batch

Saat Anda memulai tugas transformasi batch, SageMaker meluncurkan sumber daya komputasi yang diperlukan untuk memproses data, termasuk instans CPU atau GPU bergantung pada jenis instans yang dipilih. Selama tugas transformasi batch, SageMaker secara otomatis menyediakan dan mengelola sumber daya komputasi yang diperlukan untuk memproses data, termasuk instans, penyimpanan, dan sumber daya jaringan. Saat tugas transformasi batch selesai, sumber daya komputasi dibersihkan secara otomatis oleh SageMaker. Ini berarti instans dan penyimpanan yang digunakan selama pekerjaan dihentikan dan dihapus, membebaskan sumber daya, dan meminimalkan biaya. Lihat kode berikut:

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

Berikut ini adalah salah satu contoh rekaman dari articles.jsonl berkas uji. Perhatikan bahwa catatan dalam file ini memiliki ID yang cocok dengan predict.jsonl rekaman file yang menampilkan rekaman ringkasan sebagai output dari model Hugging Face Text2Text. Demikian pula, file ground truth juga memiliki ID yang cocok untuk catatan data. ID yang cocok di seluruh file pengujian, file kebenaran dasar, dan file keluaran memungkinkan menghubungkan catatan masukan dengan catatan keluaran untuk interpretasi hasil yang mudah.

Berikut ini adalah contoh input record yang disediakan untuk summarization:

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

Berikut ini adalah keluaran yang diprediksi dengan peringkasan:

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

Berikut ini adalah ringkasan kebenaran dasar untuk tujuan evaluasi model:

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

Selanjutnya, kami menggunakan kebenaran dasar dan keluaran yang diprediksi untuk evaluasi model.

Evaluasi model menggunakan skor ROUGEยถ

RED, atau Recall-Oriented Understudy for Gisting Evaluation, adalah kumpulan metrik dan paket perangkat lunak yang digunakan untuk mengevaluasi peringkasan otomatis dan terjemahan mesin dalam pemrosesan bahasa alami. Metrik membandingkan ringkasan atau terjemahan yang dihasilkan secara otomatis dengan ringkasan atau terjemahan referensi (buatan manusia) atau sekumpulan referensi.

Dalam kode berikut, kami menggabungkan ringkasan yang diprediksi dan asli dengan menggabungkannya pada kunci umum id dan gunakan ini untuk menghitung skor 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}

Lakukan inferensi batch waktu nyata

Selanjutnya, kami tunjukkan cara menjalankan inferensi batch real-time di titik akhir dengan memberikan input sebagai daftar. Kami menggunakan ID model dan kumpulan data yang sama seperti sebelumnya, kecuali kami mengambil beberapa catatan dari kumpulan data pengujian dan menggunakannya untuk memanggil titik akhir waktu nyata.

Kode berikut menunjukkan cara membuat dan menerapkan titik akhir real-time untuk inferensi batch real-time:

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
)

Selanjutnya, kami menyiapkan payload input kami. Untuk ini, kami menggunakan data yang kami siapkan sebelumnya dan mengekstrak 10 input pengujian pertama dan menambahkan input teks dengan hyperparameter yang ingin kami gunakan. Kami menyediakan payload ini secara real-time invoke_endpoint. Muatan respons kemudian dikembalikan sebagai daftar respons. Lihat kode berikut:

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

Membersihkan

Setelah Anda menguji titik akhir, pastikan Anda menghapus titik akhir inferensi SageMaker dan menghapus model untuk menghindari biaya tambahan.

Kesimpulan

Di notebook ini, kami melakukan transformasi batch untuk menampilkan model Hugging Face Text2Text Generator untuk tugas peringkasan. Transformasi batch menguntungkan dalam memperoleh inferensi dari kumpulan data besar tanpa memerlukan titik akhir yang persisten. Kami menghubungkan catatan input dengan kesimpulan untuk membantu interpretasi hasil. Kami menggunakan skor ROUGE untuk membandingkan peringkasan data uji dengan peringkasan yang dihasilkan model.

Selain itu, kami mendemonstrasikan inferensi batch real-time, di mana Anda dapat mengirim sejumlah kecil data ke titik akhir real-time untuk mencapai keseimbangan antara latensi dan throughput untuk skenario seperti data input streaming. Inferensi batch real-time membantu meningkatkan throughput untuk permintaan real-time.

Cobalah transformasi batch dengan model Text2Text Generation di SageMaker hari ini dan beri tahu kami tanggapan Anda!


Tentang penulis

Lakukan transformasi batch dengan model bahasa besar Amazon SageMaker Jumpstart Text2Text Generation | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Hemant Singh adalah Insinyur Pembelajaran Mesin dengan pengalaman dalam Amazon SageMaker JumpStart dan algoritme bawaan Amazon SageMaker. Dia mendapatkan gelar masternya dari Courant Institute of Mathematical Sciences dan B.Tech dari IIT Delhi. Dia memiliki pengalaman dalam menangani beragam masalah pembelajaran mesin dalam domain pemrosesan bahasa alami, visi komputer, dan analisis deret waktu.

Lakukan transformasi batch dengan model bahasa besar Amazon SageMaker Jumpstart Text2Text Generation | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Rakhna Chadha adalah Arsitek Solusi Utama AI/ML di Akun Strategis di AWS. Rachna adalah seorang optimis yang percaya bahwa penggunaan AI secara etis dan bertanggung jawab dapat meningkatkan masyarakat di masa depan dan membawa kemakmuran ekonomi dan sosial. Di waktu luangnya, Rachna suka menghabiskan waktu bersama keluarganya, mendaki gunung, dan mendengarkan musik.

Lakukan transformasi batch dengan model bahasa besar Amazon SageMaker Jumpstart Text2Text Generation | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Dr Ashish Khetan adalah Ilmuwan Terapan Senior dengan algoritme bawaan Amazon SageMaker dan membantu mengembangkan algoritme pembelajaran mesin. Ia mendapatkan gelar PhD dari University of Illinois Urbana-Champaign. Dia adalah peneliti aktif dalam pembelajaran mesin dan inferensi statistik, dan telah menerbitkan banyak makalah di konferensi NeurIPS, ICML, ICLR, JMLR, ACL, dan EMNLP.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS