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

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

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

ڈیٹا متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

پائپ لائن متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ٹینسر متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ماہر متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ڈیٹا متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

پائپ لائن متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ٹینسر متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ماہر متوازی

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

تین پرتوں کے ماڈل پر مختلف متوازی حکمت عملیوں کی ایک مثال۔ ہر رنگ ایک پرت سے مراد ہے اور ڈیشڈ لائنیں مختلف GPUs کو الگ کرتی ہیں۔

کوئی متوازی نہیں

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

مختلف متوازی تکنیکیں اس تربیتی عمل کو مختلف جہتوں میں تقسیم کرتی ہیں، بشمول:

  • ڈیٹا متوازی — مختلف GPUs پر بیچ کے مختلف ذیلی سیٹ چلائیں۔
  • پائپ لائن متوازی — مختلف GPUs پر ماڈل کی مختلف پرتیں چلائیں۔
  • ٹینسر متوازی — ایک ہی آپریشن کے لیے ریاضی کو توڑ دیں جیسے کہ میٹرکس ضرب کو GPUs میں تقسیم کیا جانا؛
  • ماہرین کا مرکب—ہر مثال پر ہر پرت کے صرف ایک حصے سے کارروائی کریں۔

(اس پوسٹ میں، ہم فرض کریں گے کہ آپ اپنے نیورل نیٹ ورکس کو تربیت دینے کے لیے GPUs کا استعمال کر رہے ہیں، لیکن وہی خیالات ان لوگوں پر لاگو ہوتے ہیں جو کسی دوسرے کو استعمال کرتے ہیں عصبی نیٹ ورک ایکسلریٹر.)

ڈیٹا متوازی

ڈیٹا متوازی تربیت کا مطلب ہے ایک ہی پیرامیٹرز کو ایک سے زیادہ GPUs میں کاپی کرنا (اکثر "کارکن" کہا جاتا ہے) اور ہر ایک کو بیک وقت کارروائی کرنے کے لیے مختلف مثالیں تفویض کرنا۔ اکیلے ڈیٹا کی ہم آہنگی اب بھی اس بات کی ضرورت ہے کہ آپ کا ماڈل ایک واحد GPU کی میموری میں فٹ ہو، لیکن آپ کو اپنے پیرامیٹرز کی بہت سی ڈپلیکیٹ کاپیاں ذخیرہ کرنے کی قیمت پر بہت سے GPUs کے حساب سے استفادہ کرنے دیتا ہے۔ یہ کہا جا رہا ہے، آپ کے GPU کے لیے دستیاب موثر RAM کو بڑھانے کے لیے حکمت عملی موجود ہیں، جیسے کہ استعمال کے درمیان CPU میموری میں پیرامیٹرز کو عارضی طور پر آف لوڈ کرنا۔

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

پائپ لائن متوازی

ساتھ پائپ لائن متوازی تربیت، ہم ماڈل کے ترتیب وار حصوں کو GPUs میں تقسیم کرتے ہیں۔ ہر GPU میں پیرامیٹرز کا صرف ایک حصہ ہوتا ہے، اور اس طرح ایک ہی ماڈل فی GPU متناسب طور پر کم میموری استعمال کرتا ہے۔

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

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک آگے
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک پس منظر
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک گریڈینٹ اپ ڈیٹ
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک ناقابل یقین
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ایک سادہ پائپ لائن کے متوازی سیٹ اپ کی مثال جہاں ماڈل کو عمودی طور پر پرت کے لحاظ سے 4 پارٹیشنز میں تقسیم کیا گیا ہے۔ ورکر 1 نیٹ ورک کی پہلی پرت (ان پٹ کے قریب ترین) کے ماڈل پیرامیٹرز کی میزبانی کرتا ہے، جب کہ ورکر 4 پرت 4 کی میزبانی کرتا ہے (جو آؤٹ پٹ کے قریب ہے)۔ "F"، "B"، اور "U" بالترتیب آگے، پیچھے اور اپ ڈیٹ آپریشنز کی نمائندگی کرتے ہیں۔ سبسکرپٹس بتاتی ہیں کہ آپریشن کس کارکن پر چلتا ہے۔ ترتیب وار انحصار کی وجہ سے ایک وقت میں ایک کارکن کے ذریعے ڈیٹا پر کارروائی کی جاتی ہے، جس سے بیکار وقت کے بڑے "بلبلے" نکلتے ہیں۔

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

کارکنوں کی تعداد جس پر ماڈل کو تقسیم کیا جاتا ہے اسے عام طور پر جانا جاتا ہے۔ پائپ لائن کی گہرائی.

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

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک آگے
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک پس منظر
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک اپ ڈیٹ کریں
بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک ناقابل یقین
جی پی پائپ

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

الجھا ہوا خؤاب

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

GPipe اور PipeDream پائپ لائننگ اسکیموں کا موازنہ، فی بیچ 4 مائیکرو بیچز کا استعمال کرتے ہوئے۔ مائیکرو بیچس 1-8 لگاتار دو ڈیٹا بیچز کے مساوی ہیں۔ تصویر میں، "(نمبر)" اشارہ کرتا ہے کہ کس مائیکرو بیچ پر آپریشن کیا جاتا ہے اور سبسکرپٹ ورکر ID کو نشان زد کرتا ہے۔ نوٹ کریں کہ پائپ ڈریم باسی پیرامیٹرز کے ساتھ کچھ کمپیوٹیشن کر کے زیادہ کارکردگی حاصل کرتا ہے۔

ٹینسر متوازی

پائپ لائن کی ہم آہنگی ایک ماڈل کو "عمودی طور پر" پرت کے لحاظ سے تقسیم کرتی ہے۔ یہ بھی ممکن ہے کہ "افقی طور پر" کچھ کارروائیوں کو ایک پرت کے اندر تقسیم کیا جائے، جسے عام طور پر کہا جاتا ہے۔ ٹینسر متوازی تربیت. بہت سے جدید ماڈلز کے لیے (جیسے ٹرانسفارمر)، حساب کی رکاوٹ ایک ایکٹیویشن بیچ میٹرکس کو بڑے وزن والے میٹرکس کے ساتھ ضرب دے رہی ہے۔ میٹرکس ضرب قطاروں اور کالموں کے جوڑوں کے درمیان ڈاٹ مصنوعات کے طور پر سوچا جا سکتا ہے؛ مختلف GPUs پر آزاد ڈاٹ پروڈکٹس کی گنتی کرنا، یا مختلف GPUs پر ہر ڈاٹ پروڈکٹ کے حصوں کی گنتی کرنا اور نتائج کا خلاصہ کرنا ممکن ہے۔ کسی بھی حکمت عملی کے ساتھ، ہم وزن والے میٹرکس کو یکساں سائز کے "شارڈز" میں کاٹ سکتے ہیں، ہر ایک شارڈ کو مختلف GPU پر ہوسٹ کر سکتے ہیں، اور نتائج کو یکجا کرنے کے لیے بعد میں بات چیت کرنے سے پہلے مجموعی میٹرکس پروڈکٹ کے متعلقہ حصے کی گنتی کے لیے اس شارڈ کا استعمال کر سکتے ہیں۔

ایک مثال ہے Megatron-LM، جو ٹرانسفارمر کی خود توجہ اور MLP تہوں کے اندر میٹرکس ضرب کو متوازی کرتا ہے۔ PTD-P ٹینسر، ڈیٹا، اور پائپ لائن متوازی استعمال کرتا ہے؛ اس کا پائپ لائن شیڈول ہر ڈیوائس کو متعدد غیر لگاتار تہوں کو تفویض کرتا ہے، جس سے زیادہ نیٹ ورک کمیونیکیشن کی قیمت پر بلبلا اوور ہیڈ کو کم کیا جاتا ہے۔

بعض اوقات نیٹ ورک کے ان پٹ کو کراس کمیونیکیشن کی نسبت متوازی کمپیوٹیشن کی اعلیٰ ڈگری کے ساتھ طول و عرض میں متوازی کیا جا سکتا ہے۔ تسلسل متوازی ایسا ہی ایک آئیڈیا ہے، جہاں ایک ان پٹ تسلسل کو وقت کے ساتھ متعدد ذیلی مثالوں میں تقسیم کیا جاتا ہے، متناسب طور پر زیادہ دانے دار سائز کی مثالوں کے ساتھ کمپیوٹیشن کو آگے بڑھنے کی اجازت دے کر چوٹی میموری کی کھپت کو کم کرتا ہے۔

ماہرین کا مرکب (MoE)

کے ساتہ ماہرین کا مرکب (MoE) نقطہ نظر، نیٹ ورک کا صرف ایک حصہ کسی ایک ان پٹ کے لیے آؤٹ پٹ کی گنتی کے لیے استعمال ہوتا ہے۔ ایک مثالی نقطہ نظر یہ ہے کہ وزن کے بہت سے سیٹ ہوں اور نیٹ ورک یہ انتخاب کر سکتا ہے کہ کس سیٹ کو گیٹنگ میکانزم کے ذریعے استعمال کیا جائے۔ یہ حسابی لاگت میں اضافہ کیے بغیر بہت سے مزید پیرامیٹرز کو قابل بناتا ہے۔ وزن کے ہر سیٹ کو "ماہرین" کہا جاتا ہے، اس امید پر کہ نیٹ ورک ہر ماہر کو خصوصی حساب اور مہارت تفویض کرنا سیکھ لے گا۔ مختلف GPUs پر مختلف ماہرین کی میزبانی کی جا سکتی ہے، جو ماڈل کے لیے استعمال ہونے والے GPUs کی تعداد کو بڑھانے کا واضح طریقہ فراہم کرتے ہیں۔

بڑے اعصابی نیٹ ورکس کو تربیت دینے کی تکنیک

ماہرین کے مرکب (MoE) پرت کی مثال۔ میں سے صرف 2 n ماہرین کا انتخاب گیٹنگ نیٹ ورک کے ذریعے کیا جاتا ہے۔ (تصویر اس سے اخذ کی گئی ہے: Shazeer et al.، 2017)

جی شارڈ ایک اسکیم کے ساتھ ایک MoE ٹرانسفارمر کو 600 بلین پیرامیٹرز تک پیمانہ کرتا ہے جہاں صرف MoE تہوں کو متعدد TPU آلات میں تقسیم کیا جاتا ہے اور دیگر تہوں کو مکمل طور پر نقل کیا جاتا ہے۔ ٹرانسفارمر سوئچ کریں۔ ایک ماہر کو ایک ان پٹ روٹ کر کے ماڈل کے سائز کو کھربوں پیرامیٹرز تک ترازو کرتا ہے۔

دیگر میموری سیونگ ڈیزائنز

تربیت کو تیزی سے بڑے اعصابی نیٹ ورکس کو مزید قابل عمل بنانے کے لیے بہت سی دوسری کمپیوٹیشنل حکمت عملی ہیں۔ مثال کے طور پر:

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

  • مخلوط صحت سے متعلق تربیت کم درستگی والے نمبروں کا استعمال کرتے ہوئے ماڈلز کو تربیت دینا ہے (سب سے زیادہ عام طور پر FP16)۔ جدید ایکسلریٹر کم درستگی والے نمبروں کے ساتھ بہت زیادہ FLOP گنتی تک پہنچ سکتے ہیں، اور آپ ڈیوائس کی RAM پر بھی بچت کرتے ہیں۔ مناسب دیکھ بھال کے ساتھ، نتیجے میں ماڈل تقریبا کوئی درستگی کھو سکتا ہے.

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

  • میموری موثر اصلاح کار کو تجویز کیا گیا ہے کہ آپٹیمائزر کے ذریعہ برقرار چلنے والی حالت کے میموری فوٹ پرنٹ کو کم کریں۔، جیسے اڈافیکٹر.

  • سمپیڑن نیٹ ورک میں انٹرمیڈیٹ نتائج کو ذخیرہ کرنے کے لیے بھی استعمال کیا جا سکتا ہے۔ مثال کے طور پر، جسٹ پسماندہ پاس کے لیے محفوظ کردہ ایکٹیویشنز کو کمپریس کرتا ہے۔ ڈیل ای گریڈیئنٹس کو ہم آہنگ کرنے سے پہلے ان کو کمپریس کرتا ہے۔


OpenAI میں، ہم بنیادی ڈھانچے سے بڑے ماڈلز کو حقیقی دنیا کے مسائل کے لیے تعینات کرنے کے لیے تربیت دے رہے ہیں اور ان کو بہتر بنا رہے ہیں۔ اگر آپ اس پوسٹ کے آئیڈیاز کو عملی جامہ پہنانا چاہتے ہیں - خاص طور پر ہماری اسکیلنگ اور اپلائیڈ ریسرچ ٹیموں کے لیے - ہم بھرتی!


منظوریاں
نکولس ٹیزاک، سیم آلٹ مین، ڈینیئل گیکل، الیا سوٹسکیور، اور اسٹیون ایڈلر کا ڈرافٹ پر تاثرات کے لیے شکریہ۔ مواصلات اور ڈیزائن کے لیے جسٹن جے وانگ، بیانکا مارٹن، اور اسٹیو ڈولنگ کا شکریہ۔

ٹائم اسٹیمپ:

سے زیادہ اوپنائی