AWS Inferentia2 کے ساتھ مستحکم بازی کی کارکردگی اور کم تخمینہ لاگت کو زیادہ سے زیادہ کریں۔ ایمیزون ویب سروسز

AWS Inferentia2 کے ساتھ مستحکم بازی کی کارکردگی اور کم تخمینہ لاگت کو زیادہ سے زیادہ کریں۔ ایمیزون ویب سروسز

حقیقت پسندانہ متن، تصاویر، کوڈ اور آڈیو بنانے میں اپنی متاثر کن صلاحیتوں کی وجہ سے جنریٹو AI ماڈلز حالیہ مہینوں میں تیزی سے ترقی کر رہے ہیں۔ ان ماڈلز میں، مستحکم ڈفیوژن ماڈلز ٹیکسٹ پرامپٹس کی بنیاد پر اعلیٰ معیار کی تصاویر بنانے میں اپنی منفرد طاقت کے لیے نمایاں ہیں۔ مستحکم پھیلاؤ اعلی معیار کی تصاویر کی وسیع اقسام پیدا کر سکتا ہے، بشمول حقیقت پسندانہ پورٹریٹ، مناظر، اور یہاں تک کہ تجریدی آرٹ۔ اور، دوسرے جنریٹیو AI ماڈلز کی طرح، مستحکم ڈفیوژن ماڈلز کو کم تاخیر کا اندازہ فراہم کرنے کے لیے طاقتور کمپیوٹنگ کی ضرورت ہوتی ہے۔

اس پوسٹ میں، ہم دکھاتے ہیں کہ آپ کس طرح مستحکم ڈفیوژن ماڈلز چلا سکتے ہیں اور سب سے کم قیمت پر اعلیٰ کارکردگی حاصل کر سکتے ہیں۔ ایمیزون لچکدار کمپیوٹ کلاؤڈ (ایمیزون EC2) کا استعمال کرتے ہوئے ایمیزون EC2 Inf2 مثالیں۔ کی طرف سے طاقت AWS Inferentia2. ہم ایک مستحکم ڈفیوژن ماڈل کے فن تعمیر کو دیکھتے ہیں اور اس کا استعمال کرتے ہوئے ایک مستحکم بازی ماڈل کو مرتب کرنے کے مراحل سے گزرتے ہیں۔ AWS نیوران اور اسے Inf2 مثال میں تعینات کرنا۔ ہم ان اصلاحوں پر بھی بات کرتے ہیں جو نیوران SDK خود بخود کارکردگی کو بہتر بنانے کے لیے کرتا ہے۔ آپ AWS Inferentia2.1 پر Stable Diffusion 1.5 اور 2 دونوں ورژن لاگت کے ساتھ چلا سکتے ہیں۔ آخر میں، ہم یہ دکھاتے ہیں کہ آپ کس طرح ایک مستحکم ڈفیوژن ماڈل کو Inf2 مثال کے ساتھ تعینات کر سکتے ہیں۔ ایمیزون سیج میکر.

فلوٹنگ پوائنٹ 2.1 (FP32) میں اسٹیبل ڈفیوژن 32 ماڈل سائز 5 GB اور bfoat2.5 (BF16) میں 16 GB ہے۔ ایک واحد inf2.xlarge مثال میں 2 GB HBM میموری کے ساتھ AWS Inferentia32 ایکسلریٹر ہے۔ اسٹیبل ڈفیوژن 2.1 ماڈل ایک ہی inf2.xlarge مثال پر فٹ ہو سکتا ہے۔ اسٹیبل ڈفیوژن ایک ٹیکسٹ ٹو امیج ماڈل ہے جسے آپ ان پٹ کے طور پر ٹیکسٹ پرامپٹ فراہم کر کے مختلف طرزوں اور مواد کی تصاویر بنانے کے لیے استعمال کر سکتے ہیں۔ اسٹیبل ڈفیوژن ماڈل فن تعمیر کے بارے میں مزید جاننے کے لیے دیکھیں مستحکم ڈفیوژن ماڈلز کے ساتھ اعلیٰ معیار کی تصاویر بنائیں اور انہیں Amazon SageMaker کے ساتھ لاگت کے ساتھ تعینات کریں۔.

نیوران SDK کس طرح مستحکم بازی کی کارکردگی کو بہتر بناتا ہے۔

اس سے پہلے کہ ہم AWS Inferentia2.1 مثالوں پر Stable Diffusion 2 ماڈل کو تعینات کر سکیں، ہمیں ماڈل کے اجزاء کو استعمال کرتے ہوئے مرتب کرنے کی ضرورت ہے۔ نیوران SDK. نیورون SDK، جس میں ایک ڈیپ لرننگ کمپائلر، رن ٹائم، اور ٹولز شامل ہیں، ڈیپ لرننگ ماڈلز کو مرتب اور خود بخود بہتر بناتا ہے تاکہ وہ Inf2 مثالوں پر مؤثر طریقے سے چل سکیں اور AWS Inferentia2 ایکسلریٹر کی مکمل کارکردگی کو نکال سکیں۔ ہمارے پاس اسٹیبل ڈفیوژن 2.1 ماڈل کی مثالیں دستیاب ہیں۔ GitHub repo. یہ نوٹ بک ایک آخر سے آخر تک مثال پیش کرتی ہے کہ کس طرح ایک مستحکم ڈفیوژن ماڈل کو مرتب کیا جائے، مرتب کردہ نیوران ماڈلز کو محفوظ کیا جائے، اور اندازہ کے لیے اسے رن ٹائم میں لوڈ کیا جائے۔

ہم استعمال کرتے ہیں StableDiffusionPipeline گلے ملنے والے چہرے سے diffusers ماڈل کو لوڈ اور مرتب کرنے کے لیے لائبریری۔ اس کے بعد ہم نیوران کے استعمال کے لیے ماڈل کے تمام اجزاء کو مرتب کرتے ہیں۔ torch_neuronx.trace() اور آپٹمائزڈ ماڈل کو TorchScript کے بطور محفوظ کریں۔ تالیف کے عمل کافی زیادہ میموری کے حامل ہو سکتے ہیں، جس میں کافی مقدار میں RAM کی ضرورت ہوتی ہے۔ اس کو روکنے کے لیے، ہر ماڈل کا سراغ لگانے سے پہلے، ہم ایک بناتے ہیں۔ deepcopy پائپ لائن کے اس حصے کا جس کا سراغ لگایا جا رہا ہے۔ اس کے بعد، ہم پائپ لائن آبجیکٹ کو میموری سے ڈیلیٹ کر دیتے ہیں۔ del pipe. یہ تکنیک خاص طور پر اس وقت کارآمد ہے جب کم RAM والی مثالوں پر مرتب کیا جائے۔

مزید برآں، ہم اسٹیبل ڈفیوژن ماڈلز کی اصلاح بھی کرتے ہیں۔ UNet کے پاس تخمینہ کا سب سے زیادہ کمپیوٹیشنل گہرا پہلو ہے۔ UNet جزو ان پٹ ٹینسر پر کام کرتا ہے جن کا بیچ سائز دو ہوتا ہے، ایک ہی امیج تیار کرنے کے لیے دو کے بیچ سائز کے ساتھ متعلقہ آؤٹ پٹ ٹینسر بھی تیار کرتا ہے۔ ان بیچوں کے اندر موجود عناصر ایک دوسرے سے مکمل طور پر آزاد ہیں۔ ہم ہر نیوران کور پر ایک بیچ چلا کر زیادہ سے زیادہ تاخیر حاصل کرنے کے لیے اس رویے کا فائدہ اٹھا سکتے ہیں۔ ہم UNet کو ایک بیچ کے لیے مرتب کرتے ہیں (ایک بیچ کے ساتھ ان پٹ ٹینسر استعمال کرکے)، پھر استعمال کریں۔ torch_neuronx.DataParallel اس واحد بیچ ماڈل کو ہر کور پر لوڈ کرنے کے لیے API۔ اس API کا آؤٹ پٹ ایک ہموار دو بیچ کا ماڈیول ہے: ہم UNet کو دو بیچوں کے ان پٹ پاس کر سکتے ہیں، اور دو بیچ کا آؤٹ پٹ واپس آ جاتا ہے، لیکن اندرونی طور پر، دو سنگل بیچ ماڈل دو نیوران کور پر چل رہے ہیں۔ . یہ حکمت عملی وسائل کے استعمال کو بہتر بناتی ہے اور تاخیر کو کم کرتی ہے۔

Inf2 EC2 مثال پر ایک مستحکم ڈفیوژن ماڈل مرتب اور تعینات کریں۔

Inf2 EC2 مثال پر مستحکم ڈفیوژن ماڈل کو مرتب اور تعینات کرنے کے لیے، پر دستخط کریں AWS مینجمنٹ کنسول اور ایک inf2.8xlarge مثال بنائیں۔ نوٹ کریں کہ ایک inf2.8xlarge مثال صرف ماڈل کی تالیف کے لیے درکار ہے کیونکہ تالیف کے لیے زیادہ میزبان میموری کی ضرورت ہوتی ہے۔ اسٹیبل ڈفیوژن ماڈل کو inf2.xlarge مثال پر ہوسٹ کیا جا سکتا ہے۔ آپ درج ذیل کا استعمال کرتے ہوئے نیوران لائبریریوں کے ساتھ تازہ ترین AMI تلاش کر سکتے ہیں۔ AWS کمانڈ لائن انٹرفیس (AWS CLI) کمانڈ:

aws ec2 describe-images --region us-east-1 --owners amazon --filters 'Name=name,Values=Deep Learning AMI Neuron PyTorch 1.13.? (Amazon Linux 2) ????????' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &CreationDate))[:1].ImageId' --output text

اس مثال کے لیے، ہم نے ڈیپ لرننگ AMI نیورون پائی ٹارچ 2 (اوبنٹو 1.13) کا استعمال کرتے ہوئے ایک EC20.04 مثال بنائی۔ اس کے بعد آپ مثال سے منسلک ہو کر اور درج ذیل مراحل کو چلا کر JupyterLab لیب ماحول بنا سکتے ہیں۔

run source /opt/aws_neuron_venv_pytorch/bin/activate
pip install jupyterlab
jupyter-lab

ماڈل کو مرتب کرنے اور میزبانی کرنے کے تمام مراحل کے ساتھ ایک نوٹ بک پر واقع ہے۔ GitHub کے.

آئیے ٹیکسٹ انکوڈر بلاکس میں سے ایک کے لیے تالیف کے مراحل کو دیکھیں۔ دوسرے بلاکس جو کہ مستحکم پھیلاؤ پائپ لائن کا حصہ ہیں اسی طرح مرتب کیے جا سکتے ہیں۔

پہلا قدم پہلے سے تربیت یافتہ ماڈل کو Hugging Face سے لوڈ کرنا ہے۔ دی StableDiffusionPipeline.from_pretrained طریقہ پہلے سے تربیت یافتہ ماڈل کو ہماری پائپ لائن آبجیکٹ میں لوڈ کرتا ہے، pipe. اس کے بعد ہم ایک بناتے ہیں۔ deepcopy ہماری پائپ لائن سے ٹیکسٹ انکوڈر کا، مؤثر طریقے سے اس کی کلوننگ۔ دی del pipe اس کے بعد کمانڈ کا استعمال اصل پائپ لائن آبجیکٹ کو حذف کرنے کے لیے کیا جاتا ہے، اس میموری کو آزاد کرتے ہوئے جو اس کے ذریعے استعمال کی گئی تھی۔ یہاں، ہم ماڈل کو BF16 وزن کے مطابق کر رہے ہیں:

model_id = "stabilityai/stable-diffusion-2-1-base"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
text_encoder = copy.deepcopy(pipe.text_encoder)
del pipe

اس قدم میں ہمارے ٹیکسٹ انکوڈر کو کے ساتھ لپیٹنا شامل ہے۔ NeuronTextEncoder چادر مرتب شدہ ٹیکسٹ انکوڈر ماڈیول کا آؤٹ پٹ ہوگا۔ dict. ہم اسے a میں تبدیل کرتے ہیں۔ list اس ریپر کا استعمال کرتے ہوئے ٹائپ کریں:

text_encoder = NeuronTextEncoder(text_encoder)

ہم PyTorch ٹینسر کو شروع کرتے ہیں۔ emb کچھ اقدار کے ساتھ۔ دی emb ٹینسر کو مثال کے طور پر ان پٹ کے لیے استعمال کیا جاتا ہے۔ torch_neuronx.trace فنکشن یہ فنکشن ہمارے ٹیکسٹ انکوڈر کو ٹریس کرتا ہے اور اسے نیوران کے لیے موزوں شکل میں مرتب کرتا ہے۔ مرتب شدہ ماڈل کے لیے ڈائرکٹری کا راستہ شامل ہونے سے بنایا گیا ہے۔ COMPILER_WORKDIR_ROOT ذیلی ڈائرکٹری کے ساتھ text_encoder:

emb = torch.tensor([...])
text_encoder_neuron = torch_neuronx.trace(
        text_encoder.neuron_text_encoder,
        emb,
        compiler_workdir=os.path.join(COMPILER_WORKDIR_ROOT, 'text_encoder'),
        )

مرتب شدہ ٹیکسٹ انکوڈر کو استعمال کرکے محفوظ کیا جاتا ہے۔ torch.jit.save. یہ فائل کے نام model.pt میں محفوظ ہے۔ text_encoder ہمارے کمپائلر کے ورک اسپیس کی ڈائرکٹری:

text_encoder_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'text_encoder/model.pt')
torch.jit.save(text_encoder_neuron, text_encoder_filename)

۔ نوٹ بک ماڈل کے دیگر اجزاء کو مرتب کرنے کے لیے اسی طرح کے اقدامات شامل ہیں: UNet، VAE ڈیکوڈر، اور VAE post_quant_conv. تمام ماڈلز کو مرتب کرنے کے بعد، آپ ان مراحل پر عمل کرتے ہوئے ماڈل کو لوڈ اور چلا سکتے ہیں:

  1. مرتب شدہ ماڈلز کے لیے راستوں کی وضاحت کریں۔
  2. پہلے سے تربیت یافتہ لوڈ کریں۔ StableDiffusionPipeline ماڈل، اس کی ترتیب کے ساتھ bfloat16 ڈیٹا کی قسم کو استعمال کرنے کے لیے مخصوص ہے۔
  3. کا استعمال کرتے ہوئے UNet ماڈل کو دو نیوران کور پر لوڈ کریں۔ torch_neuronx.DataParallel API یہ اعداد و شمار کے متوازی تخمینہ کو انجام دینے کی اجازت دیتا ہے، جو ماڈل کی کارکردگی کو نمایاں طور پر تیز کر سکتا ہے۔
  4. ماڈل کے باقی حصوں کو لوڈ کریں (text_encoder, decoder، اور post_quant_conv) ایک واحد نیوران کور پر۔

اس کے بعد آپ اشارے کے طور پر ان پٹ ٹیکسٹ فراہم کرکے پائپ لائن چلا سکتے ہیں۔ پرامپٹس کے لیے ماڈل کے ذریعے تیار کردہ کچھ تصاویر درج ذیل ہیں:

  • رینوڈ سیچن کا پورٹریٹ، قلم اور سیاہی، پیچیدہ لائن ڈرائنگ، بذریعہ کریگ مولینز، روان جیا، کینٹارو میورا، گریگ رٹکوسکی، لاؤنڈرا

Maximize Stable Diffusion performance and lower inference costs with AWS Inferentia2 | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

  • 19ویں صدی میں کوئلے کی کان کنی کی پرانی تصویر، خوبصورت پینٹنگ، گریگ رٹکوسکی کی انتہائی تفصیلی چہرے کی پینٹنگ کے ساتھ

Maximize Stable Diffusion performance and lower inference costs with AWS Inferentia2 | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

  • جنگل کے بیچ میں ایک قلعہ

Maximize Stable Diffusion performance and lower inference costs with AWS Inferentia2 | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

AWS Inferentia2.1 اور SageMaker پر Stable Diffusion 2 کی میزبانی کریں۔

SageMaker کے ساتھ مستحکم ڈفیوژن ماڈلز کی میزبانی کرنے کے لیے بھی نیوران SDK کے ساتھ تالیف کی ضرورت ہوتی ہے۔ آپ بڑے ماڈل انفرنس (LMI) کنٹینرز کا استعمال کرتے ہوئے وقت سے پہلے یا رن ٹائم کے دوران تالیف مکمل کر سکتے ہیں۔ وقت سے پہلے تالیف ماڈل کو تیز تر لوڈنگ کے اوقات کی اجازت دیتی ہے اور یہ ترجیحی آپشن ہے۔

SageMaker LMI کنٹینرز ماڈل کو تعینات کرنے کے دو طریقے فراہم کرتے ہیں:

  • ایک بغیر کوڈ کا اختیار جہاں ہم صرف ایک فراہم کرتے ہیں۔ serving.properties مطلوبہ ترتیب کے ساتھ فائل
  • اپنا اپنا قیاس اسکرپٹ لائیں۔

ہم دونوں حلوں کو دیکھتے ہیں اور کنفیگریشنز اور انفرنس اسکرپٹ کو دیکھتے ہیں (model.py)۔ اس پوسٹ میں، ہم ایک پہلے سے مرتب شدہ ماڈل کا استعمال کرتے ہوئے تعیناتی کا مظاہرہ کرتے ہیں۔ ایمیزون سادہ اسٹوریج سروس (ایمیزون S3) بالٹی۔ آپ اس پہلے سے مرتب شدہ ماڈل کو اپنی تعیناتیوں کے لیے استعمال کر سکتے ہیں۔

فراہم کردہ اسکرپٹ کے ساتھ ماڈل کو ترتیب دیں۔

اس سیکشن میں، ہم یہ دکھاتے ہیں کہ ایل ایم آئی کنٹینر کو مستحکم ڈفیوژن ماڈلز کی میزبانی کے لیے کیسے ترتیب دیا جائے۔ SD2.1 نوٹ بک دستیاب ہے۔ GitHub کے. پہلا قدم مندرجہ ذیل ڈائریکٹری ڈھانچے کے مطابق ماڈل کنفیگریشن پیکج بنانا ہے۔ ہمارا مقصد ماڈل کی میزبانی کے لیے درکار کم سے کم ماڈل کنفیگریشنز کا استعمال کرنا ہے۔ مطلوبہ ڈائرکٹری ڈھانچہ مندرجہ ذیل ہے:

<config-root-directory> / 
    ├── serving.properties
    │   
    └── model.py [OPTIONAL]

اگلا، ہم تخلیق کرتے ہیں serving.properties درج ذیل پیرامیٹرز کے ساتھ فائل:

%%writefile code_sd/serving.properties
engine=Python
option.entryPoint=djl_python.transformers-neuronx
option.use_stable_diffusion=True
option.model_id=s3url
option.tensor_parallel_degree=2
option.dtype=bf16

پیرامیٹرز درج ذیل کی وضاحت کرتے ہیں:

  • option.model_id - LMI کنٹینرز S5 کے مقام سے ماڈل کو لوڈ کرنے کے لیے s3cmd استعمال کرتے ہیں اور اس لیے ہمیں اس مقام کی وضاحت کرنے کی ضرورت ہے جہاں ہمارے مرتب کردہ وزن ہیں۔
  • option.entryPoint - بلٹ ان ہینڈلرز استعمال کرنے کے لیے، ہم ٹرانسفارمرز-نیورونکس کلاس کی وضاحت کرتے ہیں۔ اگر آپ کے پاس حسب ضرورت انفرنس اسکرپٹ ہے، تو آپ کو اس کی بجائے اسے فراہم کرنا ہوگا۔
  • option.dtype - یہ ایک مخصوص سائز میں وزن لوڈ کرنے کی وضاحت کرتا ہے۔ اس پوسٹ کے لیے، ہم BF16 استعمال کرتے ہیں، جو ہماری میموری کی ضروریات کو مزید کم کرتا ہے بمقابلہ FP32 اور اس کی وجہ سے ہماری تاخیر کو کم کرتا ہے۔
  • option.tensor_parallel_degree - یہ پیرامیٹر ان ایکسلریٹروں کی تعداد بتاتا ہے جو ہم اس ماڈل کے لیے استعمال کرتے ہیں۔ AWS Inferentia2 چپ ایکسلریٹر میں دو نیوران کور ہوتے ہیں اور اس لیے 2 کی قدر بتانے کا مطلب ہے کہ ہم ایک ایکسلریٹر (دو کور) استعمال کرتے ہیں۔ اس کا مطلب ہے کہ اب ہم اختتامی نقطہ کے تھرو پٹ کو بڑھانے کے لیے متعدد کارکن بنا سکتے ہیں۔
  • option.engine - یہ اس بات کی نشاندہی کرنے کے لیے Python پر سیٹ کیا گیا ہے کہ ہم اس ہوسٹنگ کے لیے دیگر کمپائلرز جیسے DeepSpeed ​​یا Faster Transformer کا استعمال نہیں کریں گے۔

اپنا اپنا اسکرپٹ لائیں۔

اگر آپ اپنی مرضی کے مطابق انفرنس اسکرپٹ لانا چاہتے ہیں تو آپ کو ہٹانا ہوگا۔ option.entryPoint سے serving.properties. اس صورت میں LMI کنٹینر a کی تلاش کرے گا۔ model.py فائل کے طور پر ایک ہی جگہ میں serving.properties اور اندازہ لگانے کے لیے اس کا استعمال کریں۔

اپنی خود کی انفرنس اسکرپٹ بنائیں (model.py)

LMI کنٹینر کا استعمال کرتے ہوئے آپ کی اپنی انفرنس اسکرپٹ بنانا نسبتاً سیدھا ہے۔ کنٹینر کو آپ کی ضرورت ہے۔ model.py درج ذیل طریقہ کار پر عمل درآمد کرنے کے لیے فائل:

def handle(inputs: Input) which returns an object of type Outputs

آئیے کے کچھ اہم شعبوں کا جائزہ لیتے ہیں۔ منسلک نوٹ بک، جو آپ کی اپنی اسکرپٹ فنکشن لانے کو ظاہر کرتا ہے۔

تبدیل کریں cross_attention آپٹمائزڈ ورژن کے ساتھ ماڈیول:

# Replace original cross-attention module with custom cross-attention module for better performance
    CrossAttention.get_attention_scores = get_attention_scores
Load the compiled weights for the following
text_encoder_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'text_encoder.pt')
decoder_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'vae_decoder.pt')
unet_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'unet.pt')
post_quant_conv_filename =. os.path.join(COMPILER_WORKDIR_ROOT, 'vae_post_quant_conv.pt')

یہ مرتب کردہ وزن کی فائل کے نام ہیں جو ہم نے تالیفات بناتے وقت استعمال کی تھیں۔ فائل کے ناموں کو تبدیل کرنے کے لئے آزاد محسوس کریں، لیکن اس بات کو یقینی بنائیں کہ آپ کے وزن والے فائل کے نام آپ کے یہاں بیان کردہ چیزوں سے مماثل ہیں۔

پھر ہمیں انہیں نیوران SDK کا استعمال کرتے ہوئے لوڈ کرنے کی ضرورت ہے اور انہیں اصل ماڈل وزن میں سیٹ کرنا ہوگا۔ UNet آپٹمائزڈ وزن لوڈ کرتے وقت، نوٹ کریں کہ ہم نیوران کور کی تعداد بھی بتا رہے ہیں جن پر ہمیں ان کو لوڈ کرنے کی ضرورت ہے۔ یہاں، ہم دو کور کے ساتھ ایک ہی ایکسلریٹر پر لوڈ کرتے ہیں:

# Load the compiled UNet onto two neuron cores.
    pipe.unet = NeuronUNet(UNetWrap(pipe.unet))
    logging.info(f"Loading model: unet:created")
    device_ids = [idx for idx in range(tensor_parallel_degree)]
   
    pipe.unet.unetwrap = torch_neuronx.DataParallel(torch.jit.load(unet_filename), device_ids, set_dynamic_batching=False)
   
 
    # Load other compiled models onto a single neuron core.
 
    # - load encoders
    pipe.text_encoder = NeuronTextEncoder(pipe.text_encoder)
    clip_compiled = torch.jit.load(text_encoder_filename)
    pipe.text_encoder.neuron_text_encoder = clip_compiled
    #- load decoders
    pipe.vae.decoder = torch.jit.load(decoder_filename)
    pipe.vae.post_quant_conv = torch.jit.load(post_quant_conv_filename)

پرامپٹ کے ساتھ انفرنس کو چلانے سے پائپ آبجیکٹ کو امیج بنانے کی دعوت ملتی ہے۔

سیج میکر اینڈ پوائنٹ بنائیں

ہم SageMaker اینڈ پوائنٹ بنانے کے لیے Boto3 APIs کا استعمال کرتے ہیں۔ درج ذیل مراحل کو مکمل کریں:

  1. صرف سرونگ اور اختیاری کے ساتھ ٹربال بنائیں model.py فائلیں بنائیں اور اسے ایمیزون S3 پر اپ لوڈ کریں۔
  2. امیج کنٹینر اور پہلے اپ لوڈ کردہ ماڈل ٹربال کا استعمال کرتے ہوئے ماڈل بنائیں۔
  3. درج ذیل کلیدی پیرامیٹرز کا استعمال کرتے ہوئے اختتامی نقطہ کی تشکیل بنائیں:
    1. استعمال کریں ml.inf2.xlarge مثال.
    2. سیٹ کریں ContainerStartupHealthCheckTimeoutInSeconds ماڈل کے تعینات ہونے کے بعد صحت کی جانچ شروع ہونے کو یقینی بنانے کے لیے 240 تک۔
    3. سیٹ کریں VolumeInGB ایک بڑی قدر کے لیے تاکہ اسے ماڈل وزن لوڈ کرنے کے لیے استعمال کیا جا سکے جن کا سائز 32 GB ہے۔

سیج میکر ماڈل بنائیں

ماڈل.tar.gz فائل بنانے اور اسے Amazon S3 پر اپ لوڈ کرنے کے بعد، ہمیں SageMaker ماڈل بنانا ہوگا۔ SageMaker ماڈل بنانے کے لیے ہم پچھلے مرحلے سے LMI کنٹینر اور ماڈل آرٹفیکٹ کا استعمال کرتے ہیں۔ SageMaker ہمیں مختلف ماحولیاتی متغیرات کو اپنی مرضی کے مطابق بنانے اور انجیکشن کرنے کی اجازت دیتا ہے۔ اس ورک فلو کے لیے، ہم ہر چیز کو بطور ڈیفالٹ چھوڑ سکتے ہیں۔ درج ذیل کوڈ دیکھیں:

inference_image_uri = (
    f"763104351884.dkr.ecr.{region}.amazonaws.com/djl-inference:0 djl-serving-inf2"
)

ماڈل آبجیکٹ بنائیں، جو بنیادی طور پر ایک لاک ڈاؤن کنٹینر بناتا ہے جو مثال پر لوڈ ہوتا ہے اور اندازہ لگانے کے لیے استعمال ہوتا ہے:

model_name = name_from_base(f"inf2-sd")
create_model_response = boto3_sm_client.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    PrimaryContainer={"Image": inference_image_uri, "ModelDataUrl": s3_code_artifact},
)

سیج میکر اینڈ پوائنٹ بنائیں

اس ڈیمو میں، ہم ایک ml.inf2.xlarge مثال استعمال کرتے ہیں۔ ہمیں سیٹ کرنے کی ضرورت ہے۔ VolumeSizeInGB ماڈل اور وزن کو لوڈ کرنے کے لیے ضروری ڈسک کی جگہ فراہم کرنے کے لیے پیرامیٹرز۔ یہ پیرامیٹر ان مثالوں پر لاگو ہوتا ہے جو کی حمایت کرتے ہیں۔ ایمیزون لچکدار بلاک اسٹور (ایمیزون ای بی ایس) والیوم اٹیچمنٹ۔ ہم ماڈل ڈاؤن لوڈ ٹائم آؤٹ اور کنٹینر اسٹارٹ اپ ہیلتھ چیک کو زیادہ قیمت پر چھوڑ سکتے ہیں، جو کنٹینر کو Amazon S3 سے وزن نکالنے اور AWS Inferentia2 ایکسلریٹر میں لوڈ کرنے کے لیے مناسب وقت دے گا۔ مزید تفصیلات کے لیے رجوع کریں۔ EndpointConfig بنائیں.

endpoint_config_response = boto3_sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "VariantName": "variant1",
            "ModelName": model_name,
            "InstanceType": "ml.inf2.xlarge", # - 
            "InitialInstanceCount": 1,
            "ContainerStartupHealthCheckTimeoutInSeconds": 360, 
            "VolumeSizeInGB": 400
        },
    ],
)

آخر میں، ہم سیج میکر اینڈ پوائنٹ بناتے ہیں:

create_endpoint_response = boto3_sm_client.create_endpoint(
    EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)

ماڈل اینڈ پوائنٹ کو مدعو کریں۔

یہ ایک تخلیقی ماڈل ہے، لہذا ہم اس پرامپٹ کو پاس کرتے ہیں جسے ماڈل تصویر بنانے کے لیے استعمال کرتا ہے۔ پے لوڈ JSON قسم کا ہے:

response_model = boto3_sm_run_client.invoke_endpoint( EndpointName=endpoint_name,
    Body=json.dumps(
        {
            "prompt": "Mountain Landscape", 
            "parameters": {} # 
        }
    ), 
    ContentType="application/json",
)

Inf2 پر مستحکم ڈفیوژن ماڈل کی بینچ مارکنگ

ہم نے Inf16 پر BF 2 ڈیٹا کی قسم کے ساتھ اسٹیبل ڈفیوژن ماڈل کو بینچ مارک کرنے کے لیے کچھ ٹیسٹ کیے، اور ہم ایسے لیٹینسی نمبرز اخذ کرنے کے قابل ہیں جو اسٹیبل ڈفیوژن کے لیے کچھ دوسرے ایکسلریٹروں کا مقابلہ کرتے ہیں یا اس سے زیادہ ہیں۔ یہ، AWS Inferentia2 چپس کی کم قیمت کے ساتھ مل کر، یہ ایک انتہائی قیمتی تجویز بناتا ہے۔

درج ذیل نمبرز ایک inf2.xl مثال پر تعینات Stable Diffusion ماڈل سے ہیں۔ اخراجات کے بارے میں مزید معلومات کے لیے، رجوع کریں۔ ایمیزون EC2 Inf2 مثالیں۔.

ماڈل قرارداد ڈیٹا کی قسم اشارے P95 تاخیر (ms) Inf2.xl آن ڈیمانڈ لاگت فی گھنٹہ Inf2.xl (فی تصویر کی قیمت)
مستحکم بازی 1.5 512 × 512 BF16 50 2,427.4 $0.76 $0.0005125
مستحکم بازی 1.5 768 × 768 BF16 50 8,235.9 $0.76 $0.0017387
مستحکم بازی 1.5 512 × 512 BF16 30 1,456.5 $0.76 $0.0003075
مستحکم بازی 1.5 768 × 768 BF16 30 4,941.6 $0.76 $0.0010432
مستحکم بازی 2.1 512 × 512 BF16 50 1,976.9 $0.76 $0.0004174
مستحکم بازی 2.1 768 × 768 BF16 50 6,836.3 $0.76 $0.0014432
مستحکم بازی 2.1 512 × 512 BF16 30 1,186.2 $0.76 $0.0002504
مستحکم بازی 2.1 768 × 768 BF16 30 4,101.8 $0.76 $0.0008659

نتیجہ

اس پوسٹ میں، ہم نے Inf2.1 مثالوں کا استعمال کرتے ہوئے Stable Diffusion 2 ماڈل کی تالیف، اصلاح، اور تعیناتی میں گہرائی تک رسائی حاصل کی۔ ہم نے SageMaker کا استعمال کرتے ہوئے مستحکم ڈفیوژن ماڈلز کی تعیناتی کا بھی مظاہرہ کیا۔ Inf2 مثالیں بھی Stable Diffusion 1.5 کے لیے بہترین قیمت کی کارکردگی پیش کرتی ہیں۔ اس بارے میں مزید جاننے کے لیے کہ Inf2 مثالیں جنریٹیو AI اور بڑے لینگویج ماڈلز کے لیے بہترین کیوں ہیں، دیکھیں Amazon EC2 Inf2 مثالیں کم لاگت، اعلیٰ کارکردگی پیدا کرنے والے AI انفرنس کے لیے اب عام طور پر دستیاب ہیں. کارکردگی کی تفصیلات کے لیے رجوع کریں۔ Inf2 کارکردگی. پر اضافی مثالیں دیکھیں GitHub repo.

جائزہ لینے اور قیمتی معلومات فراہم کرنے کے لیے میتھیو میک کلین، بینی ہیگیڈس، کامران خان، شروتی کوپارکر، اور کنگ لین کا خصوصی شکریہ۔


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

Maximize Stable Diffusion performance and lower inference costs with AWS Inferentia2 | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.وویک گنگاسنی۔ ایمیزون ویب سروسز میں ایک سینئر مشین لرننگ سلوشنز آرکیٹیکٹ ہیں۔ وہ مشین لرننگ اسٹارٹ اپس کے ساتھ کام کرتا ہے تاکہ AWS پر AI/ML ایپلیکیشنز کی تعمیر اور تعیناتی کی جا سکے۔ اس کی توجہ فی الحال MLOps، ML inference، اور Low-code ML کے حل فراہم کرنے پر ہے۔ اس نے مختلف ڈومینز میں پراجیکٹس پر کام کیا ہے، جن میں نیچرل لینگویج پروسیسنگ اور کمپیوٹر ویژن شامل ہیں۔

Maximize Stable Diffusion performance and lower inference costs with AWS Inferentia2 | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.کے سی تنگ AWS اناپورنا لیبز میں ایک سینئر حل آرکیٹیکٹ ہے۔ وہ بڑے گہرے سیکھنے کے ماڈل کی تربیت اور کلاؤڈ میں پیمانے پر تعیناتی میں مہارت رکھتا ہے۔ انہوں نے پی ایچ ڈی کی ہے۔ ڈلاس میں یونیورسٹی آف ٹیکساس ساؤتھ ویسٹرن میڈیکل سینٹر سے مالیکیولر بائیو فزکس میں۔ انہوں نے AWS سمٹ اور AWS Reinvent میں بات کی ہے۔ آج وہ گاہکوں کو AWS کلاؤڈ میں بڑے PyTorch اور TensorFlow ماڈلز کی تربیت اور تعینات کرنے میں مدد کرتا ہے۔ وہ دو کتابوں کے مصنف ہیں: TensorFlow انٹرپرائز سیکھیں۔ اور TensorFlow 2 پاکٹ حوالہ.

Maximize Stable Diffusion performance and lower inference costs with AWS Inferentia2 | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.روپندر گریوال AWS کے ساتھ ایک Sr Ai/ML ماہر حل آرکیٹیکٹ ہے۔ وہ فی الحال SageMaker پر ماڈلز اور MLOps کی خدمت پر توجہ مرکوز کرتا ہے۔ اس کردار سے پہلے وہ مشین لرننگ انجینئر بلڈنگ اور ہوسٹنگ ماڈل کے طور پر کام کر چکے ہیں۔ کام کے علاوہ وہ ٹینس کھیلنا اور پہاڑی پگڈنڈیوں پر بائیک چلانا پسند کرتا ہے۔

ٹائم اسٹیمپ:

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