ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عی

ایمیزون EKS اور ٹارچ تقسیم شدہ لچکدار کے ساتھ تقسیم کی تربیت

ڈسٹری بیوٹڈ ڈیپ لرننگ ماڈل ٹریننگ تیزی سے اہم ہوتی جارہی ہے کیونکہ بہت سی صنعتوں میں ڈیٹا کا سائز بڑھ رہا ہے۔ کمپیوٹر ویژن اور نیچرل لینگویج پروسیسنگ میں بہت سی ایپلی کیشنز کو اب گہرے سیکھنے کے ماڈلز کی تربیت کی ضرورت ہوتی ہے، جو کہ پیچیدگی میں تیزی سے بڑھ رہے ہیں اور اکثر سیکڑوں ٹیرا بائٹس ڈیٹا کے ساتھ تربیت یافتہ ہوتے ہیں۔ اس کے بعد اس طرح کے بڑے ماڈلز کی تربیت کی پیمائش کے لیے ایک وسیع کلاؤڈ انفراسٹرکچر کا استعمال کرنا اہم ہو جاتا ہے۔

ڈیولپرز اوپن سورس فریم ورک کا استعمال کر سکتے ہیں جیسے PyTorch آسانی سے بدیہی ماڈل آرکیٹیکچرز کو ڈیزائن کرنے کے لیے۔ تاہم، آرکیسٹریشن کی پیچیدگی میں اضافے کی وجہ سے ان ماڈلز کی تربیت کو متعدد نوڈس میں پیمانہ کرنا مشکل ہو سکتا ہے۔

تقسیم شدہ ماڈل ٹریننگ بنیادی طور پر دو نمونوں پر مشتمل ہے:

  • ماڈل متوازی - ماڈل کی متوازی تربیت میں، ماڈل خود اتنا بڑا ہے کہ یہ ایک GPU کی یادداشت میں فٹ نہیں ہو سکتا، اور ماڈل کو تربیت دینے کے لیے متعدد GPUs کی ضرورت ہوتی ہے۔ اوپن اے آئی کا GPT-3 ماڈل 175 بلین قابل تربیت پیرامیٹرز (تقریباً 350 جی بی سائز) اس کی ایک اچھی مثال ہے۔
  • ڈیٹا متوازی - ڈیٹا کی متوازی تربیت میں، ماڈل ایک ہی GPU میں رہ سکتا ہے، لیکن چونکہ ڈیٹا اتنا بڑا ہے، اس لیے ماڈل کو تربیت دینے میں دن یا ہفتے لگ سکتے ہیں۔ متعدد GPU نوڈس میں ڈیٹا تقسیم کرنے سے تربیت کا وقت نمایاں طور پر کم ہو سکتا ہے۔

اس پوسٹ میں، ہم PyTorch ماڈلز کا استعمال کرتے ہوئے تربیت دینے کے لیے ایک مثال فن تعمیر فراہم کرتے ہیں۔ ٹارچ تقسیم شدہ لچکدار کا استعمال کرتے ہوئے ایک تقسیم شدہ ڈیٹا متوازی فیشن میں فریم ورک ایمیزون لچکدار کبیرنیٹس سروس (ایمیزون ای کے ایس)۔

شرائط

اس پوسٹ میں رپورٹ کردہ نتائج کو نقل کرنے کے لیے، واحد شرط AWS اکاؤنٹ ہے۔ اس اکاؤنٹ میں، ہم ایک EKS کلسٹر بناتے ہیں اور ایک ایمیزون ایف ایس ایکس لسٹر فائل سسٹم. ہم کنٹینر کی تصاویر کو ایک پر بھی دھکیلتے ہیں۔ ایمیزون لچکدار کنٹینر رجسٹری (ایمیزون ای سی آر) اکاؤنٹ میں ذخیرہ۔ ان اجزاء کو ترتیب دینے کی ہدایات پوری پوسٹ میں ضرورت کے مطابق فراہم کی جاتی ہیں۔

EKS کلسٹرز

Amazon EKS AWS پر Kubernetes ایپلی کیشنز کو چلانے اور اسکیل کرنے کے لیے ایک منظم کنٹینر سروس ہے۔ Amazon EKS کے ساتھ، آپ تازہ ترین کا استعمال کرتے ہوئے تقسیم شدہ تربیتی ملازمتوں کو مؤثر طریقے سے چلا سکتے ہیں۔ ایمیزون لچکدار کمپیوٹ کلاؤڈ (ایمیزون EC2) مثالیں آپ کے اپنے کنٹرول طیارے یا نوڈس کو انسٹال کرنے، چلانے اور برقرار رکھنے کی ضرورت کے بغیر۔ یہ ایک مقبول ہے۔ آرکیسٹریٹر مشین لرننگ (ML) اور AI ورک فلو کے لیے۔ AWS میں ایک عام EKS کلسٹر مندرجہ ذیل شکل کی طرح لگتا ہے۔

ہم نے ایک اوپن سورس پروجیکٹ جاری کیا ہے، AWS DevOps for EKS (aws-do-eks)، جو EKS کلسٹرز کی فراہمی اور تقسیم شدہ تربیتی ملازمتوں کو چلانے کے لیے استعمال میں آسان اور قابل ترتیب اسکرپٹس اور ٹولز کا ایک بڑا مجموعہ فراہم کرتا ہے۔ یہ منصوبہ کے اصولوں کے بعد بنایا گیا ہے فریم ورک کرو: سادگی، لچک، اور عالمگیریت۔ آپ اپنے مطلوبہ کلسٹر کو استعمال کرکے ترتیب دے سکتے ہیں۔ eks.conf فائل کریں اور پھر اسے چلا کر لانچ کریں۔ eks-create.sh سکرپٹ. میں تفصیلی ہدایات دی گئی ہیں۔ GitHub repo.

ٹارچ ڈسٹری بیوٹڈ ایلاسٹک کا استعمال کرتے ہوئے PyTorch ماڈلز کو ٹرین کریں۔

Torch Distributed Elastic (TDE) بڑے پیمانے پر گہرے سیکھنے کے ماڈلز کی تربیت کے لیے ایک مقامی PyTorch لائبریری ہے جہاں دستیابی کی بنیاد پر کمپیوٹ وسائل کو متحرک طور پر پیمانہ کرنا بہت ضروری ہے۔ دی کبرنیٹس کے لیے ٹارچ لچکدار کنٹرولر TDE کے لیے ایک مقامی Kubernetes نفاذ ہے جو TDE کی تربیت کے لیے ضروری پوڈز اور خدمات کے لائف سائیکل کو خود بخود منظم کرتا ہے۔ یہ ضرورت کے مطابق تربیت کے دوران کمپیوٹ وسائل کو متحرک طور پر پیمانہ کرنے کی اجازت دیتا ہے۔ یہ نوڈ کی ناکامی سے ملازمتوں کو بحال کرکے غلطی برداشت کرنے والی تربیت بھی فراہم کرتا ہے۔

اس پوسٹ میں، ہم PyTorch کو تربیت دینے کے اقدامات پر تبادلہ خیال کرتے ہیں۔ EfficientNet-B7 اور ResNet50 ماڈلز کا استعمال کرتے ہوئے تصویری نیٹ TDE کے ساتھ تقسیم شدہ انداز میں ڈیٹا۔ ہم PyTorch استعمال کرتے ہیں۔ DistributedData Parallel API اور Kubernetes TorchElastic کنٹرولر، اور ایک سے زیادہ GPU نوڈس پر مشتمل EKS کلسٹر پر ہماری تربیتی ملازمتیں چلاتے ہیں۔ مندرجہ ذیل خاکہ اس ماڈل کی تربیت کے لیے فن تعمیر کا خاکہ دکھاتا ہے۔

ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عی

TorchElastic for Kubernetes بنیادی طور پر دو اجزاء پر مشتمل ہوتا ہے: TorchElastic Kubernetes Controller (TEC) اور پیرامیٹر سرور (etcd)۔ کنٹرولر تربیتی کاموں کی نگرانی اور انتظام کے لیے ذمہ دار ہے، اور پیرامیٹر سرور تقسیم شدہ مطابقت پذیری اور ہم مرتبہ کی دریافت کے لیے ورکر نوڈس کا ٹریک رکھتا ہے۔

ڈیٹا تک رسائی کے لیے ٹریننگ پوڈز کے لیے، ہمیں ایک مشترکہ ڈیٹا والیوم کی ضرورت ہے جسے ہر پوڈ کے ذریعے لگایا جا سکتا ہے۔ کے ذریعے مشترکہ حجم کے لیے کچھ اختیارات کنٹینر اسٹوریج انٹرفیس (CSI) ڈرائیور شامل ہیں۔ EKS کے لیے AWS DevOps ہیں ایمیزون لچکدار فائل سسٹم (ایمیزون ای ایف ایس) اور FSx لسٹر.

کلسٹر سیٹ اپ

ہماری کلسٹر کنفیگریشن میں، ہم سسٹم پوڈز کے لیے ایک c5.2x بڑی مثال استعمال کرتے ہیں۔ ہم ایک EfficientNet ماڈل کو تربیت دینے کے لیے ورکر پوڈ کے طور پر تین p4d.24x بڑی مثالیں استعمال کرتے ہیں۔ ResNet50 ٹریننگ کے لیے، ہم p3.8xlarge مثالوں کو ورکر پوڈ کے طور پر استعمال کرتے ہیں۔ مزید برآں، ہم اپنے تربیتی ڈیٹا اور نمونے کے نمونے کو ذخیرہ کرنے کے لیے ایک FSx مشترکہ فائل سسٹم استعمال کرتے ہیں۔

AWS p4d.24x بڑی مثالوں سے لیس ہیں۔ لچکدار فیبرک اڈاپٹر (EFA) نوڈس کے درمیان نیٹ ورکنگ فراہم کرنے کے لیے۔ ہم پوسٹ میں بعد میں EFA پر مزید بات کریں گے۔ EFA کے ذریعے مواصلات کو فعال کرنے کے لیے، ہمیں .yaml فائل کے ذریعے کلسٹر سیٹ اپ کو کنفیگر کرنے کی ضرورت ہے۔ ایک مثال کی فائل GitHub مخزن میں فراہم کی جاتی ہے۔

اس .yaml فائل کو مناسب طریقے سے ترتیب دینے کے بعد، ہم GitHub ریپو میں فراہم کردہ اسکرپٹ کا استعمال کرتے ہوئے کلسٹر کو لانچ کر سکتے ہیں:

./eks-create.sh

ملاحظہ کریں GitHub repo تفصیلی ہدایات کے لئے.

p4d.24xlarge اور p3.8xlarge پر ملازمتیں چلانے میں عملی طور پر کوئی فرق نہیں ہے۔ اس پوسٹ میں بیان کردہ اقدامات دونوں کے لیے کام کرتے ہیں۔ فرق صرف p4d.24x بڑی مثالوں پر EFA کی دستیابی ہے۔ ResNet50 جیسے چھوٹے ماڈلز کے لیے، EFA نیٹ ورکنگ کے مقابلے معیاری نیٹ ورکنگ کا تربیت کی رفتار پر کم سے کم اثر پڑتا ہے۔

FSx لسٹر فائل سسٹم کے لیے

FSx اعلی کارکردگی والے کمپیوٹنگ ورک بوجھ کے لیے ڈیزائن کیا گیا ہے اور سالڈ اسٹیٹ ڈرائیو اسٹوریج والیوم کا استعمال کرتے ہوئے ذیلی ملی سیکنڈ لیٹینسی فراہم کرتا ہے۔ ہم نے FSx کا انتخاب کیا کیونکہ اس نے بہتر کارکردگی فراہم کی کیونکہ ہم نے نوڈس کی ایک بڑی تعداد کو سکیل کیا۔ نوٹ کرنے کے لیے ایک اہم تفصیل یہ ہے کہ FSx صرف ایک ہی دستیابی زون میں موجود ہو سکتا ہے۔ لہذا، FSx فائل سسٹم تک رسائی حاصل کرنے والے تمام نوڈس اسی Availability Zone میں FSx فائل سسٹم کے طور پر موجود ہونے چاہئیں۔ اس کو حاصل کرنے کا ایک طریقہ یہ ہے کہ کلسٹر بنانے سے پہلے مخصوص نوڈ گروپس کے لیے کلسٹر .yaml فائل میں متعلقہ دستیابی زون کی وضاحت کریں۔ متبادل طور پر، ہم کلسٹر کے سیٹ اپ ہونے کے بعد ان نوڈس کے لیے آٹو اسکیلنگ گروپ کے نیٹ ورک کے حصے میں ترمیم کر سکتے ہیں، اور اسے واحد سب نیٹ استعمال کرنے تک محدود کر سکتے ہیں۔ یہ آسانی سے Amazon EC2 کنسول پر کیا جا سکتا ہے۔

یہ فرض کرتے ہوئے کہ EKS کلسٹر تیار اور چل رہا ہے، اور Availability Zone کے لیے سب نیٹ ID معلوم ہے، ہم ضروری معلومات فراہم کر کے FSx فائل سسٹم ترتیب دے سکتے ہیں۔ fsx.conf فائل جیسا کہ میں بیان کیا گیا ہے۔ پڑھنا اور چل رہا ہے deploy.sh اسکرپٹ میں fsx فولڈر یہ فائل سسٹم تک رسائی کے لیے صحیح پالیسی اور سیکیورٹی گروپ ترتیب دیتا ہے۔ اسکرپٹ بھی انسٹال کرتا ہے۔ CSI ڈرائیور FSx کے لیے بطور ڈیمون سیٹ۔ آخر میں، ہم ایک واحد .yaml فائل کو لاگو کر کے Kubernetes میں FSx پرسسٹنٹ والیوم کلیم بنا سکتے ہیں:

kubectl apply -f fsx-pvc-dynamic.yaml

یہ دستیابی زون میں ایک FSx فائل سسٹم بناتا ہے۔ fsx.conf فائل، اور ایک مستقل حجم کا دعوی بھی بناتا ہے۔ fsx-pvc، جسے کلسٹر میں کسی بھی پوڈ کے ذریعہ ریڈ رائٹ مینی (RWX) انداز میں لگایا جاسکتا ہے۔

اپنے تجربے میں، ہم نے مکمل ImageNet ڈیٹا استعمال کیا، جس میں 12 کلاسوں میں تقسیم کردہ 1,000 ملین سے زیادہ تربیتی تصاویر ہیں۔ سے ڈیٹا ڈاؤن لوڈ کیا جا سکتا ہے۔ امیج نیٹ ویب سائٹ. اصل TAR بال میں کئی ڈائریکٹریز ہیں، لیکن ہماری ماڈل ٹریننگ کے لیے، ہم صرف اس میں دلچسپی رکھتے ہیں۔ ILSVRC/Data/CLS-LOC/، جس میں شامل ہیں۔ train اور val ذیلی ڈائریکٹریز تربیت سے پہلے، ہمیں تصاویر کو دوبارہ ترتیب دینے کی ضرورت ہے۔ val PyTorch کی طرف سے مطلوبہ ڈائریکٹری ڈھانچے سے ملنے کے لیے ذیلی ڈائرکٹری امیج فولڈر کلاس یہ ایک سادہ کا استعمال کرتے ہوئے کیا جا سکتا ہے ازگر اسکرپٹ اگلے مرحلے میں ڈیٹا کو مستقل حجم میں کاپی کرنے کے بعد۔

ایک سے ڈیٹا کاپی کرنے کے لیے ایمیزون سادہ اسٹوریج سروس (Amazon S3) بالٹی FSx فائل سسٹم میں، ہم ایک Docker امیج بناتے ہیں جس میں اس کام کے لیے اسکرپٹ شامل ہوتے ہیں۔ ایک مثال Dockerfile اور ایک شیل اسکرپٹ میں شامل ہیں۔ سی ایس آئی GitHub ریپو کے اندر فولڈر۔ ہم استعمال کرکے تصویر بنا سکتے ہیں۔ build.sh اسکرپٹ اور پھر اسے استعمال کرتے ہوئے ایمیزون ای سی آر پر دھکیلیں۔ push.sh سکرپٹ. ان اسکرپٹس کو استعمال کرنے سے پہلے، ہمیں ECR ریپوزٹری کے لیے صحیح URI فراہم کرنے کی ضرورت ہے۔ .env GitHub ریپو کے روٹ فولڈر میں فائل۔ Docker امیج کو Amazon ECR پر دھکیلنے کے بعد، ہم متعلقہ .yaml فائل کو لاگو کر کے ڈیٹا کو کاپی کرنے کے لیے ایک پوڈ لانچ کر سکتے ہیں:

kubectl apply -f fsx-data-prep-pod.yaml

پوڈ خود بخود اسکرپٹ چلاتا ہے۔ data-prep.sh ایمیزون S3 سے ڈیٹا کو مشترکہ والیوم میں کاپی کرنے کے لیے۔ چونکہ امیج نیٹ ڈیٹا میں 12 ملین سے زیادہ فائلیں ہیں، اس لیے کاپی کے عمل میں چند گھنٹے لگتے ہیں۔ پائتھن اسکرپٹ imagenet_data_prep.py کو دوبارہ ترتیب دینے کے لیے بھی چلایا جاتا ہے۔ val ڈیٹا سیٹ جیسا کہ PyTorch کی توقع ہے۔

نیٹ ورک ایکسلریشن

ہم لچکدار فیبرک اڈاپٹر (EFA) کے ساتھ مل کر استعمال کر سکتے ہیں۔ تائید شدہ EC2 مثال کی اقسام اپنے کلسٹر میں GPU نوڈس کے درمیان نیٹ ورک ٹریفک کو تیز کرنے کے لیے۔ یہ اس وقت کارآمد ثابت ہو سکتا ہے جب بڑی تقسیم شدہ تربیتی ملازمتیں چل رہی ہوں جہاں معیاری نیٹ ورک کمیونیکیشن ایک رکاوٹ ہو سکتی ہے۔ EKS کلسٹر میں EFA ڈیوائس پلگ ان کو تعینات کرنے اور جانچنے کے لیے اسکرپٹ جو ہم یہاں استعمال کرتے ہیں اس میں شامل ہیں efa-device-plugin GitHub ریپو میں فولڈر۔ اپنے EKS کلسٹر میں EFA کے ساتھ کسی کام کو فعال کرنے کے لیے، ضروری ہارڈ ویئر اور سافٹ ویئر رکھنے والے کلسٹر نوڈس کے علاوہ، EFA ڈیوائس پلگ ان کو کلسٹر میں تعینات کرنے کی ضرورت ہے، اور آپ کے جاب کنٹینر میں CUDA اور NCCL کے موافق ہونا ضروری ہے۔ ورژن انسٹال

NCCL ٹیسٹ چلانے اور p4d.24x بڑی مثالوں پر EFA کی کارکردگی کا جائزہ لینے کے لیے، ہمیں سب سے پہلے اسی کو چلا کر Kubeflow MPI آپریٹر کو تعینات کرنا چاہیے۔ deploy.sh اسکرپٹ میں ایم پی آئی آپریٹر فولڈر پھر ہم چلاتے ہیں deploy.sh سکرپٹ اور اپ ڈیٹ test-efa-nccl.yaml وسائل کے لیے حدیں اور درخواستیں ظاہر کریں۔ vpc.amazonaws.com 4 پر سیٹ ہیں۔ p4d.24xlarge نوڈس میں دستیاب چار EFA اڈاپٹر زیادہ سے زیادہ تھرو پٹ فراہم کرنے کے لیے ایک ساتھ بنڈل ہو جاتے ہیں۔

رن kubectl apply -f ./test-efa-nccl.yaml ٹیسٹ لاگو کرنے کے لیے اور پھر ٹیسٹ پوڈ کے لاگز کو ڈسپلے کریں۔ لاگ آؤٹ پٹ میں درج ذیل لائن اس بات کی تصدیق کرتی ہے کہ EFA استعمال ہو رہا ہے:

NCCL INFO NET/OFI Selected Provider is efa

ٹیسٹ کے نتائج درج ذیل آؤٹ پٹ سے ملتے جلتے نظر آنے چاہئیں:

[1,0]<stdout>:#                                                       out-of-place                       in-place
[1,0]<stdout>:#       size         count      type   redop     time   algbw   busbw  error     time   algbw   busbw  error
[1,0]<stdout>:#        (B)    (elements)                       (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
[1,0]<stdout>:           8             2     float     sum    629.7    0.00    0.00  2e-07    631.4    0.00    0.00  1e-07
[1,0]<stdout>:          16             4     float     sum    630.5    0.00    0.00  1e-07    628.1    0.00    0.00  1e-07
[1,0]<stdout>:          32             8     float     sum    627.6    0.00    0.00  1e-07    628.2    0.00    0.00  1e-07
[1,0]<stdout>:          64            16     float     sum    633.6    0.00    0.00  1e-07    628.4    0.00    0.00  6e-08
[1,0]<stdout>:         128            32     float     sum    627.5    0.00    0.00  6e-08    632.0    0.00    0.00  6e-08
[1,0]<stdout>:         256            64     float     sum    634.5    0.00    0.00  6e-08    636.5    0.00    0.00  6e-08
[1,0]<stdout>:         512           128     float     sum    634.8    0.00    0.00  6e-08    635.2    0.00    0.00  6e-08
[1,0]<stdout>:        1024           256     float     sum    646.6    0.00    0.00  2e-07    643.6    0.00    0.00  2e-07
[1,0]<stdout>:        2048           512     float     sum    745.0    0.00    0.01  5e-07    746.0    0.00    0.01  5e-07
[1,0]<stdout>:        4096          1024     float     sum    958.2    0.00    0.01  5e-07    955.8    0.00    0.01  5e-07
[1,0]<stdout>:        8192          2048     float     sum    963.0    0.01    0.02  5e-07    954.5    0.01    0.02  5e-07
[1,0]<stdout>:       16384          4096     float     sum    955.0    0.02    0.03  5e-07    955.5    0.02    0.03  5e-07
[1,0]<stdout>:       32768          8192     float     sum    975.5    0.03    0.06  5e-07   1009.0    0.03    0.06  5e-07
[1,0]<stdout>:       65536         16384     float     sum   1353.4    0.05    0.09  5e-07   1343.5    0.05    0.09  5e-07
[1,0]<stdout>:      131072         32768     float     sum   1395.9    0.09    0.18  5e-07   1392.6    0.09    0.18  5e-07
[1,0]<stdout>:      262144         65536     float     sum   1476.7    0.18    0.33  5e-07   1536.3    0.17    0.32  5e-07
[1,0]<stdout>:      524288        131072     float     sum   1560.3    0.34    0.63  5e-07   1568.3    0.33    0.63  5e-07
[1,0]<stdout>:     1048576        262144     float     sum   1599.2    0.66    1.23  5e-07   1595.3    0.66    1.23  5e-07
[1,0]<stdout>:     2097152        524288     float     sum   1671.1    1.25    2.35  5e-07   1672.5    1.25    2.35  5e-07
[1,0]<stdout>:     4194304       1048576     float     sum   1785.1    2.35    4.41  5e-07   1780.3    2.36    4.42  5e-07
[1,0]<stdout>:     8388608       2097152     float     sum   2133.6    3.93    7.37  5e-07   2135.0    3.93    7.37  5e-07
[1,0]<stdout>:    16777216       4194304     float     sum   2650.9    6.33   11.87  5e-07   2649.9    6.33   11.87  5e-07
[1,0]<stdout>:    33554432       8388608     float     sum   3422.0    9.81   18.39  5e-07   3478.7    9.65   18.09  5e-07
[1,0]<stdout>:    67108864      16777216     float     sum   4783.2   14.03   26.31  5e-07   4782.6   14.03   26.31  5e-07
[1,0]<stdout>:   134217728      33554432     float     sum   7216.9   18.60   34.87  5e-07   7240.9   18.54   34.75  5e-07
[1,0]<stdout>:   268435456      67108864     float     sum    12738   21.07   39.51  5e-07    12802   20.97   39.31  5e-07
[1,0]<stdout>:   536870912     134217728     float     sum    24375   22.03   41.30  5e-07    24403   22.00   41.25  5e-07
[1,0]<stdout>:  1073741824     268435456     float     sum    47904   22.41   42.03  5e-07    47893   22.42   42.04  5e-07
[1,4]<stdout>:test-efa-nccl-worker-0:33:33 [4] NCCL INFO comm 0x7fd4a0000f60 rank 4 nranks 16 cudaDev 4 busId 901c0 - Destroy COMPLETE
[1,0]<stdout>:# Out of bounds values : 0 OK
[1,0]<stdout>:# Avg bus bandwidth    : 8.23785

ہم ٹیسٹ کے نتائج میں مشاہدہ کر سکتے ہیں کہ زیادہ سے زیادہ تھرو پٹ تقریباً 42 GB/sec ہے اور اوسط بس بینڈوتھ تقریباً 8 GB ہے۔

ہم نے ایک واحد EFA اڈاپٹر فعال ہونے کے ساتھ ساتھ EFA اڈاپٹر کے ساتھ بھی تجربات کیے ہیں۔ تمام نتائج کا خلاصہ درج ذیل جدول میں کیا گیا ہے۔

EFA اڈاپٹرز کی تعداد Net/OFI منتخب فراہم کنندہ اوسط بینڈوتھ (GB/s) زیادہ سے زیادہ بینڈوتھ (GB/s)
4 EFA 8.24 42.04
1 EFA 3.02 5.89
0 ساکٹ 0.97 2.38

ہم نے یہ بھی پایا کہ امیج نیٹ جیسے نسبتاً چھوٹے ماڈلز کے لیے، تیز نیٹ ورکنگ کا استعمال فی زمانہ تربیت کا وقت صرف 5-8 فیصد کے ساتھ 64 کے بیچ سائز میں کم کرتا ہے۔ ، تیز نیٹ ورکنگ کے استعمال سے زیادہ اثر پڑتا ہے۔ ہم نے بیچ سائز 15 کے ساتھ EfficientNet-B18 کی تربیت کے لیے 7-1% کے ساتھ دور کی تربیت کے وقت میں کمی دیکھی۔ آپ کی تربیت پر EFA کا اصل اثر آپ کے ماڈل کے سائز پر منحصر ہوگا۔

GPU نگرانی

تربیتی کام چلانے سے پہلے، ہم بھی ترتیب دے سکتے ہیں۔ ایمیزون کلاؤڈ واچ تربیت کے دوران GPU کے استعمال کو دیکھنے کے لیے میٹرکس۔ یہ جاننا مددگار ہو سکتا ہے کہ آیا وسائل کا بہترین استعمال کیا جا رہا ہے یا ممکنہ طور پر وسائل کی بھوک اور تربیت کے عمل میں رکاوٹوں کی نشاندہی کی جا رہی ہے۔

CloudWatch کو ترتیب دینے کے لیے متعلقہ اسکرپٹس میں موجود ہیں۔ جی پی یو میٹرکس فولڈر سب سے پہلے، ہم اس کے ساتھ ایک ڈوکر امیج بناتے ہیں۔ amazon-cloudwatch-agent اور nvidia-smi. ہم میں Dockerfile استعمال کر سکتے ہیں gpu-metrics اس تصویر کو بنانے کے لیے فولڈر۔ یہ فرض کرتے ہوئے کہ ECR رجسٹری پہلے سے ہی سیٹ ہے۔ .env پچھلے مرحلے سے فائل، ہم اس کا استعمال کرتے ہوئے تصویر کو بنا اور آگے بڑھا سکتے ہیں۔ build.sh اور push.sh. اس کے بعد، چل رہا ہے deploy.sh اسکرپٹ خود بخود سیٹ اپ مکمل کرتا ہے۔ اس کے ساتھ ایک ڈیمونسیٹ لانچ کرتا ہے۔ amazon-cloudwatch-agent اور مختلف میٹرکس کو CloudWatch پر دھکیلتا ہے۔ GPU میٹرکس کے تحت ظاہر ہوتا ہے۔ CWAgent CloudWatch کنسول پر نام کی جگہ۔ باقی کلسٹر میٹرکس کے تحت دکھائے جاتے ہیں۔ ContainerInsights نام کی جگہ

ماڈل ٹریننگ

PyTorch ٹریننگ کے لیے درکار تمام اسکرپٹس میں واقع ہیں۔ لچکدار کام GitHub ریپو میں فولڈر۔ تربیتی کام شروع کرنے سے پہلے، ہمیں چلانے کی ضرورت ہے۔ etcd سرور، جسے TEC کارکن کی دریافت اور پیرامیٹر کے تبادلے کے لیے استعمال کرتا ہے۔ دی deploy.sh اسکرپٹ میں elasticjob فولڈر بالکل ایسا ہی کرتا ہے۔

p4d.24xlarge مثالوں میں EFA سے فائدہ اٹھانے کے لیے، ہمیں ایک مخصوص Docker امیج استعمال کرنے کی ضرورت ہے جو ایمیزون ای سی آر پبلک گیلری جو EFA کے ذریعے NCCL مواصلات کو سپورٹ کرتا ہے۔ ہمیں صرف اپنے ٹریننگ کوڈ کو اس ڈاکر امیج میں کاپی کرنے کی ضرورت ہے۔ دی ڈاکر فائل کے تحت نمونے فولڈر p4d مثالوں پر ٹریننگ جاب چلاتے وقت استعمال کرنے کے لیے ایک تصویر بناتا ہے۔ ہمیشہ کی طرح، ہم استعمال کر سکتے ہیں build.sh اور push.sh تصویر کو بنانے اور آگے بڑھانے کے لیے فولڈر میں اسکرپٹس۔

۔ imagenet-efa.yaml فائل تربیتی کام کی وضاحت کرتی ہے۔ یہ .yaml فائل تربیتی کام کو چلانے کے لیے درکار وسائل مرتب کرتی ہے اور پچھلے حصے میں ترتیب دیے گئے تربیتی ڈیٹا کے ساتھ مستقل حجم کو بھی ماؤنٹ کرتی ہے۔

یہاں چند باتیں قابل توجہ ہیں۔ نقل کی تعداد کو کلسٹر میں دستیاب نوڈس کی تعداد پر سیٹ کیا جانا چاہیے۔ ہمارے معاملے میں، ہم نے اسے 3 پر سیٹ کیا کیونکہ ہمارے پاس تین p4d.24xlarge نوڈس تھے۔ میں imagenet-efa.yaml فائل، nvidia.com/gpu وسائل کے تحت پیرامیٹر اور nproc_per_node کے تحت args فی نوڈ GPUs کی تعداد پر سیٹ ہونا چاہیے، جو p4d.24xlarge کی صورت میں 8 ہے۔ اس کے علاوہ، Python اسکرپٹ کے لیے کارکن کی دلیل فی عمل CPUs کی تعداد کو سیٹ کرتی ہے۔ ہم نے اسے 4 کے لیے چنا ہے کیونکہ، ہمارے تجربات میں، یہ p4d.24x بڑی مثالوں پر چلتے وقت بہترین کارکردگی فراہم کرتا ہے۔ یہ ترتیبات کلسٹر میں دستیاب تمام ہارڈویئر وسائل کے زیادہ سے زیادہ استعمال کے لیے ضروری ہیں۔

جب کام چل رہا ہو، ہم کلسٹر میں موجود تمام GPUs کے لیے CloudWatch میں GPU کے استعمال کا مشاہدہ کر سکتے ہیں۔ کلسٹر میں تین p4d.24xlarge نوڈس کے ساتھ ہماری تربیتی ملازمتوں میں سے ایک کی مثال درج ذیل ہے۔ یہاں ہم نے ہر نوڈ سے ایک GPU منتخب کیا ہے۔ پہلے ذکر کردہ ترتیبات کے ساتھ، کلسٹر میں تمام نوڈس کے لیے دور کے تربیتی مرحلے کے دوران GPU کا استعمال 100% کے قریب ہے۔

ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عی

p50xlarge مثالوں کا استعمال کرتے ہوئے ResNet3.8 ماڈل کی تربیت کے لیے، ہمیں بالکل وہی اقدامات درکار ہیں جو کہ p4d.24xlarge کا استعمال کرتے ہوئے EfficientNet ٹریننگ کے لیے بیان کیے گئے ہیں۔ ہم اسی ڈوکر امیج کو بھی استعمال کر سکتے ہیں۔ جیسا کہ پہلے ذکر کیا گیا ہے، p3.8x بڑی مثالیں EFA سے لیس نہیں ہیں۔ تاہم، ResNet50 ماڈل کے لیے، یہ کوئی اہم خرابی نہیں ہے۔ دی imagenet-fsx.yaml GitHub ریپوزٹری میں فراہم کردہ اسکرپٹ p3.8xlarge نوڈ قسم کے لیے مناسب وسائل کے ساتھ تربیتی کام کو ترتیب دیتا ہے۔ کام FSx فائل سسٹم سے وہی ڈیٹا سیٹ استعمال کرتا ہے۔

GPU اسکیلنگ

ہم نے یہ مشاہدہ کرنے کے لیے کچھ تجربات کیے کہ GPUs کی تعداد میں اضافہ کر کے EfficientNet-B7 ماڈل کے لیے تربیت کا وقت کیسے کم ہوتا ہے۔ ایسا کرنے کے لیے، ہم نے ہر ٹریننگ رن کے لیے اپنی ٹریننگ .yaml فائل میں نقل کی تعداد کو 1 سے 3 کر دیا۔ مکمل امیج نیٹ ڈیٹاسیٹ کا استعمال کرتے ہوئے ہم نے صرف ایک دور کے وقت کا مشاہدہ کیا۔ مندرجہ ذیل اعداد و شمار ہمارے GPU اسکیلنگ کے تجربے کے نتائج دکھاتا ہے۔ سرخ نقطے والی لائن اس بات کی نمائندگی کرتی ہے کہ GPUs کی تعداد میں اضافہ کرکے 8 GPUs کا استعمال کرتے ہوئے تربیت کا وقت کس طرح کم ہونا چاہیے۔ جیسا کہ ہم دیکھ سکتے ہیں، اسکیلنگ توقع کے بالکل قریب ہے۔

ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عی

اسی طرح، ہم نے p50xlarge مثالوں پر ResNet3.8 ٹریننگ کے لیے GPU سکیلنگ پلاٹ حاصل کیا۔ اس معاملے کے لیے، ہم نے اپنی .yaml فائل میں نقلیں 1 سے 4 تک تبدیل کیں۔ اس تجربے کے نتائج درج ذیل تصویر میں دکھائے گئے ہیں۔

ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عی

صاف کرو

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

kubectl delete -f fsx-pvc-dynamic.yaml
./delete.sh

نوٹ کریں کہ یہ نہ صرف مستقل والیوم کو حذف کر دے گا، بلکہ یہ FSx فائل سسٹم کو بھی حذف کر دے گا، اور فائل سسٹم کا تمام ڈیٹا ضائع ہو جائے گا۔ جب یہ مرحلہ مکمل ہوجاتا ہے، تو ہم درج ذیل اسکرپٹ کو استعمال کرکے کلسٹر کو حذف کرسکتے ہیں۔ ایکس فولڈر:

./eks-delete.sh

یہ تمام موجودہ پوڈز کو حذف کر دے گا، کلسٹر کو ہٹا دے گا، اور شروع میں بنائے گئے VPC کو حذف کر دے گا۔

نتیجہ

اس پوسٹ میں، ہم نے EKS کلسٹرز پر PyTorch تقسیم شدہ ڈیٹا متوازی ماڈل ٹریننگ چلانے کے لیے درکار اقدامات کی تفصیل دی ہے۔ یہ کام مشکل لگ سکتا ہے، لیکن EKS کے لیے AWS DevOps AWS میں ML Frameworks ٹیم کی طرف سے تیار کردہ پروجیکٹ تمام ضروری اسکرپٹس اور ٹولز فراہم کرتا ہے تاکہ عمل کو آسان بنایا جا سکے اور تقسیم شدہ ماڈل ٹریننگ کو آسانی سے قابل رسائی بنایا جا سکے۔

اس پوسٹ میں استعمال ہونے والی ٹیکنالوجیز کے بارے میں مزید معلومات کے لیے، ملاحظہ کریں۔ ایمیزون ای کے ایس اور ٹارچ تقسیم شدہ لچکدار. ہم آپ کی حوصلہ افزائی کرتے ہیں کہ یہاں بیان کردہ نقطہ نظر کو آپ کے اپنے تقسیم شدہ تربیتی استعمال کے معاملات پر لاگو کریں۔

وسائل


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

ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عیعمران یونس AWS میں ML Frameworks ٹیم کے لیے پرنسپل سلوشنز آرکیٹیکٹ ہیں۔ وہ AWS سروسز جیسے Amazon EKS اور AWS ParallelCluster میں بڑے پیمانے پر مشین لرننگ اور گہری سیکھنے کے کام کے بوجھ پر توجہ مرکوز کرتا ہے۔ اسے کمپیوٹر وژن اور انڈسٹریل IoT میں گہری جھکاؤ کی ایپلی کیشنز کا وسیع تجربہ ہے۔ عمران نے ہائی انرجی پارٹیکل فزکس میں پی ایچ ڈی کی ڈگری حاصل کی جہاں وہ پیٹا بائٹ اسکیلز پر تجرباتی ڈیٹا کا تجزیہ کرنے میں شامل رہے۔

ایمیزون ای کے ایس اور ٹارچ کے ساتھ تقسیم شدہ تربیتی لچکدار پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عیالیکس ایانکولسکی ایک مکمل اسٹیک سافٹ ویئر اور انفراسٹرکچر آرکیٹیکٹ ہے جو گہرا، ہاتھ سے کام کرنا پسند کرتا ہے۔ وہ فی الحال AWS میں سیلف مینیجڈ مشین لرننگ کے لیے پرنسپل سلوشنز آرکیٹیکٹ ہیں۔ اپنے کردار میں وہ کنٹینر سے چلنے والی AWS خدمات پر ML اور AI کام کے بوجھ کے کنٹینرائزیشن اور آرکیسٹریشن کے ساتھ صارفین کی مدد کرنے پر توجہ مرکوز کرتا ہے۔ وہ اوپن سورس کے مصنف بھی ہیں۔ فریم ورک کریں۔ اور ایک ڈوکر کپتان جو دنیا کے سب سے بڑے چیلنجز کو حل کرتے ہوئے اختراع کی رفتار کو تیز کرنے کے لیے کنٹینر ٹیکنالوجیز کا اطلاق کرنا پسند کرتا ہے۔ گزشتہ 10 سالوں کے دوران، الیکس نے موسمیاتی تبدیلیوں کا مقابلہ کرنے، AI اور ML کو جمہوری بنانے، سفر کو محفوظ بنانے، صحت کی دیکھ بھال کو بہتر بنانے اور توانائی کو بہتر بنانے پر کام کیا ہے۔

ٹائم اسٹیمپ:

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