Ionnsachadh air a chuairteachadh le Apache MXNet agus Horovod

Chaidh an eadar-theangachadh den artaigil ullachadh air an oidhche ro thoiseach a’ chùrsa "ML gnìomhachais air dàta mòr"

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

Lìon apache MX 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 Python, C ++, Clojure, Java, Julia, R, Scala agus feadhainn eile.

Trèanadh air a chuairteachadh ann am MXNet le frithealaiche paramadair

Modal ionnsachaidh sgaoilte àbhaisteach ann am MXNet 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

Horood 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 MX Lìon, 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 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 bho seo.

Aig an deireadh, luchdaich sìos an sgriobt deuchainn mxnet_mnist.py bho seo 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.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.

Ionnsachadh air a chuairteachadh le Apache MXNet agus Horovod
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.

Ionnsachadh air a chuairteachadh le Apache MXNet agus Horovod
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 am post seo.

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 Amazon Deep Learning AMI, 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 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    ...

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 MXNegus MXNet a thogail an toiseach. Tha sinn cuideachd a’ moladh gu làidir an artaigil a leughadh MXNet ann an 60 mionaidairson 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 Stàladh duilleag Horovod, tog e bho MXNet agus lean an eisimpleir MNIST no IMAGEnet.

* tha cosgais air a thomhas a rèir ìrean san uair AWS airson suidheachaidhean EC2

Ionnsaich tuilleadh mun chùrsa "ML gnìomhachais air dàta mòr"

Source: www.habr.com

Cuir beachd ann