مضمون جو ترجمو ڪورس جي شروعات جي موقعي تي تيار ڪيو ويو
ڪيترن ئي اعليٰ ڪارڪردگي واري ڪمپيوٽنگ مثالن تي ورهايل ٽريننگ جديد ڊيپ نيورل نيٽ ورڪن جي ٽريننگ جو وقت گھٽائي سگھي ٿي ڊيٽا جي وڏي مقدار تي هفتن کان ڪلاڪن تائين يا ان کان به منٽن تائين، هن تربيتي ٽيڪنڪ کي ڊيپ لرننگ جي عملي ايپليڪيشنن ۾ پکڙيل بڻائي ٿي. صارفين کي سمجهڻ گهرجي ته ڊيٽا کي ڪيئن حصيداري ۽ هم وقت سازي ڪرڻ ڪيترن ئي مثالن ۾، جنهن جي نتيجي ۾ اسڪيلنگ ڪارڪردگي تي وڏو اثر پوي ٿو. ان کان علاوه، صارفين کي پڻ ڄاڻڻ گهرجي ته ڪيئن هڪ ٽريننگ اسڪرپٽ کي ترتيب ڏيڻ جو طريقو آهي جيڪو هڪ واحد مثال تي ڪيترن ئي مثالن تي هلندو آهي.
هن آرٽيڪل ۾ اسان هڪ تيز ۽ آسان طريقي جي باري ۾ ڳالهائينداسين سکيا کي ورهائڻ لاءِ اوپن ڊيپ لرننگ لائبريري Apache MXNet ۽ Horovod distributed learning framework استعمال ڪندي. اسان واضح طور تي هورووڊ فريم ورڪ جي ڪارڪردگي فائدن کي ڏيکارينداسين ۽ ڏيکارينداسين ته ڪيئن لکڻ لاءِ هڪ MXNet ٽريننگ اسڪرپٽ ته جيئن اهو Horovod سان ورهايل طريقي سان ڪم ڪري.
Apache MXNet ڇا آهي
MXNet ۾ ورهايل ٽريننگ پيٽرول سرور سان
Horovod ڇا آهي
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
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 تي گھٽجي ٿي. ساڳئي اسڪيلنگ ڪارڪردگي حاصل ڪرڻ لاءِ جيئن هورووڊ سان، توهان کي ضرورت آهي ته سرور جي تعداد کي ٻيڻو ڪرڻ لاءِ ڪارڪنن جي تعداد جي نسبت.
شڪل 1. MXNet استعمال ڪندي ورهايل سکيا جو مقابلو Horovod سان ۽ پيراميٽر سرور سان
هيٺ ڏنل جدول 1 ۾، اسان 64 GPUs تي تجربا هلائڻ دوران آخري قيمت في مثال جي مقابلي ۾. Horovod سان MXNet استعمال ڪرڻ تمام گھٽ قيمت تي بھترين throughput مهيا ڪري ٿو.
جدول 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. توهان پڻ استعمال ڪري سگهو ٿا
قدم 2
پنهنجي MXNet ٽريننگ اسڪرپٽ ۾ Horovod API سان ڪم ڪرڻ جي صلاحيت شامل ڪريو. هيٺ ڏنل اسڪرپٽ MXNet Gluon API تي ٻڌل هڪ سادي ٽيمپليٽ طور استعمال ڪري سگهجي ٿو. جيڪڏهن توهان وٽ اڳ ۾ ئي لاڳاپيل ٽريننگ اسڪرپٽ آهي ته بولڊ ۾ لائينون گهربل آهن. هتي ڪجھ اهم تبديليون آهن جيڪي توهان کي Horovod سان سکڻ جي ضرورت آهي:
- اهو سمجهڻ لاءِ ته ٽريننگ صحيح گرافڪس ڪور تي ڪئي وئي آهي، مقامي هورووڊ رينج (لائن 8) جي مطابق ترتيب ڏيو.
- ھڪڙي ڪم ڪندڙ کان سڀني تائين ابتدائي پيرا ميٽرز پاس ڪريو (لائن 18) کي يقيني بڻائڻ لاءِ ته سڀئي مزدور ساڳيا ابتدائي پيٽرولن سان شروع ڪن.
- هڪ Horovod ٺاهيو DistributedOptimizer (لائن 25) ورهايل انداز ۾ پيرا ميٽرز کي اپڊيٽ ڪرڻ لاءِ.
مڪمل اسڪرپٽ حاصل ڪرڻ لاءِ، مھرباني ڪري ڏسو Horovod-MXNet مثال
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 ۽ گہرے سکيا سان، وڃو انسٽاليشن واري صفحي تي
جيڪڏهن توهان پهريان ئي MXNet سان ڪم ڪيو آهي ۽ هورووڊ سان ورهايل سکيا جي ڪوشش ڪرڻ چاهيو ٿا، ته پوءِ هڪ نظر وٺو
* قيمت جي بنياد تي حساب ڪيو ويو آهي
ڪورس بابت وڌيڪ ڄاڻو
جو ذريعو: www.habr.com