Apache MXNet اور Horovod کے ساتھ تعلیم کی تقسیم

مضمون کا ترجمہ کورس کے آغاز کے موقع پر تیار کیا گیا تھا۔ "بگ ڈیٹا پر صنعتی ایم ایل"

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

اس مضمون میں ہم اوپن ڈیپ لرننگ لائبریری Apache MXNet اور Horovod تقسیم شدہ لرننگ فریم ورک کا استعمال کرتے ہوئے سیکھنے کو تقسیم کرنے کے ایک تیز اور آسان طریقہ کے بارے میں بات کریں گے۔ ہم Horovod فریم ورک کے کارکردگی کے فوائد کو واضح طور پر ظاہر کریں گے اور یہ ظاہر کریں گے کہ کس طرح ایک MXNet ٹریننگ اسکرپٹ لکھنا ہے تاکہ یہ Horovod کے ساتھ تقسیم شدہ طریقے سے کام کرے۔

Apache MXNet کیا ہے؟

اپاچی ایم ایکس نیٹ ایک اوپن سورس ڈیپ لرننگ فریم ورک ہے جو ڈیپ نیورل نیٹ ورکس بنانے، تربیت دینے اور ان کی تعیناتی کے لیے استعمال ہوتا ہے۔ MXNet نیورل نیٹ ورکس کو لاگو کرنے سے وابستہ پیچیدگیوں کا خلاصہ کرتا ہے، انتہائی پرفارمنس اور توسیع پذیر ہے، اور مقبول پروگرامنگ زبانوں کے لیے APIs پیش کرتا ہے جیسے ازگر, C ++, Clojure, اعلی درجے کا Java, جولیا, R, بڑے پیمانے پر اور دیگر

پیرامیٹر سرور کے ساتھ MXNet میں تقسیم شدہ تربیت

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

Horovod کیا ہے؟

ہورووڈ Uber میں تیار کردہ ایک کھلا تقسیم شدہ ڈیپ لرننگ فریم ورک ہے۔ یہ موثر کراس-GPU اور کراس نوڈ ٹیکنالوجیز کا فائدہ اٹھاتا ہے جیسے NVIDIA Collective Communications Library (NCCL) اور میسج پاسنگ انٹرفیس (MPI) کو تقسیم اور مجموعی ماڈل کے پیرامیٹرز کو مختلف حصوں میں تقسیم کرنے کے لیے۔ یہ نیٹ ورک بینڈوڈتھ کے استعمال کو بہتر بناتا ہے اور گہرے نیورل نیٹ ورک ماڈلز کے ساتھ کام کرتے وقت اچھی طرح اسکیل کرتا ہے۔ یہ فی الحال کئی مشہور مشین لرننگ فریم ورک کو سپورٹ کرتا ہے، یعنی ایم ایکس نیٹ، Tensorflow، Keras، اور PyTorch.

MXNet اور Horovod انضمام

MXNet Horovod میں تقسیم شدہ لرننگ APIs کے ذریعے Horovod کے ساتھ ضم ہوتا ہے۔ Horovod مواصلات APIs horovod.broadcast(), horovod.allgather() и horovod.allreduce() اس کے ٹاسک گراف کے حصے کے طور پر، MXNet انجن کے غیر مطابقت پذیر کال بیکس کا استعمال کرتے ہوئے لاگو کیا گیا ہے۔ اس طرح، کمیونیکیشن اور کمپیوٹیشن کے درمیان ڈیٹا انحصار آسانی سے MXNet انجن کے ذریعے سنبھالا جاتا ہے تاکہ ہم آہنگی کی وجہ سے کارکردگی کے نقصانات سے بچا جا سکے۔ تقسیم شدہ آپٹیمائزر آبجیکٹ کی وضاحت ہورووڈ میں کی گئی ہے۔ horovod.DistributedOptimizer پھیلتا ہے کی اصلاح کار MXNet میں تاکہ یہ تقسیم شدہ پیرامیٹر اپ ڈیٹس کے لیے متعلقہ Horovod APIs کو کال کرے۔ نفاذ کی یہ تمام تفصیلات آخری صارفین کے لیے شفاف ہیں۔

تیز شروعات

آپ اپنے MacBook پر MXNet اور Horovod کا استعمال کرتے ہوئے MNIST ڈیٹاسیٹ پر ایک چھوٹے سے convolutional neural نیٹ ورک کی تربیت تیزی سے شروع کر سکتے ہیں۔
پہلے PyPI سے mxnet اور horovod انسٹال کریں:

pip install mxnet
pip install horovod

نوٹ: اگر آپ کے دوران کسی غلطی کا سامنا کرنا پڑتا ہے۔ پائپ انسٹال horovodشاید آپ کو ایک متغیر شامل کرنے کی ضرورت ہے۔ MACOSX_DEPLOYMENT_TARGET=10.vvجہاں vv - یہ آپ کے MacOS ورژن کا ورژن ہے، مثال کے طور پر، MacOSX Sierra کے لیے آپ کو لکھنا ہوگا۔ MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

پھر اوپن ایم پی آئی انسٹال کریں۔ اس وجہ سے.

آخر میں، ٹیسٹ اسکرپٹ ڈاؤن لوڈ کریں۔ mxnet_mnist.py اس وجہ سے اور ورکنگ ڈائرکٹری میں MacBook ٹرمینل میں درج ذیل کمانڈز چلائیں۔

mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py

یہ آپ کے پروسیسر کے دو کور پر ٹریننگ چلائے گا۔ آؤٹ پٹ مندرجہ ذیل ہو گا:

INFO:root:Epoch[0] Batch [0-50] Speed: 2248.71 samples/sec      accuracy=0.583640
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.89 samples/sec      accuracy=0.882812
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.39 samples/sec      accuracy=0.870000

کارکردگی کا ڈیمو

آٹھ مثالوں کے ساتھ 50 GPUs پر امیج نیٹ ڈیٹاسیٹ پر ResNet1-v64 ماڈل کی تربیت کرتے وقت p3.16x بڑا EC2، ہر ایک AWS کلاؤڈ پر 8 NVIDIA Tesla V100 GPUs پر مشتمل ہے، ہم نے 45000 امیجز/سیکنڈ (یعنی تربیت یافتہ نمونوں کی تعداد فی سیکنڈ) کی تربیت حاصل کی۔ 44% کی بہترین درستگی کے ساتھ 90 دوروں کے بعد 75.7 منٹ میں تربیت مکمل ہوئی۔

ہم نے اس کا موازنہ 8، 16، 32 اور 64 GPUs پر پیرامیٹر سرورز استعمال کرنے کے MXNet کے تقسیم شدہ ٹریننگ اپروچ سے کیا جس میں ایک پیرامیٹر سرور اور ایک سرور ٹو ورکر تناسب بالترتیب 1 سے 1 اور 2 سے 1 ہے۔ آپ نیچے تصویر 1 میں نتیجہ دیکھ سکتے ہیں۔ بائیں جانب y-axis پر، سلاخیں فی سیکنڈ ٹریننگ کے لیے امیجز کی تعداد کی نمائندگی کرتی ہیں، لکیریں دائیں جانب y-axis پر اسکیلنگ کی کارکردگی (یعنی مثالی تھرو پٹ کا اصل تناسب) کی عکاسی کرتی ہیں۔ جیسا کہ آپ دیکھ سکتے ہیں، سرورز کی تعداد کا انتخاب اسکیلنگ کی کارکردگی کو متاثر کرتا ہے۔ اگر صرف ایک پیرامیٹر سرور ہے، تو اسکیلنگ کی کارکردگی 38 GPUs پر 64% تک گر جاتی ہے۔ Horovod کی طرح اسکیلنگ کی کارکردگی کو حاصل کرنے کے لیے، آپ کو سرورز کی تعداد کو کارکنوں کی تعداد سے دوگنا کرنے کی ضرورت ہے۔

Apache MXNet اور Horovod کے ساتھ تعلیم کی تقسیم
شکل 1. Horovod اور پیرامیٹر سرور کے ساتھ MXNet کا استعمال کرتے ہوئے تقسیم شدہ سیکھنے کا موازنہ

ذیل میں جدول 1 میں، ہم 64 GPUs پر تجربات کرتے وقت فی مثال حتمی قیمت کا موازنہ کرتے ہیں۔ Horovod کے ساتھ MXNet کا استعمال سب سے کم قیمت پر بہترین تھرو پٹ فراہم کرتا ہے۔

Apache MXNet اور Horovod کے ساتھ تعلیم کی تقسیم
جدول 1۔ ہورووڈ اور پیرامیٹر سرور کے درمیان لاگت کا موازنہ جس میں سرور سے کارکن کا تناسب 2 سے 1 ہے۔

دوبارہ پیدا کرنے کے اقدامات

اگلے مراحل میں، ہم آپ کو دکھائیں گے کہ MXNet اور Horovod کا استعمال کرتے ہوئے تقسیم شدہ تربیت کے نتائج کو کیسے دوبارہ تیار کیا جائے۔ MXNet کے ساتھ تقسیم شدہ سیکھنے کے بارے میں مزید جاننے کے لیے پڑھیں یہ پوسٹ.

1 مرحلہ

تقسیم شدہ سیکھنے کو استعمال کرنے کے لیے MXNet ورژن 1.4.0 یا اس سے زیادہ اور Horovod ورژن 0.16.0 یا اس سے زیادہ کے ساتھ یکساں مثالوں کا ایک کلسٹر بنائیں۔ آپ کو GPU ٹریننگ کے لیے لائبریریاں بھی انسٹال کرنے کی ضرورت ہوگی۔ اپنی مثالوں کے لیے، ہم نے GPU ڈرائیور 16.04، CUDA 396.44، cuDNN 9.2 لائبریری، NCCL 7.2.1 کمیونیکیٹر اور OpenMPI 2.2.13 کے ساتھ Ubuntu 3.1.1 Linux کا انتخاب کیا۔ آپ بھی استعمال کر سکتے ہیں۔ ایمیزون ڈیپ لرننگ AMIجہاں یہ لائبریریاں پہلے سے نصب ہیں۔

2 مرحلہ

Horovod API کے ساتھ کام کرنے کی صلاحیت کو اپنے MXNet ٹریننگ اسکرپٹ میں شامل کریں۔ MXNet Gluon API پر مبنی درج ذیل اسکرپٹ کو ایک سادہ ٹیمپلیٹ کے طور پر استعمال کیا جا سکتا ہے۔ اگر آپ کے پاس پہلے سے ہی متعلقہ تربیتی اسکرپٹ ہے تو بولڈ میں لائنوں کی ضرورت ہے۔ ہورووڈ کے ساتھ سیکھنے کے لیے آپ کو چند اہم تبدیلیاں کرنے کی ضرورت ہے:

  • سیاق و سباق کو مقامی ہورووڈ رینک (لائن 8) کے مطابق ترتیب دیں تاکہ یہ سمجھ سکیں کہ تربیت صحیح گرافکس کور پر کی جاتی ہے۔
  • ایک کارکن سے تمام (لائن 18) کو ابتدائی پیرامیٹرز منتقل کریں تاکہ یہ یقینی بنایا جا سکے کہ تمام کارکن ایک ہی ابتدائی پیرامیٹرز کے ساتھ شروع کریں۔
  • ایک Horovod بنائیں DistributedOptimizer (لائن 25) تقسیم شدہ طریقے سے پیرامیٹرز کو اپ ڈیٹ کرنے کے لیے۔

مکمل اسکرپٹ حاصل کرنے کے لیے، براہ کرم Horovod-MXNet کی مثالیں دیکھیں MNIST и تصویری نیٹ.

1  import mxnet as mx
2  import horovod.mxnet as hvd
3
4  # Horovod: initialize Horovod
5  hvd.init()
6
7  # Horovod: pin a GPU to be used to local rank
8  context = mx.gpu(hvd.local_rank())
9
10 # Build model
11 model = ...
12
13 # Initialize parameters
14 model.initialize(initializer, ctx=context)
15 params = model.collect_params()
16
17 # Horovod: broadcast parameters
18 hvd.broadcast_parameters(params, root_rank=0)
19
20 # Create optimizer
21 optimizer_params = ...
22 opt = mx.optimizer.create('sgd', **optimizer_params)
23
24 # Horovod: wrap optimizer with DistributedOptimizer
25 opt = hvd.DistributedOptimizer(opt)
26
27 # Create trainer and loss function
28 trainer = mx.gluon.Trainer(params, opt, kvstore=None)
29 loss_fn = ...
30
31 # Train model
32 for epoch in range(num_epoch):
33    ...

3 مرحلہ

MPI ہدایت کا استعمال کرتے ہوئے تقسیم شدہ تربیت شروع کرنے کے لیے کارکنان میں سے کسی میں لاگ ان کریں۔ اس مثال میں، تقسیم شدہ تربیت چار مثالوں پر 4 GPUs کے ساتھ چلتی ہے، اور کلسٹر میں کل 16 GPUs۔ Stochastic Gradient Descent (SGD) آپٹیمائزر کو درج ذیل ہائپر پیرامیٹر کے ساتھ استعمال کیا جائے گا:

  • منی بیچ کا سائز: 256
  • سیکھنے کی شرح: 0.1
  • رفتار: 0.9
  • وزن میں کمی: 0.0001

جیسا کہ ہم نے ایک GPU سے 64 GPUs تک سکیل کیا، ہم نے GPUs کی تعداد کے مطابق تربیت کی شرح کو خطی طور پر پیمانہ کیا (0,1 GPU کے لیے 1 سے 6,4 GPUs کے لیے 64 تک)، جبکہ فی GPU تصاویر کی تعداد 256 پر رکھتے ہوئے 256 GPU کے لیے 1 تصاویر 16 GPUs کے لیے 384 تک)۔ GPUs کی تعداد میں اضافے کے ساتھ وزن میں کمی اور رفتار کے پیرامیٹرز بدل گئے۔ ہم نے NVIDIA Tesla GPUs کے تعاون سے float64 کیلکولیشنز کو تیز کرنے کے لیے فارورڈ پاس کے لیے float16 ڈیٹا ٹائپ اور گریڈینٹ کے لیے float32 کے ساتھ مخلوط درستگی کی تربیت کا استعمال کیا۔

$ mpirun -np 16 
    -H server1:4,server2:4,server3:4,server4:4 
    -bind-to none -map-by slot 
    -mca pml ob1 -mca btl ^openib 
    python mxnet_imagenet_resnet50.py

حاصل يہ ہوا

اس مضمون میں، ہم نے Apache MXNet اور Horovod کا استعمال کرتے ہوئے تقسیم شدہ ماڈل ٹریننگ کے لیے ایک قابل توسیع نقطہ نظر کو دیکھا۔ ہم نے امیج نیٹ ڈیٹاسیٹ پر پیرامیٹر سرور اپروچ کے مقابلے اسکیلنگ کی کارکردگی اور لاگت کی تاثیر کا مظاہرہ کیا جس پر ResNet50-v1 ماڈل کو تربیت دی گئی تھی۔ ہم نے وہ اقدامات بھی شامل کیے ہیں جنہیں آپ Horovod کا استعمال کرتے ہوئے ملٹی انسٹینس ٹریننگ چلانے کے لیے موجودہ اسکرپٹ میں ترمیم کرنے کے لیے استعمال کر سکتے ہیں۔

اگر آپ ابھی MXNet اور گہری سیکھنے کے ساتھ شروعات کر رہے ہیں، تو تنصیب کے صفحہ پر جائیں۔ MXNeپہلے MXNet بنانے کے لیے۔ ہم مضمون کو پڑھنے کی بھی سختی سے سفارش کرتے ہیں۔ MXNet 60 منٹ میںشروع کرنے کے لیے

اگر آپ پہلے ہی MXNet کے ساتھ کام کر چکے ہیں اور Horovod کے ساتھ تقسیم شدہ سیکھنے کی کوشش کرنا چاہتے ہیں، تو اس پر ایک نظر ڈالیں۔ Horovod تنصیب صفحہ، اسے MXNet سے بنائیں اور مثال کی پیروی کریں۔ MNIST یا تصویری نیٹ.

* لاگت کی بنیاد پر شمار کیا جاتا ہے فی گھنٹہ کی شرح EC2 مثالوں کے لیے AWS

کورس کے بارے میں مزید معلومات حاصل کریں۔ "بگ ڈیٹا پر صنعتی ایم ایل"

ماخذ: www.habr.com

نیا تبصرہ شامل کریں