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
Trèanadh air a chuairteachadh ann am MXNet le frithealaiche paramadair
Dè th' ann an Horovod
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 horovod
Nota: 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
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Bidh 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.870000
Demo 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 shuidheachaidhean aon-ghnèitheach le dreach MXNet 1.4.0 no nas àirde agus dreach Horovod 0.16.0 no nas àirde gus ionnsachadh sgaoilte a chleachdadh. Feumaidh tu cuideachd leabharlannan a stàladh airson trèanadh GPU. Airson na h-eisimpleirean againn, thagh sinn Ubuntu 16.04 Linux, le GPU Driver 396.44, CUDA 9.2, leabharlann cuDNN 7.2.1, neach-conaltraidh NCCL 2.2.13 agus OpenMPI 3.1.1. Faodaidh tu cuideachd a chleachdadh
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.py
co-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
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
* tha cosgais air a thomhas a rèir
Ionnsaich tuilleadh mun chùrsa
Source: www.habr.com