Apache MXNet ۽ Horovod سان ورهايل سکيا

مضمون جو ترجمو ڪورس جي شروعات جي موقعي تي تيار ڪيو ويو "بگ ڊيٽا تي صنعتي ايم ايل"

ڪيترن ئي اعليٰ ڪارڪردگي واري ڪمپيوٽنگ مثالن تي ورهايل ٽريننگ جديد ڊيپ نيورل نيٽ ورڪن جي ٽريننگ جو وقت گھٽائي سگھي ٿي ڊيٽا جي وڏي مقدار تي هفتن کان ڪلاڪن تائين يا ان کان به منٽن تائين، هن تربيتي ٽيڪنڪ کي ڊيپ لرننگ جي عملي ايپليڪيشنن ۾ پکڙيل بڻائي ٿي. صارفين کي سمجهڻ گهرجي ته ڊيٽا کي ڪيئن حصيداري ۽ هم وقت سازي ڪرڻ ڪيترن ئي مثالن ۾، جنهن جي نتيجي ۾ اسڪيلنگ ڪارڪردگي تي وڏو اثر پوي ٿو. ان کان علاوه، صارفين کي پڻ ڄاڻڻ گهرجي ته ڪيئن هڪ ٽريننگ اسڪرپٽ کي ترتيب ڏيڻ جو طريقو آهي جيڪو هڪ واحد مثال تي ڪيترن ئي مثالن تي هلندو آهي.

هن آرٽيڪل ۾ اسان هڪ تيز ۽ آسان طريقي جي باري ۾ ڳالهائينداسين سکيا کي ورهائڻ لاءِ اوپن ڊيپ لرننگ لائبريري Apache MXNet ۽ Horovod distributed learning framework استعمال ڪندي. اسان واضح طور تي هورووڊ فريم ورڪ جي ڪارڪردگي فائدن کي ڏيکارينداسين ۽ ڏيکارينداسين ته ڪيئن لکڻ لاءِ هڪ MXNet ٽريننگ اسڪرپٽ ته جيئن اهو Horovod سان ورهايل طريقي سان ڪم ڪري.

Apache MXNet ڇا آهي

اپوڪي ايم ايڪس اينٽ هڪ اوپن سورس ڊيپ لرننگ فريم ورڪ آهي جيڪو ڊيپ نيورل نيٽ ورڪ ٺاهڻ، ٽريننگ ۽ ڊيپلائي ڪرڻ لاءِ استعمال ڪيو ويندو آهي. MXNet نيورل نيٽ ورڪ کي لاڳو ڪرڻ سان لاڳاپيل پيچيدگين کي ختم ڪري ٿو، انتهائي ڪارڪردگي ۽ اسپيبلبل آهي، ۽ مشهور پروگرامنگ ٻولين لاء APIs پيش ڪري ٿو جهڙوڪ Python, C ++, ڪجوج, جاوا, جوليا, R, Scala ۽ ٻيا.

MXNet ۾ ورهايل ٽريننگ پيٽرول سرور سان

MXNet ۾ معياري ورهايل سکيا ماڊل هڪ پيراميٽر سرور جو طريقو استعمال ڪري ٿو. اهو استعمال ڪري ٿو پيٽرول سرور جو هڪ سيٽ هر ڪم ڪندڙ کان گريجوئيٽ گڏ ڪرڻ لاءِ، مجموعو انجام ڏيڻ، ۽ تازه ڪاري گريڊينٽ موڪلڻ لاءِ ڪارڪنن ڏانهن واپس ايندڙ اصلاح جي ورڇ لاءِ. ڪم ڪندڙن لاءِ سرور جي صحيح تناسب جو تعين ڪرڻ مؤثر اسڪيلنگ جي ڪنجي آھي. جيڪڏهن صرف هڪ پيٽرولر سرور آهي، اهو ٿي سگهي ٿو ته حساب ۾ هڪ رڪاوٽ ٿي سگهي ٿي. برعڪس، جيڪڏهن تمام گھڻا سرور استعمال ڪيا وڃن، گھڻن کان گھڻن رابطي سڀني نيٽ ورڪ ڪنيڪشن کي بند ڪري سگھن ٿا.

Horovod ڇا آهي

هورووڊ اوبر تي ٺهيل هڪ کليل ورهايل ڊيپ لرننگ فريم ورڪ آهي. اهو ڪارائتو ڪراس-GPU ۽ ڪراس-نوڊ ٽيڪنالاجيز جهڙوڪ NVIDIA ڪليڪٽو ڪميونيڪيشن لائبريري (NCCL) ۽ ميسيج پاسنگ انٽرفيس (MPI) کي ورهائڻ ۽ مجموعي ماڊل پيرا ميٽرز کي ورڪس ۾ ورهائي ٿو. اهو نيٽ ورڪ بينڊوڊٿ جي استعمال کي بهتر بڻائي ٿو ۽ چڱي طرح ماپ ڪري ٿو جڏهن گہرے نيورل نيٽ ورڪ ماڊلز سان ڪم ڪري رهيو آهي. اهو في الحال ڪيترن ئي مشهور مشين سکيا فريم ورڪ کي سپورٽ ڪري ٿو، يعني MX نيٽ، Tensorflow، Keras، ۽ PyTorch.

MXNet ۽ Horovod انضمام

MXNet Horovod سان ضم ٿي ويو آهي Distributed Learning APIs ذريعي Horovod ۾ بيان ڪيل. Horovod رابطي APIs horovod.broadcast(), horovod.allgather() и horovod.allreduce() ان جي ٽاسڪ گراف جي حصي جي طور تي، MXNet انجڻ جي غير مطابقت واري ڪال بڪ استعمال ڪندي لاڳو ڪيو ويو. اهڙيءَ طرح، ڪميونيڪيشن ۽ ڪمپيوٽيشن جي وچ ۾ ڊيٽا جي انحصار کي MXNet انجڻ سان آساني سان سنڀاليو وڃي ٿو ته جيئن هم وقت سازي جي ڪري ڪارڪردگيءَ جي نقصان کان بچڻ لاءِ. Horovod ۾ بيان ڪيل ورهايل اصلاحي اعتراض horovod.DistributedOptimizer وڌائي ٿو Optimizer MXNet ۾ ته جيئن اهو ورهايل پيراميٽر اپڊيٽ لاءِ لاڳاپيل Horovod APIs کي سڏي ٿو. انهن سڀني تي عملدرآمد جا تفصيل آخري استعمال ڪندڙن لاءِ شفاف آهن.

تيز شروعات

توھان پنھنجي MacBook تي MXNet ۽ Horovod استعمال ڪندي MNIST ڊيٽا سيٽ تي ھڪڙي ننڍڙي ڪنووليشنل نيورل نيٽ ورڪ کي جلدي تربيت ڏيڻ شروع ڪري سگھو ٿا.
پهريون، PyPI مان mxnet ۽ horovod انسٽال ڪريو:

pip install mxnet
pip install horovod

نوٽ: جيڪڏهن توهان ڪنهن غلطي سان منهن ڪيو pip horovod انسٽالٿي سگهي ٿو توهان کي هڪ variable شامل ڪرڻ جي ضرورت آهي MACOSX_DEPLOYMENT_TARGET=10.vvڪٿي vv - هي توهان جي MacOS ورزن جو نسخو آهي، مثال طور، MacOSX سيرا لاءِ توهان کي لکڻ جي ضرورت پوندي MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

پوءِ انسٽال ڪريو OpenMPI هتي کان.

آخر ۾، ڊائون لوڊ ڪريو ٽيسٽ اسڪرپٽ 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

ڪارڪردگي Demo

جڏهن اٺ مثالن سان 50 GPUs تي هڪ ImageNet ڊيٽا سيٽ تي ResNet1-v64 ماڊل کي تربيت ڏيو p3.16x وڏو EC2، هر هڪ AWS ڪلائوڊ تي 8 NVIDIA Tesla V100 GPUs تي مشتمل آهي، اسان 45000 تصويرن/سيڪنڊ (يعني تربيتي نمونن جو تعداد في سيڪنڊ) جي ٽريننگ ذريعي حاصل ڪئي. ٽريننگ 44 منٽن ۾ 90 دورن کان پوءِ 75.7٪ جي بهترين درستگي سان مڪمل ڪئي وئي.

اسان ان جو مقابلو MXNet جي ورهايل ٽريننگ اپروچ سان ڪيو آهي 8، 16، 32 ۽ 64 GPUs تي پيراميٽر سرور استعمال ڪرڻ جي هڪ واحد پيراميٽر سرور سان ۽ هڪ سرور کان ڪم ڪندڙ تناسب 1 کان 1 ۽ 2 کان 1، ترتيب سان. توھان ھيٺ ڏنل شڪل 1 ۾ نتيجو ڏسي سگھو ٿا. کاٻي پاسي واري y-محور تي، بار في سيڪنڊ ٽرين ڪرڻ لاءِ تصويرن جي تعداد جي نمائندگي ڪن ٿا، لائينون ساڄي پاسي واري y-محور تي اسڪيلنگ ڪارڪردگي (يعني حقيقي ۽ مثالي انپٽ جو تناسب) کي ظاهر ڪن ٿيون. جئين توهان ڏسي سگهو ٿا، سرور جي تعداد جو انتخاب اسڪيلنگ ڪارڪردگي کي متاثر ڪري ٿو. جيڪڏهن صرف هڪ پيٽرولر سرور آهي، اسڪيلنگ ڪارڪردگي 38٪ تي 64 GPUs تي گھٽجي ٿي. ساڳئي اسڪيلنگ ڪارڪردگي حاصل ڪرڻ لاءِ جيئن هورووڊ سان، توهان کي ضرورت آهي ته سرور جي تعداد کي ٻيڻو ڪرڻ لاءِ ڪارڪنن جي تعداد جي نسبت.

Apache MXNet ۽ Horovod سان ورهايل سکيا
شڪل 1. MXNet استعمال ڪندي ورهايل سکيا جو مقابلو Horovod سان ۽ پيراميٽر سرور سان

هيٺ ڏنل جدول 1 ۾، اسان 64 GPUs تي تجربا هلائڻ دوران آخري قيمت في مثال جي مقابلي ۾. Horovod سان MXNet استعمال ڪرڻ تمام گھٽ قيمت تي بھترين throughput مهيا ڪري ٿو.

Apache MXNet ۽ Horovod سان ورهايل سکيا
جدول 1. هورووڊ ۽ پيراميٽر سرور جي وچ ۾ لاڳت جو مقابلو 2 کان 1 جي سرور کان ڪم ڪندڙ تناسب سان.

ٻيهر پيدا ڪرڻ جا قدم

ايندڙ قدمن ۾، اسان توهان کي ڏيکارينداسين ته ڪيئن ورهايل ٽريننگ جو نتيجو MXNet ۽ Horovod استعمال ڪندي. MXNet پڙهڻ سان ورهايل سکيا بابت وڌيڪ سکڻ لاءِ هي پوسٽ.

قدم 1

MXNet ورجن 1.4.0 يا ان کان وڌيڪ ۽ Horovod ورجن 0.16.0 يا ان کان مٿي سان گڏ هڪجهڙائي واري مثالن جو ڪلسٽر ٺاهيو ورهايل سکيا استعمال ڪرڻ لاءِ. توهان کي پڻ GPU ٽريننگ لاءِ لائبريريون نصب ڪرڻ جي ضرورت پوندي. اسان جي مثالن لاءِ، اسان Ubuntu 16.04 لينڪس چونڊيو، GPU ڊرائيور 396.44 سان، CUDA 9.2، cuDNN 7.2.1 لائبريري، NCCL 2.2.13 ڪميونيڪيشن ۽ OpenMPI 3.1.1. توهان پڻ استعمال ڪري سگهو ٿا Amazon Deep Learning AMIجتي اهي لائبريريون اڳ ۾ ئي نصب ٿيل آهن.

قدم 2

پنهنجي MXNet ٽريننگ اسڪرپٽ ۾ Horovod API سان ڪم ڪرڻ جي صلاحيت شامل ڪريو. هيٺ ڏنل اسڪرپٽ MXNet Gluon API تي ٻڌل هڪ سادي ٽيمپليٽ طور استعمال ڪري سگهجي ٿو. جيڪڏهن توهان وٽ اڳ ۾ ئي لاڳاپيل ٽريننگ اسڪرپٽ آهي ته بولڊ ۾ لائينون گهربل آهن. هتي ڪجھ اهم تبديليون آهن جيڪي توهان کي Horovod سان سکڻ جي ضرورت آهي:

  • اهو سمجهڻ لاءِ ته ٽريننگ صحيح گرافڪس ڪور تي ڪئي وئي آهي، مقامي هورووڊ رينج (لائن 8) جي مطابق ترتيب ڏيو.
  • ھڪڙي ڪم ڪندڙ کان سڀني تائين ابتدائي پيرا ميٽرز پاس ڪريو (لائن 18) کي يقيني بڻائڻ لاءِ ته سڀئي مزدور ساڳيا ابتدائي پيٽرولن سان شروع ڪن.
  • هڪ Horovod ٺاهيو DistributedOptimizer (لائن 25) ورهايل انداز ۾ پيرا ميٽرز کي اپڊيٽ ڪرڻ لاءِ.

مڪمل اسڪرپٽ حاصل ڪرڻ لاءِ، مھرباني ڪري ڏسو Horovod-MXNet مثال MNIST и ImageNet.

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

ايم پي آئي جي هدايتن کي استعمال ڪندي ورهايل ٽريننگ شروع ڪرڻ لاءِ ڪارڪنن مان هڪ ۾ لاگ ان ٿيو. هن مثال ۾، ورهايل ٽريننگ چار مثالن تي هلندي آهي 4 GPUs سان هر هڪ، ۽ ڪل 16 GPUs ڪلستر ۾. Stochastic Gradient Descent (SGD) optimizer هيٺين hyperparameters سان استعمال ڪيو ويندو:

  • مني بيچ سائيز: 256
  • سکيا جي شرح: 0.1
  • رفتار: 0.9
  • وزن گھٽائڻ: 0.0001

جيئن اسان هڪ GPU کان 64 GPUs تائين اسڪيل ڪيو، اسان لڪير طور تي ٽريننگ جي شرح کي GPUs جي تعداد جي مطابق وڌايو (0,1 کان 1 GPU لاء 6,4 تائين 64 GPUs لاء)، جڏهن ته في GPU جي تصويرن جو تعداد 256 تي رکيو ويو (جي بيچ کان. 256 تصويرون 1 GPU لاءِ 16 لاءِ 384 GPUs لاءِ). وزن گھٽائڻ ۽ رفتار جي ماپ تبديل ٿي وئي جيئن GPUs جو تعداد وڌايو ويو. اسان float64 ڊيٽا جي قسم سان گڏ مليل درستي واري ٽريننگ استعمال ڪئي فارورڊ پاس لاءِ ۽ float16 لاءِ گريڊيئنٽس کي تيز ڪرڻ لاءِ float32 حسابن کي تيز ڪرڻ لاءِ NVIDIA Tesla GPUs پاران.

$ 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

ٿڪل

هن آرٽيڪل ۾، اسان اپاچي MXNet ۽ Horovod استعمال ڪندي ورهايل ماڊل ٽريننگ لاءِ اسپيبلبل انداز تي غور ڪيو. اسان تصويرنيٽ ڊيٽا سيٽ تي پيراميٽر سرور جي انداز جي مقابلي ۾ اسڪيلنگ جي ڪارڪردگي ۽ قيمت-اثريت جو مظاهرو ڪيو جنهن تي ResNet50-v1 ماڊل کي تربيت ڏني وئي هئي. اسان انهن قدمن کي پڻ شامل ڪيو آهي جيڪي توهان استعمال ڪري سگهو ٿا موجوده اسڪرپٽ کي تبديل ڪرڻ لاءِ Horovod استعمال ڪندي ملٽي-انسٽانس ٽريننگ هلائڻ لاءِ.

جيڪڏهن توهان صرف شروع ڪري رهيا آهيو MXNet ۽ گہرے سکيا سان، وڃو انسٽاليشن واري صفحي تي MXNeپهريون ڀيرو MXNet ٺاهڻ لاء. اسان پڻ سختي سان مضمون پڙهڻ جي صلاح ڏيو ٿا MXNet 60 منٽن ۾شروع ڪرڻ لاءِ.

جيڪڏهن توهان پهريان ئي MXNet سان ڪم ڪيو آهي ۽ هورووڊ سان ورهايل سکيا جي ڪوشش ڪرڻ چاهيو ٿا، ته پوءِ هڪ نظر وٺو Horovod تنصيب صفحو، ان کي MXNet مان ٺاهيو ۽ مثال جي پيروي ڪريو MNIST يا ImageNet.

* قيمت جي بنياد تي حساب ڪيو ويو آهي ڪلاڪ جي شرح EC2 مثالن لاءِ AWS

ڪورس بابت وڌيڪ ڄاڻو "بگ ڊيٽا تي صنعتي ايم ايل"

جو ذريعو: www.habr.com

تبصرو شامل ڪريو