Amazon SageMaker Jumpstart Text2Text Generation büyük dil modelleri ile toplu dönüşümler gerçekleştirin | Amazon Web Hizmetleri

Amazon SageMaker Jumpstart Text2Text Generation büyük dil modelleri ile toplu dönüşümler gerçekleştirin | Amazon Web Hizmetleri

Bugün, artık toplu dönüşümleri gerçekleştirebileceğinizi duyurmanın heyecanını yaşıyoruz. Amazon SageMaker Hızlı Başlangıç Text2Text Üretimi için büyük dil modelleri (LLM'ler). Toplu dönüşümler, yanıtların gerçek zamanlı olması gerekmediği durumlarda kullanışlıdır ve bu nedenle toplu olarak büyük veri kümeleri için toplu olarak çıkarım yapabilirsiniz. Toplu dönüştürme için, toplu girişi bir veri kümesi ve önceden eğitilmiş bir model olarak alan ve veri kümesindeki her veri noktası için tahminler çıkaran bir toplu iş çalıştırılır. Kalıcı donanıma sahip gerçek zamanlı barındırılan uç noktaların aksine, toplu dönüştürme kümeleri iş tamamlandığında parçalandığından ve bu nedenle donanım yalnızca toplu iş süresince kullanıldığından, toplu dönüştürme uygun maliyetlidir.

Bazı kullanım durumlarında, gerçek zamanlı veya gerçek zamana yakın yanıtlar oluşturmak üzere toplu işleme için gerçek zamanlı çıkarım istekleri küçük gruplar halinde gruplandırılabilir. Örneğin, düşük gecikme süresi ve yüksek aktarım hızı ile sürekli bir veri akışını işlemeniz gerekiyorsa, her istek için ayrı ayrı gerçek zamanlı bir uç nokta çağırmak daha fazla kaynak gerektirir ve işleme seri olarak yapıldığından tüm istekleri işlemek daha uzun sürebilir. . Daha iyi bir yaklaşım, isteklerin bazılarını gruplamak ve isteklerinizi modelin bir ileri geçişinde işleyen ve istek için toplu yanıtı gerçek zamanlı veya neredeyse gerçek zamanlı olarak döndüren toplu çıkarım modunda gerçek zamanlı uç noktayı çağırmak olacaktır. . Yanıt gecikmesi, kaç isteği birlikte gruplandırdığınıza ve örnek bellek boyutuna bağlı olacaktır, bu nedenle gecikme ve aktarım hızı için iş gereksinimlerinize göre parti boyutunu ayarlayabilirsiniz. biz buna diyoruz gerçek zamanlı toplu çıkarım çünkü hala gerçek zamanlı yanıtlar sağlarken gruplama kavramını birleştiriyor. Gerçek zamanlı toplu çıkarımla, düşük gecikme süresi ile yüksek verim arasında bir denge kurarak büyük hacimli verileri zamanında ve verimli bir şekilde işlemenizi sağlar.

Text2Text Generation modelleri için hızlı başlangıç ​​toplu dönüşümü, iş hacmini daha da artıran ve gecikmeyi en aza indiren ortam değişkenleri aracılığıyla toplu hiperparametreleri geçirmenize olanak tanır.

JumpStart, makine öğrenimine (ML) başlamanıza yardımcı olmak için çok çeşitli sorun türleri için önceden eğitilmiş, açık kaynaklı modeller sağlar. Dağıtımdan önce bu modelleri kademeli olarak eğitebilir ve ayarlayabilirsiniz. JumpStart ayrıca yaygın kullanım durumları için altyapıyı kuran çözüm şablonları ve makine öğrenimi için yürütülebilir örnek not defterleri sağlar. Amazon Adaçayı Yapıcı. Önceden eğitilmiş modellere, çözüm şablonlarına ve örneklere JumpStart giriş sayfasından erişebilirsiniz. Amazon SageMaker Stüdyosu. SageMaker Python SDK'yı kullanarak JumpStart modellerine de erişebilirsiniz.

Bu gönderide, son teknoloji önceden eğitilmiş cihazların nasıl kullanılacağını gösteriyoruz. text2text FLAN T5 modelleri Toplu dönüşüm ve gerçek zamanlı toplu çıkarım için Hugging Face'ten.

Çözüme genel bakış

Önceden eğitilmiş Text2Text FLAN T5 modellerinin toplu dönüşümünü gösteren not defteri Sarılma Yüz aşağıda mevcut GitHub deposu. Bu not defteri Hugging Face'ten alınan verileri kullanır cnn_dailymail SageMaker SDK kullanan bir metin özetleme görevi için veri kümesi.

Toplu dönüştürme ve gerçek zamanlı toplu çıkarım uygulamak için temel adımlar şunlardır:

  1. Önkoşulları ayarlayın.
  2. Önceden eğitilmiş bir model seçin.
  3. Model için yapıları alın.
  4. Toplu dönüştürme işi hiperparametrelerini belirtin.
  5. Toplu dönüştürme için verileri hazırlayın.
  6. Toplu dönüştürme işini çalıştırın.
  7. Özetlemeyi bir kullanarak değerlendirin ROUGE (Gisting Değerlendirmesi için Geri Çağırma Odaklı Yardımcı Çalışma) puanı.
  8. Gerçek zamanlı toplu çıkarım gerçekleştirin.

önkoşulları ayarla

Dizüstü bilgisayarı çalıştırmadan önce bazı ilk kurulum adımlarını tamamlamanız gerekir. AWS hizmetlerini sizin adınıza çalıştırma izinlerine sahip olması için SageMaker yürütme rolünü ayarlayalım:

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

Önceden eğitilmiş bir model seçin

Varsayılan model olarak huggingface-text2text-flan-t5-large modelini kullanıyoruz. İsteğe bağlı olarak, JumpStart'ta mevcut Text2Text modellerinin listesini alabilir ve tercih ettiğiniz modeli seçebilirsiniz. Bu yöntem, aynı not defterini kullanarak farklı model kimliklerini seçmenin basit bir yolunu sağlar. Gösterim amacıyla huggingface-text2text-flan-t5-large modelini kullanıyoruz:

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

Model için yapıtları alma

SageMaker ile önceden eğitilmiş model üzerinde, önce yeni bir veri kümesinde ince ayar yapmadan bile çıkarım yapabiliriz. almakla başlıyoruz deploy_image_uri, deploy_source_uri, ve model_uri önceden eğitilmiş model için:

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)

Toplu dönüştürme işi hiperparametrelerini belirtin

Toplu dönüştürme işine ortam değişkenleri olarak hiperparametrelerin herhangi bir alt kümesini iletebilirsiniz. Bu hiperparametreleri bir JSON yükünde de iletebilirsiniz. Ancak, aşağıdaki kodun gösterdiği gibi hiperparametreler için ortam değişkenleri ayarlıyorsanız, JSON satırları yükündeki bireysel örneklerden gelişmiş hiperparametreler kullanılmaz. Yükten hiperparametreler kullanmak istiyorsanız, hyper_params_dict bunun yerine null olarak parametre.

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

Verileri toplu dönüştürme için hazırlama

Şimdi yüklemeye hazırız cnn_dailymail Hugging Face'ten veri kümesi:

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

Her bir veri girişinin üzerinden geçiyoruz ve gerekli formatta girdi verilerini oluşturuyoruz. biz bir yaratırız articles.jsonl girdi yükü olarak özetlenmesi gereken makaleleri içeren bir test veri dosyası olarak dosyalayın. Bu dosyayı oluştururken, istemi ekliyoruz "Briefly summarize this text:" her test giriş satırına. Her test girişi için farklı hiperparametrelere sahip olmak istiyorsanız, bu hiperparametreleri veri kümesini oluşturmanın bir parçası olarak ekleyebilirsiniz.

Biz yaratırız highlights.jsonl test dosyasında saklanan her bir makalenin önemli noktalarını içeren temel gerçek dosyası olarak articles.jsonl. Her iki test dosyasını da bir Amazon Basit Depolama Hizmeti (Amazon S3) paketi. Aşağıdaki koda bakın:

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

Toplu dönüştürme işini çalıştırın

Bir toplu dönüştürme işini başlattığınızda, SageMaker, seçilen örnek türüne bağlı olarak CPU veya GPU örnekleri de dahil olmak üzere, verileri işlemek için gerekli bilgi işlem kaynaklarını başlatır. Toplu dönüştürme işi sırasında SageMaker, bulut sunucuları, depolama ve ağ kaynakları dahil olmak üzere verileri işlemek için gereken bilgi işlem kaynaklarını otomatik olarak sağlar ve yönetir. Toplu dönüştürme işi tamamlandığında, bilgi işlem kaynakları SageMaker tarafından otomatik olarak temizlenir. Bu, iş sırasında kullanılan bulut sunucularının ve depolamanın durdurulup kaldırıldığı, böylece kaynakların serbest bırakıldığı ve maliyetin en aza indirildiği anlamına gelir. Aşağıdaki koda bakın:

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

Aşağıda örnek bir kayıt yer almaktadır. articles.jsonl deneme dosyası Bu dosyadaki kaydın, eşleşen bir kimliğe sahip olduğunu unutmayın. predict.jsonl Hugging Face Text2Text modelinden çıktı olarak özetlenmiş bir kaydı gösteren dosya kayıtları. Benzer şekilde, temel gerçek dosyası da veri kaydı için eşleşen bir kimliğe sahiptir. Test dosyası, temel gerçek dosyası ve çıktı dosyasındaki eşleşen kimlik, sonuçların kolay yorumlanması için girdi kayıtlarının çıktı kayıtlarıyla ilişkilendirilmesine olanak tanır.

Özetleme için sağlanan örnek giriş kaydı aşağıdadır:

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

Özetleme ile birlikte tahmin edilen çıktı aşağıdadır:

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

Model değerlendirme amaçları için temel gerçeği özetleme aşağıdadır:

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

Ardından, model değerlendirmesi için temel gerçeği ve tahmin edilen çıktıları kullanırız.

Modeli bir ROUGE puanı kullanarak değerlendirin¶

ROUGEveya Recall-Oriented Understudy for Gisting Evaluation, doğal dil işlemede otomatik özetleme ve makine çevirisini değerlendirmek için kullanılan bir metrik seti ve bir yazılım paketidir. Metrikler, otomatik olarak üretilen bir özeti veya çeviriyi bir referans (insan tarafından üretilen) özet veya çeviri veya bir dizi referansla karşılaştırır.

Aşağıdaki kodda, tahmin edilen ve orijinal özetleri ortak anahtar üzerinde birleştirerek birleştiririz. id ve bunu ROUGE puanını hesaplamak için kullanın:

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

Gerçek zamanlı toplu çıkarım gerçekleştirin

Ardından, girişleri bir liste olarak sağlayarak uç noktada gerçek zamanlı toplu çıkarımı nasıl çalıştıracağınızı gösteriyoruz. Test veri kümesinden birkaç kayıt alıp bunları gerçek zamanlı bir son noktayı çağırmak için kullanmamız dışında öncekiyle aynı model kimliğini ve veri kümesini kullanıyoruz.

Aşağıdaki kod, gerçek zamanlı toplu çıkarım için gerçek zamanlı bir uç noktanın nasıl oluşturulacağını ve dağıtılacağını gösterir:

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
)

Ardından, girdi yükümüzü hazırlıyoruz. Bunun için daha önce hazırladığımız verileri kullanarak ilk 10 test girişini çıkartıyoruz ve metin girişlerini kullanmak istediğimiz hiperparametrelerle ekliyoruz. Bu yükü gerçek zamanlı olarak sağlıyoruz invoke_endpoint. Yanıt yükü daha sonra bir yanıt listesi olarak döndürülür. Aşağıdaki koda bakın:

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

Temizlemek

Uç noktayı test ettikten sonra, ücret ödememek için SageMaker çıkarım uç noktasını ve modeli sildiğinizden emin olun.

Sonuç

Bu not defterinde, özetleme görevleri için Hugging Face Text2Text Oluşturucu modelini sergilemek üzere bir toplu dönüştürme gerçekleştirdik. Toplu dönüşüm, kalıcı bir uç nokta gerektirmeden büyük veri kümelerinden çıkarımlar elde etmede avantajlıdır. Sonuçların yorumlanmasına yardımcı olmak için girdi kayıtlarını çıkarımlarla ilişkilendirdik. Test verileri özetlemeyi model tarafından oluşturulan özetleme ile karşılaştırmak için ROUGE puanını kullandık.

Ek olarak, akış giriş verileri gibi senaryolar için gecikme ve verimlilik arasında bir denge elde etmek için küçük bir veri grubunu gerçek zamanlı bir uç noktaya gönderebileceğiniz gerçek zamanlı toplu çıkarımı gösterdik. Gerçek zamanlı toplu çıkarım, gerçek zamanlı istekler için verimi artırmaya yardımcı olur.

Bugün SageMaker'da Text2Text Generation modelleriyle toplu dönüştürmeyi deneyin ve görüşlerinizi bize bildirin!


yazarlar hakkında

Amazon SageMaker Jumpstart Text2Text Generation büyük dil modelleriyle toplu dönüşümler gerçekleştirin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Hemant Singh Amazon SageMaker JumpStart ve Amazon SageMaker yerleşik algoritmalarında deneyime sahip bir Makine Öğrenimi Mühendisidir. Master derecelerini Courant Institute of Mathematical Sciences'tan ve B.Tech'ten IIT Delhi'den almıştır. Doğal dil işleme, bilgisayar görüşü ve zaman serisi analizi alanlarında çok çeşitli makine öğrenimi problemleri üzerinde çalışma deneyimine sahiptir.

Amazon SageMaker Jumpstart Text2Text Generation büyük dil modelleriyle toplu dönüşümler gerçekleştirin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Rahna Çadha AWS'de Stratejik Hesaplarda Yapay Zeka/ML'nin Baş Çözüm Mimarıdır. Rachna, AI'nın etik ve sorumlu kullanımının gelecekte toplumu iyileştirebileceğine ve ekonomik ve sosyal refah getirebileceğine inanan bir iyimser. Rachna boş zamanlarında ailesiyle vakit geçirmeyi, yürüyüş yapmayı ve müzik dinlemeyi seviyor.

Amazon SageMaker Jumpstart Text2Text Generation büyük dil modelleriyle toplu dönüşümler gerçekleştirin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Ashish Khetan Amazon SageMaker yerleşik algoritmalarına sahip Kıdemli Uygulamalı Bilim Adamıdır ve makine öğrenimi algoritmalarının geliştirilmesine yardımcı olur. Doktora derecesini University of Illinois Urbana-Champaign'den almıştır. Makine öğrenimi ve istatistiksel çıkarım alanlarında aktif bir araştırmacıdır ve NeurIPS, ICML, ICLR, JMLR, ACL ve EMNLP konferanslarında birçok makale yayınlamıştır.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi