Chaidh an eadar-theangachadh den artaigil ullachadh air an oidhche ro thoiseach aâ chĂšrsa
Faodaidh trèanadh air a chuairteachadh air iomadh suidheachadh coimpiutaireachd Ă rd-choileanaidh an Ăšine trèanaidh aig lĂŹonraidhean neural domhainn an latha an-diugh a lughdachadh air mòran dĂ ta bho sheachdainean gu uairean no eadhon mionaidean, aâ dèanamh an dòigh trèanaidh seo cumanta ann an cleachdadh practaigeach de ionnsachadh domhainn. Feumaidh luchd-cleachdaidh tuigse fhaighinn air mar as urrainn dhaibh dĂ ta a cho-roinn agus a shioncronachadh thairis air grunn shuidheachaidhean, a bheir buaidh mhòr air èifeachdas sgèileachaidh. A bharrachd air an sin, bu chòir fios a bhith aig luchd-cleachdaidh cuideachd mar a chleachdas iad sgriobt trèanaidh a ruitheas air aon eisimpleir gu iomadh suidheachadh.
San artaigil seo bruidhnidh sinn mu dhòigh luath is furasta air ionnsachadh a sgaoileadh aâ cleachdadh an leabharlann ionnsachaidh domhainn fosgailte Apache MXNet agus frèam ionnsachaidh sgaoilte Horovod. Seallaidh sinn gu soilleir buannachdan coileanaidh frèam Horovod agus seallaidh sinn mar a sgrĂŹobhas sinn sgriobt trèanaidh MXNet gus an obraich e ann an dòigh sgaoilte le Horovod.
Dè a thâ ann an Apache MXNet
na fhrèam ionnsachaidh domhainn fosgailte a thathas aâ cleachdadh gus lĂŹonraidhean domhainn neural a chruthachadh, a thrèanadh agus a chleachdadh. Tha MXNet aâ toirt geĂ rr-chunntas air na iom-fhillteachd a tha co-cheangailte ri bhith aâ buileachadh lĂŹonraidhean neural, tha e fĂŹor ghnĂŹomhach agus so-ruigsinneach, agus aâ tabhann APIan airson cĂ nanan prògramaidh mòr-chòrdte leithid , , , , , , agus feadhainn eile.
Trèanadh air a chuairteachadh ann am MXNet le frithealaiche paramadair
aâ cleachdadh dòigh-obrach frithealaiche paramadair. Bidh e aâ cleachdadh seata de luchd-frithealaidh paramadair gus caiseadan a chruinneachadh bho gach neach-obrach, cruinneachadh a dhèanamh, agus caiseadan Ăšraichte a chuir air ais gu luchd-obrach airson an ath chuairt optimization. Tha a bhith aâ dearbhadh aâ cho-mheas ceart de luchd-frithealaidh gu luchd-obrach na phrĂŹomh dhòigh air sgèileadh èifeachdach. Mura h-eil ann ach aon fhrithealaiche paramadair, is dòcha gu bheil e na bhotal anns an Ă ireamhachadh. Air an lĂ imh eile, ma thèid cus de luchd-frithealaidh a chleachdadh, faodaidh conaltradh mòran gu mòran a h-uile ceangal lĂŹonra a chumail suas.
Dè th' ann an Horovod
na fhrèam ionnsachaidh domhainn sgaoilte fosgailte a chaidh a leasachadh aig Uber. Bidh e aâ cleachdadh theicneòlasan tar-GPU agus tar-nòd èifeachdach leithid Leabharlann Conaltraidh Co-obrachail NVIDIA (NCCL) agus Eadar-aghaidh Teachdaireachd Teachdaireachd (MPI) gus paramadairean modail a sgaoileadh agus a chruinneachadh thar vorecs. Bidh e aâ dèanamh an fheum as fheĂ rr de leud-bann lĂŹonra agus lannan gu math nuair a bhios tu ag obair le modalan lĂŹonra neural domhainn. Tha e an-drĂ sta aâ toirt taic do ghrunn fhrèaman ionnsachaidh inneal mòr-chòrdte, is e sin , Tensorflow, Keras, agus PyTorch.
Amalachadh MXNet agus Horovod
Bidh MXNet aâ fighe a-steach le Horovod tro na APIan Ionnsachaidh Sgaoilte a tha air am mĂŹneachadh ann an Horovod. APIan conaltraidh Horovod horovod.craoladh(), horovod.allgather() и horovod.all lĂšghdachadh() air a chuir an gnĂŹomh le bhith aâ cleachdadh fios air ais asyncronach den einnsean MXNet, mar phĂ irt den ghraf gnĂŹomh aige. San dòigh seo, tha eisimeileachd dĂ ta eadar conaltradh agus Ă ireamhachadh furasta a lĂ imhseachadh leis an einnsean MXNet gus call coileanaidh a sheachnadh mar thoradh air sioncronadh. An nĂŹ optimizer sgaoilte air a mhĂŹneachadh ann an Horovod horovod.DistributedOptimizer a âleudachadh Optimizer ann am MXNet gus an cuir e fios gu na Horovod APIan co-fhreagarrach airson Ăšrachaidhean paramadair sgaoilte. Tha a h-uile mion-fhiosrachadh gnĂŹomhachaidh sin follaiseach don luchd-cleachdaidh deireannach.
Tòiseachadh luath
Faodaidh tu tòiseachadh gu sgiobalta air lĂŹonra neòil convolutional beag a thrèanadh air an stòr-dĂ ta MNIST aâ cleachdadh MXNet agus Horovod air do MacBook.
An toiseach, stĂ laich mxnet agus horovod bho PyPI:
pip install mxnet
pip install horovodNota: Ma thachras tu air mearachd rè pip stĂ ladh horovodis dòcha gu feum thu caochladair a chur ris MACOSX_DEPLOYMENT_TARGET=10.vvcĂ ite vv - is e seo an dreach den dreach MacOS agad, mar eisimpleir, airson MacOSX Sierra feumaidh tu sgrĂŹobhadh MACOSX_DEPLOYMENT_TARGET=10.12 pip aâ stĂ ladh horovod
An uairsin stĂ laich OpenMPI .
Aig an deireadh, luchdaich sÏos an sgriobt deuchainn mxnet_mnist.py agus ruith na h-òrdughan a leanas ann an ceann-uidhe MacBook anns an eòlaire obrach:
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.pyBidh seo aâ ruith trèanadh air dĂ chridhe den phròiseasar agad. Bidh an toradh mar a leanas:
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.870000Demo Coileanaidh
Nuair a bhios tu a âtrèanadh modal ResNet50-v1 air stòr-dĂ ta ImageNet air 64 GPUs le ochd cĂšisean p3.16xlarge EC2, anns gach fear le 8 NVIDIA Tesla V100 GPUs air sgòth AWS, choilean sinn trochur trèanaidh de 45000 ĂŹomhaigh / diog (ie, an Ă ireamh de shamhlaichean trèanaidh gach diog). Trèanadh air a chrĂŹochnachadh ann an 44 mionaidean Ă s deidh 90 epochs le cruinneas as fheĂ rr de 75.7%.
Rinn sinn coimeas eadar seo agus dòigh trèanaidh sgaoilte MXNet a thaobh a bhith aâ cleachdadh frithealaichean paramadair air 8, 16, 32 agus 64 GPUs le aon fhrithealaiche paramadair agus co-mheas frithealaiche gu neach-obrach de 1 gu 1 agus 2 gu 1, fa leth. ChĂŹ thu an toradh ann am Figear 1 gu h-ĂŹosal. Air an y-axis air an taobh chlĂŹ, tha na bĂ raichean aâ riochdachadh an Ă ireamh de dhâ ĂŹomhaighean airson trèanadh gach diog, tha na loidhnichean aâ nochdadh an èifeachd sgèileachaidh (is e sin, an co-mheas de fhĂŹor-thrafail gu fĂŹor mhath) air an y-axis air an taobh cheart. Mar a chĂŹ thu, tha an roghainn air an Ă ireamh de luchd-frithealaidh aâ toirt buaidh air èifeachdas sgèileachaidh. Mura h-eil ann ach aon fhrithealaiche paramadair, bidh an èifeachdas sgèileadh aâ tuiteam gu 38% air 64 GPUs. Gus an aon èifeachdas sgèileachaidh a choileanadh mar a tha le Horovod, feumaidh tu an Ă ireamh de luchd-frithealaidh a dhĂšblachadh an coimeas ris an Ă ireamh de luchd-obrach.

Figear 1. Coimeas eadar ionnsachadh sgaoilte a' cleachdadh MXNet le Horovod agus le frithealaiche paramadair
Ann an ClĂ r 1 gu h-ĂŹosal, bidh sinn aâ dèanamh coimeas eadar aâ chosgais dheireannach gach suidheachadh nuair a bhios sinn aâ ruith dheuchainnean air 64 GPUs. Le bhith aâ cleachdadh MXNet le Horovod bheir e seachad an gluasad as fheĂ rr aig aâ chosgais as ĂŹsle.

ClĂ r 1. Coimeas cosgais eadar Horovod agus Parameter Server le co-mheas frithealaiche gu neach-obrach de 2 gu 1.
Ceumannan airson ath-riochdachadh
Anns na h-ath cheumannan, seallaidh sinn dhut mar a nĂŹ thu ath-riochdachadh air toradh trèanaidh sgaoilte aâ cleachdadh MXNet agus Horovod. Airson barrachd ionnsachadh mu ionnsachadh sgaoilte le MXNet leugh .
ceum 1
Cruthaich cruinneachadh de eisimpleirean aon-ghnèitheach le MXNet dreach 1.4.0 no nas à irde agus Horovod dreach 0.16.0 no nas à irde gus trèanadh sgaoilte a chleachdadh. Feumaidh tu cuideachd na leabharlannan a stà ladh airson trèanadh GPU. Airson ar eisimpleirean, thagh sinn Ubuntu 16.04 Linux, le Draibhear GPU 396.44, CUDA 9.2, leabharlann cuDNN 7.2.1, inneal-conaltraidh NCCL 2.2.13 agus OpenMPI 3.1.1. Faodaidh tu cuideachd a chleachdadh , far a bheil na leabharlannan sin ro-stà laichte mu thrà th.
ceum 2
Cuir ris aâ chomas a bhith ag obair le API Horovod ris an sgriobt trèanaidh MXNet agad. Faodar an sgriobt gu h-ĂŹosal stèidhichte air API MXNet Gluon a chleachdadh mar theamplaid sĂŹmplidh. Tha feum air na loidhnichean ann an clò trom ma tha sgriobt trèanaidh iomchaidh agad mu thrĂ th. Seo beagan atharrachaidhean deatamach a dhâ fheumas tu a dhèanamh gus ionnsachadh le Horovod:
- Suidhich an co-theacsa a rèir Ïre ionadail Horovod (loidhne 8) gus tuigsinn gu bheil trèanadh air a dhèanamh air cridhe grafaigean ceart.
- Cuir seachad crĂŹochan tĂšsail bho aon neach-obrach gu na h-uile (loidhne 18) gus dèanamh cinnteach gu bheil a h-uile neach-obrach aâ tòiseachadh leis na h-aon pharaimearan tĂšsail.
- Cruthaich Horovod Optimizer air a chuairteachadh (loidhne 25) gus na crÏochan Úrachadh ann an dòigh sgaoilte.
Gus an sgriobt slà n fhaighinn, thoir sÚil air eisimpleirean 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 ...ceum 3
Log a-steach gu aon den luchd-obrach gus tòiseachadh air trèanadh sgaoilte aâ cleachdadh an stiĂšireadh MPI. Anns an eisimpleir seo, bidh trèanadh sgaoilte aâ ruith air ceithir suidheachaidhean le 4 GPUs gach fear, agus 16 GPU gu h-iomlan anns aâ bhuidheann. Thèid an optimizer Stochastic Gradient Descent (SGD) a chleachdadh leis na hyperparameters a leanas:
- meud baidse beag: 256
- ĂŹre ionnsachaidh: 0.1
- gluasad: 0.9
- lĂšghdachadh cuideam: 0.0001
Mar a rinn sinn sgèile bho aon GPU gu 64 GPUs, rinn sinn sgèile sreathach air an ĂŹre trèanaidh a rèir an Ă ireamh de GPUs (bho 0,1 airson 1 GPU gu 6,4 airson 64 GPUs), agus sinn aâ cumail an Ă ireamh de dhealbhan airson gach GPU aig 256 (bho bhaidse de 256 ĂŹomhaigh airson 1 GPU gu 16 airson 384 GPUs). Dh'atharraich an lĂšghdachadh cuideim agus crĂŹochan momentum mar a chaidh an Ă ireamh de GPUs suas. Chleachd sinn trèanadh mionaideach measgaichte leis an t-seòrsa dĂ ta float64 airson aâ bhealaich air adhart agus fleòdradh16 airson caiseadan gus an Ă ireamhachadh float32 a luathachadh le taic bho 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.pyco-dhĂšnadh
San artaigil seo, choimhead sinn air dòigh-obrach scalable airson trèanadh modail sgaoilte aâ cleachdadh Apache MXNet agus Horovod. Sheall sinn èifeachdas sgèileachaidh agus cosg-èifeachdas an coimeas ris an dòigh-obrach frithealaiche paramadair air an t-seata dĂ ta ImageNet air an deach am modal ResNet50-v1 a thrèanadh. Tha sinn cuideachd air ceumannan a ghabhail a-steach as urrainn dhut a chleachdadh gus sgriobt a tha ann mu thrĂ th atharrachadh gus trèanadh ioma-ĂŹre a ruith aâ cleachdadh Horovod.
Ma tha thu dĂŹreach aâ tòiseachadh le MXNet agus ionnsachadh domhainn, theirig gu duilleag an stĂ laidh gus MXNet a thogail an toiseach. Tha sinn cuideachd aâ moladh gu lĂ idir an artaigil a leughadh airson tòiseachadh.
Ma tha thu air a bhith ag obair le MXNet mu thrĂ th agus gu bheil thu airson feuchainn ri ionnsachadh sgaoilte le Horovod, thoir sĂšil air , tog e bho MXNet agus lean an eisimpleir no .
* tha cosgais air a thomhas a rèir AWS airson suidheachaidhean EC2
Ionnsaich tuilleadh mun chĂšrsa
Source: www.habr.com
