آپ کی اپنی اسکرپٹ لانے والے Hugging Face Amazon SageMaker کنٹینرز کا استعمال کرتے ہوئے ایک سمریائزر ماڈل کو ٹھیک کریں اور تعینات کریں۔

NLP ڈومین میں بہت سی حالیہ پیشرفت ہوئی ہے۔ پہلے سے تربیت یافتہ ماڈلز اور مکمل طور پر منظم NLP سروسز نے NLP تک رسائی اور اسے اپنانے کو جمہوری بنایا ہے۔ ایمیزون کی تعریف ایک مکمل طور پر منظم سروس ہے جو NLP کے کاموں کو انجام دے سکتی ہے جیسے کسٹم ہستی کی شناخت، موضوع کی ماڈلنگ، جذبات کا تجزیہ اور مزید کسی بھی ML تجربے کی ضرورت کے بغیر ڈیٹا سے بصیرت نکالنے کے لیے۔

پچھلے سال AWS نے اعلان کیا کہ a شراکت داری ساتھ گلے لگانے والا چہرہ قدرتی لینگویج پروسیسنگ (NLP) ماڈلز کو تیزی سے پیداوار میں لانے میں مدد کرنے کے لیے۔ Hugging Face ایک اوپن سورس AI کمیونٹی ہے، جو NLP پر مرکوز ہے۔ ان کی ازگر پر مبنی لائبریری (ٹرانسفارمرز) BERT، RoBERta، اور GPT جیسے مقبول جدید ترین ٹرانسفارمر فن تعمیر کو آسانی سے استعمال کرنے کے لیے ٹولز فراہم کرتا ہے۔ آپ ان ماڈلز کو مختلف قسم کے NLP کاموں پر لاگو کر سکتے ہیں، جیسے کہ متن کی درجہ بندی، معلومات کا اخراج، اور سوالوں کے جوابات۔ دوسروں کے.

ایمیزون سیج میکر ایک مکمل طور پر منظم سروس ہے جو ڈویلپرز اور ڈیٹا سائنسدانوں کو مشین لرننگ (ML) ماڈلز کو تیزی سے بنانے، تربیت دینے اور ان کو تعینات کرنے کی صلاحیت فراہم کرتی ہے۔ SageMaker ML عمل کے ہر مرحلے سے بھاری لفٹنگ کو ہٹاتا ہے، جس سے اعلیٰ معیار کے ماڈل تیار کرنا آسان ہو جاتا ہے۔ SageMaker Python SDK کئی مختلف ML اور ڈیپ لرننگ فریم ورک کا استعمال کرتے ہوئے SageMaker پر ماڈلز کو تربیت دینے اور تعینات کرنے کے لیے اوپن سورس APIs اور کنٹینرز فراہم کرتا ہے۔

SageMaker کے ساتھ Hugging Face کا انضمام آپ کو اپنے ڈومین کے مخصوص استعمال کے کیسز پر بڑے پیمانے پر Hugging Face ماڈل بنانے کی اجازت دیتا ہے۔

اس پوسٹ میں، ہم آپ کو سیج میکر پر کسٹم ہگنگ فیس ٹیکسٹ سمریزر بنانے اور اس کی تعیناتی کی ایک مثال سے آگاہ کرتے ہیں۔ ہم اس مقصد کے لیے پیگاسس [1] کا استعمال کرتے ہیں، پہلا ٹرانسفارمر پر مبنی ماڈل خاص طور پر تجریدی متن کے خلاصے کے لیے تیار کردہ مقصد پر پہلے سے تربیت یافتہ ہے۔ BERT ایک جملے میں بے ترتیب الفاظ کو چھپانے کے بارے میں پہلے سے تربیت یافتہ ہے۔ اس کے برعکس، Pegasus کی پری ٹریننگ کے دوران، جملے ایک ان پٹ دستاویز سے چھپے ہوتے ہیں۔ اس کے بعد ماڈل تمام غیر نقاب شدہ جملوں کو سیاق و سباق کے طور پر استعمال کرتے ہوئے ایک واحد آؤٹ پٹ ترتیب کے طور پر غائب جملوں کو تخلیق کرتا ہے، جس کے نتیجے میں دستاویز کا ایک ایگزیکٹو خلاصہ تیار ہوتا ہے۔

HuggingFace لائبریری کی لچک کی بدولت، آپ اس پوسٹ میں دکھائے گئے کوڈ کو دوسرے قسم کے ٹرانسفارمر ماڈلز، جیسے t5، BART، اور مزید کے لیے آسانی سے ڈھال سکتے ہیں۔

Hugging Face ماڈل کو ٹھیک کرنے کے لیے اپنا ڈیٹا سیٹ لوڈ کریں۔

CSV فائل سے حسب ضرورت ڈیٹاسیٹ لوڈ کرنے کے لیے، ہم استعمال کرتے ہیں۔ load_dataset ٹرانسفارمرز پیکج سے طریقہ. ہم لوڈ شدہ ڈیٹاسیٹ پر ٹوکنائزیشن کا استعمال کر سکتے ہیں۔ datasets.Dataset.map تقریب map فنکشن بھری ہوئی ڈیٹاسیٹ پر تکرار کرتا ہے اور ہر مثال پر ٹوکنائز فنکشن لاگو کرتا ہے۔ اس کے بعد ٹوکنائزڈ ڈیٹاسیٹ کو ماڈل کو ٹھیک کرنے کے لیے ٹرینر کو بھیجا جا سکتا ہے۔ درج ذیل کوڈ دیکھیں:

# Python
def tokenize(batch):
    tokenized_input = tokenizer(batch[args.input_column], padding='max_length', truncation=True, max_length=args.max_source)
    tokenized_target = tokenizer(batch[args.target_column], padding='max_length', truncation=True, max_length=args.max_target)
    tokenized_input['target'] = tokenized_target['input_ids']

    return tokenized_input
    

def load_and_tokenize_dataset(data_dir):
    for file in os.listdir(data_dir):
        dataset = load_dataset("csv", data_files=os.path.join(data_dir, file), split='train')
    tokenized_dataset = dataset.map(lambda batch: tokenize(batch), batched=True, batch_size=512)
    tokenized_dataset.set_format('numpy', columns=['input_ids', 'attention_mask', 'labels'])
    
    return tokenized_dataset

Hugging Face SageMaker تخمینہ لگانے والے کے لیے اپنی تربیت کا اسکرپٹ بنائیں

جیسا کہ پوسٹ میں وضاحت کی گئی ہے۔ AWS اور Hugging Face نیچرل لینگویج پروسیسنگ ماڈلز کو اپنانے کو آسان بنانے اور تیز کرنے کے لیے تعاون کرتے ہیں۔سیج میکر پر گلے لگانے والے چہرے کے ماڈل کو تربیت دینا کبھی بھی آسان نہیں تھا۔ ہم سے Hugging Face تخمینہ لگانے والا استعمال کرکے ایسا کر سکتے ہیں۔ سیج میکر SDK.

درج ذیل کوڈ کا ٹکڑا ہمارے ڈیٹاسیٹ پر Pegasus کو ٹھیک کرتا ہے۔ آپ کو بھی بہت سے مل سکتے ہیں۔ نمونہ نوٹ بک جو آپ کو مختلف قسم کے ماڈلز کو ٹھیک کرنے میں رہنمائی کرتا ہے، جو براہ راست ٹرانسفارمرز GitHub ریپوزٹری میں دستیاب ہے۔ تقسیم شدہ تربیت کو فعال کرنے کے لیے، ہم استعمال کر سکتے ہیں۔ ڈیٹا متوازی لائبریری SageMaker میں، جسے HuggingFace Trainer API میں بنایا گیا ہے۔ ڈیٹا کے متوازی کو فعال کرنے کے لیے، ہمیں اس کی وضاحت کرنے کی ضرورت ہے۔ distribution ہمارے گلے لگنے والے چہرے کا تخمینہ لگانے والے میں پیرامیٹر۔

# Python
from sagemaker.huggingface import HuggingFace
# configuration for running training on smdistributed Data Parallel
distribution = {'smdistributed':{'dataparallel':{ 'enabled': True }}}
huggingface_estimator = HuggingFace(entry_point='train.py',
                                    source_dir='code',
                                    base_job_name='huggingface-pegasus',
                                    instance_type= 'ml.g4dn.16xlarge',
                                    instance_count=1,
                                    transformers_version='4.6',
                                    pytorch_version='1.7',
                                    py_version='py36',
                                    output_path=output_path,
                                    role=role,
                                    hyperparameters = {
                                        'model_name': 'google/pegasus-xsum',
                                        'epoch': 10,
                                        'per_device_train_batch_size': 2
                                    },
                                    distribution=distribution)
huggingface_estimator.fit({'train': training_input_path, 'validation': validation_input_path, 'test': test_input_path})

زیادہ سے زیادہ ٹریننگ بیچ سائز جس کو آپ ترتیب دے سکتے ہیں اس کا انحصار ماڈل کے سائز اور استعمال کردہ مثال کی GPU میموری پر ہے۔ اگر SageMaker کی تقسیم شدہ تربیت فعال ہے، تو بیچ کا کل سائز ہر بیچ کا مجموعہ ہے جو ہر ڈیوائس/GPU میں تقسیم کیا جاتا ہے۔ اگر ہم ml.g4dn.xlarge مثال کے بجائے تقسیم شدہ تربیت کے ساتھ ml.g16dn.4xlarge استعمال کرتے ہیں، تو ہمارے پاس ml.g8dn.xlarge مثال (4 GPU) سے آٹھ گنا (1 GPUs) میموری ہے۔ فی آلہ بیچ کا سائز ایک ہی رہتا ہے، لیکن آٹھ آلات متوازی تربیت دے رہے ہیں۔

SageMaker کے ساتھ ہمیشہ کی طرح، ہم ایک بناتے ہیں۔ train.py اسکرپٹ موڈ کے ساتھ استعمال کرنے کے لیے اسکرپٹ اور ٹریننگ کے لیے ہائپر پیرامیٹر پاس کرنا۔ پیگاسس کے لیے درج ذیل کوڈ کا ٹکڑا ماڈل کو لوڈ کرتا ہے اور ٹرانسفارمرز کا استعمال کرتے ہوئے اسے تربیت دیتا ہے۔ Trainer کلاس:

# Python
from transformers import (
    AutoModelForSeq2SeqLM,
    AutoTokenizer,
    Seq2SeqTrainer,
    Seq2seqTrainingArguments
)

model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device)
    
training_args = Seq2seqTrainingArguments(
    output_dir=args.model_dir,
    num_train_epochs=args.epoch,
    per_device_train_batch_size=args.train_batch_size,
    per_device_eval_batch_size=args.eval_batch_size,
    warmup_steps=args.warmup_steps,
    weight_decay=args.weight_decay,
    logging_dir=f"{args.output_data_dir}/logs",
    logging_strategy='epoch',
    evaluation_strategy='epoch',
    saving_strategy='epoch',
    adafactor=True,
    do_train=True,
    do_eval=True,
    do_predict=True,
    save_total_limit = 3,
    load_best_model_at_end=True,
    metric_for_best_model='eval_loss'
    # With the goal to deploy the best checkpoint to production
    # it is important to set load_best_model_at_end=True,
    # this makes sure that the last model is saved at the root
    # of the model_dir” directory
)
    
trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset['train'],
    eval_dataset=dataset['validation']
)

trainer.train()
trainer.save_model()

# Get rid of unused checkpoints inside the container to limit the model.tar.gz size
os.system(f"rm -rf {args.model_dir}/checkpoint-*/")

مکمل کوڈ پر دستیاب ہے۔ GitHub کے.

تربیت یافتہ Hugging Face ماڈل کو SageMaker پر تعینات کریں۔

Hugging Face پر ہمارے دوستوں نے SageMaker for Transformers کے ماڈلز کا اندازہ پہلے سے کہیں زیادہ آسان بنا دیا ہے۔ سیج میکر ہگنگ فیس انفرنس ٹول کٹ. آپ ماحول کے متغیر کو ترتیب دے کر پہلے سے تربیت یافتہ ماڈل کو براہ راست تعینات کر سکتے ہیں۔ "HF_TASK":"summarization" (ہدایات کے لیے دیکھیں پیگاسس ماڈلز) کا انتخاب کرنا تعینات، اور پھر انتخاب کرنا ایمیزون سیج میکر, ایک تخمینہ اسکرپٹ لکھنے کی ضرورت کے بغیر.

تاہم، اگر آپ کو پیشین گوئیاں تیار کرنے یا پوسٹ پراسیس کرنے کے لیے کسی مخصوص طریقے کی ضرورت ہو، مثال کے طور پر متن کے مختلف پیرامیٹرز کی فہرست کی بنیاد پر کئی خلاصہ تجاویز تیار کرنا، آپ کا اپنا انفرنس اسکرپٹ لکھنا مفید اور نسبتاً سیدھا ہو سکتا ہے:

# Python
# inference.py script

import os
import json
import torch
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

def model_fn(model_dir):
    # Create the model and tokenizer and load weights
    # from the previous training Job, passed here through "model_dir"
    # that is reflected in HuggingFaceModel "model_data"
    tokenizer = AutoTokenizer.from_pretrained(model_dir)
    model = AutoModelForSeq2SeqLM.from_pretrained(model_dir).to(device).eval()
    
    model_dict = {'model':model, 'tokenizer':tokenizer}
    
    return model_dict
        

def predict_fn(input_data, model_dict):
    # Return predictions/generated summaries
    # using the loaded model and tokenizer on input_data
    text = input_data.pop('inputs')
    parameters_list = input_data.pop('parameters_list', None)
    
    tokenizer = model_dict['tokenizer']
    model = model_dict['model']

    # Parameters may or may not be passed    
    input_ids = tokenizer(text, truncation=True, padding='longest', return_tensors="pt").input_ids.to(device)
    
    if parameters_list:
        predictions = []
        for parameters in parameters_list:
            output = model.generate(input_ids, **parameters)
            predictions.append(tokenizer.batch_decode(output, skip_special_tokens=True))
    else:
        output = model.generate(input_ids)
        predictions = tokenizer.batch_decode(output, skip_special_tokens=True)
    
    return predictions
    
    
def input_fn(request_body, request_content_type):
    # Transform the input request to a dictionary
    request = json.loads(request_body)
    return request

جیسا کہ پچھلے کوڈ میں دکھایا گیا ہے، SageMaker پر HuggingFace کے لیے اس طرح کے انفرنس اسکرپٹ کو صرف درج ذیل ٹیمپلیٹ فنکشنز کی ضرورت ہوتی ہے:

  • model_fn() - تربیتی کام کے اختتام پر جو کچھ محفوظ کیا گیا تھا اس کا مواد پڑھتا ہے۔ SM_MODEL_DIR، یا موجودہ ماڈل ویٹ ڈائرکٹری سے tar.gz فائل کے طور پر محفوظ کیا گیا ہے۔ ایمیزون سادہ اسٹوریج سروس (ایمیزون S3)۔ اس کا استعمال تربیت یافتہ ماڈل اور متعلقہ ٹوکنائزر کو لوڈ کرنے کے لیے کیا جاتا ہے۔
  • input_fn() - اختتامی نقطہ پر کی گئی درخواست سے موصول ہونے والے ڈیٹا کو فارمیٹ کرتا ہے۔
  • predict_fn() - کے آؤٹ پٹ کو کال کرتا ہے۔ model_fn() (ماڈل اور ٹوکنائزر) کے آؤٹ پٹ پر اندازہ لگانے کے لیے input_fn() (فارمیٹ شدہ ڈیٹا)۔

اختیاری طور پر، آپ ایک بنا سکتے ہیں۔ output_fn() کی آؤٹ پٹ کا استعمال کرتے ہوئے، تخمینہ فارمیٹنگ کے لئے فنکشن predict_fn()جس کا ہم نے اس پوسٹ میں مظاہرہ نہیں کیا۔

اس کے بعد ہم تربیت یافتہ ہگنگ فیس ماڈل کو اس کے متعلقہ انفرنس اسکرپٹ کے ساتھ سیج میکر کو استعمال کر سکتے ہیں۔ گلے لگانا چہرہ سیج میکر ماڈل کلاس:

# Python
from sagemaker.huggingface import HuggingFaceModel

model = HuggingFaceModel(model_data=huggingface_estimator.model_data,
                     role=role,
                     framework_version='1.7',
                     py_version='py36',
                     entry_point='inference.py',
                     source_dir='code')
                     
predictor = model.deploy(initial_instance_count=1,
                         instance_type='ml.g4dn.xlarge'
                         )

تعینات ماڈل کی جانچ کریں۔

اس ڈیمو کے لیے، ہم نے ماڈل کو تربیت دی۔ خواتین کے ای کامرس لباس کا جائزہ ڈیٹا سیٹ، جس میں لباس کے مضامین (جسے ہم ان پٹ متن کے طور پر سمجھتے ہیں) اور ان سے وابستہ عنوانات (جنہیں ہم خلاصہ سمجھتے ہیں) کے جائزے پر مشتمل ہے۔ گمشدہ عنوانات والے مضامین کو ہٹانے کے بعد، ڈیٹاسیٹ میں 19,675 جائزے شامل ہیں۔ پیگاسس ماڈل کو ایک ٹریننگ سیٹ پر فائن ٹیوننگ کرنے میں 70% مضامین شامل تھے جن میں پانچ عہدوں کے لیے تقریباً 3.5 گھنٹے لگے۔

اس کے بعد ہم ماڈل کو تعینات کر سکتے ہیں اور ٹیسٹ سیٹ سے کچھ مثالی ڈیٹا کے ساتھ اس کی جانچ کر سکتے ہیں۔ ذیل میں سویٹر کی وضاحت کرنے والی ایک مثال کا جائزہ ہے۔

# Python
Review Text
"I ordered this sweater in green in petite large. The color and knit is beautiful and the shoulders and body fit comfortably; however, the sleeves were very long for a petite. I roll them, and it looks okay but would have rather had a normal petite length sleeve."

Original Title
"Long sleeves"

Rating
3

سیج میکر اینڈ پوائنٹ میں میزبانی کی گئی ہماری حسب ضرورت انفرنس اسکرپٹ کی بدولت، ہم اس جائزے کے لیے متن کے مختلف پیرامیٹرز کے ساتھ کئی خلاصے تیار کر سکتے ہیں۔ مثال کے طور پر، ہم اختتامی نقطہ سے مختلف طوالت کے جرمانے کی وضاحت کرتے ہوئے بہت مختصر سے اعتدال پسند طویل خلاصوں کی ایک رینج تیار کرنے کے لیے کہہ سکتے ہیں (لمبائی کا جرمانہ جتنا چھوٹا ہوگا، تیار کردہ خلاصہ اتنا ہی چھوٹا ہوگا)۔ ذیل میں کچھ پیرامیٹر ان پٹ کی مثالیں ہیں، اور اس کے بعد مشین سے تیار کردہ خلاصے:

# Python
inputs = {
    "inputs":[
"I ordered this sweater in green in petite large. The color and knit is   beautiful and the shoulders and body fit comfortably; however, the sleeves were very long for a petite. I roll them, and it looks okay but would have rather had a normal petite length sleeve."
    ],

    "parameters_list":[
        {
            "length_penalty":2
        },
	{
            "length_penalty":1
        },
	{
            "length_penalty":0.6
        },
        {
            "length_penalty":0.4
        }
    ]

result = predictor.predict(inputs)
print(result)

[
    ["Beautiful color and knit but sleeves are very long for a petite"],
    ["Beautiful sweater, but sleeves are too long for a petite"],
    ["Cute, but sleeves are long"],
    ["Very long sleeves"]
]

آپ کون سا خلاصہ پسند کرتے ہیں؟ پہلا تخلیق کردہ عنوان جائزے کے بارے میں تمام اہم حقائق کو اپنی لپیٹ میں لے لیتا ہے، الفاظ کی تعداد ایک چوتھائی کے ساتھ۔ اس کے برعکس، آخری میں سویٹر کی سب سے اہم خصوصیت پر توجہ مرکوز کرنے کے لیے صرف تین الفاظ (اصل جائزے کی لمبائی کے 1/10ویں حصے سے کم) استعمال کیے گئے ہیں۔

نتیجہ

آپ اپنے کسٹم ڈیٹاسیٹ پر ٹیکسٹ سمریزر کو ٹھیک بنا سکتے ہیں اور اسے سیج میکر پر پروڈکشن میں تعینات کر سکتے ہیں اس سادہ مثال کے ساتھ GitHub کے. اضافی نمونہ نوٹ بک سیج میکر پر ہگنگ فیس ماڈل کی تربیت اور تعیناتی بھی دستیاب ہے۔

ہمیشہ کی طرح، AWS تاثرات کا خیرمقدم کرتا ہے۔ براہ کرم کوئی تبصرہ یا سوالات بھیجیں۔

حوالہ جات

[1] پیگاسس: تجریدی خلاصہ کے لیے ایکسٹریکٹڈ گیپ جملوں کے ساتھ پری ٹریننگ


مصنفین کے بارے میں

Hugging Face Amazon SageMaker کنٹینرز کا استعمال کرتے ہوئے ایک سمریزر ماڈل کو ٹھیک کریں اور تعینات کریں جو آپ کی اپنی اسکرپٹ PlatoBlockchain ڈیٹا انٹیلی جنس لے کر آئے۔ عمودی تلاش۔ عی وکٹر مالیسیوک AWS پروفیشنل سروسز کے ساتھ ایک مشین لرننگ انجینئر ہے، جو نیچرل لینگویج پروسیسنگ اور MLOps کے بارے میں پرجوش ہے۔ وہ صارفین کے ساتھ مل کر AWS پر پروڈکشن کے لیے چیلنجنگ ڈیپ لرننگ ماڈل تیار کرنے اور پیش کرنے کے لیے کام کرتا ہے۔ اپنے فارغ وقت میں، وہ دوستوں کے ساتھ ریڈ وائن کا گلاس اور کچھ پنیر بانٹ کر لطف اندوز ہوتا ہے۔

Hugging Face Amazon SageMaker کنٹینرز کا استعمال کرتے ہوئے ایک سمریزر ماڈل کو ٹھیک کریں اور تعینات کریں جو آپ کی اپنی اسکرپٹ PlatoBlockchain ڈیٹا انٹیلی جنس لے کر آئے۔ عمودی تلاش۔ عیآمنہ نجمی AWS پروفیشنل سروسز کے ساتھ ڈیٹا سائنٹسٹ ہے۔ وہ بزنس ویلیو اور ڈیٹا سے بصیرت حاصل کرنے کے لیے بگ ڈیٹا اور مصنوعی ذہانت کی ٹیکنالوجیز کے ساتھ اختراع کرنے میں صارفین کی مدد کرنے کے لیے پرجوش ہے۔ اپنے فارغ وقت میں، وہ باغبانی اور نئی جگہوں کا سفر کرنے سے لطف اندوز ہوتی ہے۔

ٹائم اسٹیمپ:

سے زیادہ AWS مشین لرننگ