Foghlaim Dáilte le Apache MXNet agus Horovod

Ullmhaíodh aistriúchán an ailt ar an oíche roimh thús an chúrsa "ML tionsclaíoch ar Shonraí Móra"

Is féidir le hoiliúint dháilte ar chásanna iomadúla ríomhaireachta ardfheidhmíochta an t-am oiliúna a bhaineann le líonraí néaracha domhain nua-aimseartha a laghdú ar mhéideanna móra sonraí ó sheachtainí go huaireanta nó fiú nóiméad, rud a fhágann go bhfuil an teicníocht oiliúna seo forleithne in iarratais phraiticiúla na foghlama domhain. Ní mór d’úsáideoirí tuiscint a fháil ar conas sonraí a roinnt agus a shioncronú thar roinnt cásanna, rud a mbíonn tionchar mór aige ar éifeachtúlacht scálaithe. Ina theannta sin, ba cheart go mbeadh a fhios ag úsáideoirí conas script oiliúna a imscaradh a ritheann ar chás amháin chuig cásanna iolracha.

San Airteagal seo labhróimid faoi bhealach tapa agus éasca chun foghlaim a dháileadh ag baint úsáide as an leabharlann foghlama domhain oscailte Apache MXNet agus creat foghlama dáilte Horovod. Léireoimid go soiléir na buntáistí feidhmíochta a bhaineann le creat Horovod agus léireoimid conas script oiliúna MXNet a scríobh ionas go n-oibreoidh sé ar bhealach dáilte le Horovod.

Cad é Apache MXNet

Apache MX Glan is creat foghlama domhain foinse oscailte é a úsáidtear chun líonraí néaracha doimhne a chruthú, a oiliúint agus a imscaradh. Achoimríonn MXNet na castachtaí a bhaineann le líonraí néaracha a chur i bhfeidhm, tá sé thar a bheith feidhmiúil agus inscálaithe, agus cuireann sé APIanna ar fáil do theangacha ríomhchlárúcháin a bhfuil tóir orthu ar nós Python, C + +, Clojure, java, Julia, R, Scala agus daoine eile.

Dáileadh oiliúint in MXNet le freastalaí paraiméadar

Modúl caighdeánach foghlama dáilte in MXNet úsáideann cur chuige freastalaí paraiméadar. Úsáideann sé sraith de fhreastalaithe paraiméadar chun grádáin a bhailiú ó gach oibrí, comhiomlánú a dhéanamh, agus grádáin nuashonraithe a sheoladh ar ais chuig oibrithe don chéad atriall optamaithe eile. Tá sé ríthábhachtach an cóimheas ceart freastalaithe le hoibrithe a chinneadh le haghaidh scálaithe éifeachtach. Mura bhfuil ann ach freastalaí paraiméadar amháin, d’fhéadfadh sé tarlú gur bac é sna ríomhanna. Os a choinne sin, má úsáidtear an iomarca freastalaithe, is féidir le cumarsáid ó go leor go leor gach nasc líonra a dhúnadh.

Cad é Horovod

Horovod Is creat foghlama domhain dáilte oscailte é a forbraíodh ag Uber. Giarálann sé teicneolaíochtaí éifeachtacha tras-GPU agus tras-nód mar Leabharlann Cumarsáide Comhchoiteann NVIDIA (NCCL) agus Comhéadan Tarchuir Teachtaireachtaí (MPI) chun paraiméadair samhail a dháileadh agus a chomhiomlánú thar vorecs. Uasmhéadaíonn sé úsáid bandaleithead líonra agus scálaí go maith nuair a bhíonn sé ag obair le samhlacha líonraí néaracha domhain. Tacaíonn sé faoi láthair le roinnt creataí meaisínfhoghlama a bhfuil tóir orthu, eadhon MX Glan, Tensorflow, Keras, agus PyTorch.

comhtháthú MXNet agus Horovod

Comhtháthaíonn MXNet le Horovod trí na APIanna Foghlama Dáilte atá sainmhínithe in Horovod. APIs cumarsáide Horovod horovod.craoladh(), horovod.allgather() и horovod.alllaghdaigh() curtha i bhfeidhm trí úsáid a bhaint as aisghlaonna asincrónacha den inneall MXNet, mar chuid dá thascghraf. Ar an mbealach seo, déantar spleáchais sonraí idir cumarsáid agus ríomh a láimhseáil go héasca ag an inneall MXNet chun caillteanais feidhmíochta de bharr sioncrónaithe a sheachaint. Oibiacht optamaithe dáilte arna sainmhíniú in Horovod horovod.DistributedOptimizer ag leathnú Optimizer in MXNet ionas go nglaofaidh sé na APIanna comhfhreagracha Horovod le haghaidh nuashonruithe paraiméadar dáilte. Tá na sonraí cur chun feidhme seo go léir trédhearcach d’úsáideoirí deiridh.

Tús tapa

Is féidir leat tosú go tapa ar ghréasán néarúil comhraonta beag a thraenáil ar thacar sonraí MNIST ag baint úsáide as MXNet agus Horovod ar do MacBook.
Gcéad dul síos, suiteáil mxnet agus horovod ó PyPI:

pip install mxnet
pip install horovod

Nóta: Má thagann tú trasna ar earráid le linn pip a shuiteáil horovodb'fhéidir go gcaithfidh tú athróg a chur leis MACOSX_DEPLOYMENT_TARGET=10.vvI gcás ina vv – is é seo an leagan de do leagan MacOS, mar shampla, le haghaidh MacOSX Sierra beidh ort a scríobh MACOSX_DEPLOYMENT_TARGET=Suiteáil 10.12 pip hóród

Ansin shuiteáil OpenMPI dá bhrí sin.

Íoslódáil scripteanna tástála ag an deireadh mxnet_mnist.py dá bhrí sin agus rith na horduithe seo a leanas i gcríochfort MacBook san eolaire oibre:

mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py

Reáchtálfaidh sé seo oiliúint ar dhá chroílár do phróiseálaí. Beidh an t-aschur mar seo 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

Taispeántas Feidhmíochta

Agus múnla ResNet50-v1 á oiliúint ar thacar sonraí ImageNet ar 64 GPU le hocht gcás p3.16xlarge EC2, gach ceann ina raibh 8 NVIDIA Tesla Tesla V100 GPU ar scamall AWS, bhaineamar amach tréchur oiliúna de 45000 íomhá/soic (i.e., líon na samplaí oilte in aghaidh an tsoicind). Críochnaíodh an oiliúint laistigh de 44 nóiméad tar éis 90 ré le cruinneas is fearr de 75.7%.

Chuireamar é seo i gcomparáid le cur chuige oiliúna dáilte MXNet maidir le freastalaithe paraiméadar a úsáid ar 8, 16, 32 agus 64 GPU le freastalaí paraiméadar amháin agus cóimheas freastalaí le hoibrí de 1 go 1 agus 2 go 1, faoi seach. Is féidir leat an toradh a fheiceáil i bhFíor 1 thíos. Ar an y-ais ar chlé, is ionann na barraí agus líon na n-íomhánna le hoiliúint in aghaidh an tsoicind, léiríonn na línte an éifeachtúlacht scálaithe (is é sin, an cóimheas idir an tréchur iarbhír agus idéalach) ar an y-ais ar dheis. Mar a fheiceann tú, bíonn tionchar ag rogha líon na bhfreastalaithe ar an éifeachtúlacht scálaithe. Mura bhfuil ach freastalaí paraiméadar amháin ann, titeann an éifeachtúlacht scálaithe go 38% ar 64 GPU. Chun an éifeachtúlacht scálaithe chéanna a bhaint amach agus a dhéantar le Horovod, ní mór duit líon na bhfreastalaithe a dhúbailt i gcoibhneas le líon na n-oibrithe.

Foghlaim Dáilte le Apache MXNet agus Horovod
Fíor 1. Comparáid idir foghlaim dáilte ag baint úsáide as MXNet le Horovod agus le freastalaí paraiméadar

I dTábla 1 thíos, déanaimid comparáid idir an costas deiridh in aghaidh na huaire nuair a bhítear ag rith turgnaimh ar 64 GPU. Soláthraíonn baint úsáide as MXNet le Horovod an tréchur is fearr ar an gcostas is ísle.

Foghlaim Dáilte le Apache MXNet agus Horovod
Tábla 1. Comparáid costais idir Horovod agus Freastalaí Paraiméadar le cóimheas freastalaí le hoibrí de 2 go 1.

Céimeanna chun atáirgeadh

Sna chéad chéimeanna eile, taispeánfaimid duit conas toradh na hoiliúna dáilte a atáirgeadh ag baint úsáide as MXNet agus Horovod. Chun tuilleadh a fhoghlaim faoi fhoghlaim dháilte le MXNet léigh an post seo.

Céim 1

Cruthaigh braisle cásanna aonchineálacha le leagan MXNet 1.4.0 nó níos airde agus leagan Horovod 0.16.0 nó níos airde chun foghlaim dháilte a úsáid. Beidh ort freisin leabharlanna a shuiteáil le haghaidh oiliúna GPU. Le haghaidh ár gcásanna, roghnaigh muid Ubuntu 16.04 Linux, le Tiománaí GPU 396.44, CUDA 9.2, leabharlann cuDNN 7.2.1, communicator NCCL 2.2.13 agus OpenMPI 3.1.1. Chomh maith leis sin is féidir leat é a úsáid Amazon Deep Learning AMI, áit a bhfuil na leabharlanna seo réamhshuiteáilte cheana féin.

Céim 2

Cuir an cumas oibriú leis an Horovod API le do script oiliúna MXNet. Is féidir an script thíos atá bunaithe ar an MXNet Gluon API a úsáid mar theimpléad simplí. Tá na línte i gcló trom ag teastáil má tá script oiliúna comhfhreagrach agat cheana féin. Seo roinnt athruithe ríthábhachtacha a chaithfidh tú a dhéanamh chun foghlaim le Horovod:

  • Socraigh an comhthéacs de réir chéim áitiúil Horovod (líne 8) chun a thuiscint go ndéantar oiliúint ar chroílár na grafaicí ceart.
  • Pas paraiméadair tosaigh ó oibrí amháin go gach duine (líne 18) chun a chinntiú go dtosaíonn gach oibrí leis na paraiméadair tosaigh céanna.
  • Cruthaigh Horovod DistributedOptimizer (líne 25) na paraiméadair a nuashonrú ar bhealach dáilte.

Chun an script iomlán a fháil, féach le do thoil ar na samplaí 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    ...

Céim 3

Logáil isteach ar cheann de na hoibrithe chun oiliúint dáilte a thosú ag baint úsáide as an treoir MPI. Sa sampla seo, ritheann oiliúint dháilte ar cheithre chás le 4 GPU an ceann, agus iomlán de 16 GPU sa bhraisle. Úsáidfear an t-uasmhéadaitheoir um Shliocht Grádán Stochastic (SGD) leis na hipearpharaiméadair seo a leanas:

  • méid mionbhaisc: 256
  • ráta foghlama: 0.1
  • móiminteam: 0.9
  • meath meáchain: 0.0001

Agus muid ag scála ó GPU amháin go 64 GPU, rinneamar an ráta oiliúna a scála go líneach de réir líon na GPUanna (ó 0,1 le haghaidh 1 GPU go 6,4 le haghaidh 64 GPU), agus líon na n-íomhánna in aghaidh an GPU á choinneáil ag 256 (ó bhaisc de 256 íomhá do 1 GPU go 16 do 384 GPU). D'athraigh na paraiméadair meáchain agus móiminteam de réir mar a mhéadaigh líon na GPUanna. D’úsáideamar oiliúint bheachtais mheasctha leis an gcineál sonraí float64 don phas ar aghaidh agus float16 le haghaidh grádáin chun na ríomhanna float32 a thacú ag GPUanna NVIDIA Tesla a bhrostú.

$ 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

Conclúid

San Airteagal seo, d'fhéachamar ar chur chuige inscálaithe maidir le hoiliúint mhúnla dáilte ag baint úsáide as Apache MXNet agus Horovod. Léirigh muid an éifeachtúlacht scálaithe agus an cost-éifeachtúlacht i gcomparáid leis an gcur chuige freastalaí paraiméadar ar an tacar sonraí ImageNet ar a ndearnadh an tsamhail ResNet50-v1 a oiliúint. Tá céimeanna curtha san áireamh againn freisin ar féidir leat a úsáid chun script atá ann cheana a mhodhnú chun oiliúint ilchéime a reáchtáil ag baint úsáide as Horovod.

Má tá tú díreach ag tosú le MXNet agus foghlaim dhomhain, téigh go dtí an leathanach suiteála MXNechun MXNet a thógáil ar dtús. Molaimid go láidir freisin an t-alt a léamh MXNet i 60 nóiméadchun tús a chur leis.

Má d'oibrigh tú le MXNet cheana féin agus gur mhaith leat triail a bhaint as foghlaim dháilte le Horovod, féach ansin Leathanach suiteáil Horovod, é a thógáil ó MXNet agus lean an sampla MNISTIMAGEnet.

*ríomhtar costas bunaithe ar rátaí in aghaidh na huaire AWS do Chásanna EC2

Tuilleadh eolais faoin gcúrsa "ML tionsclaíoch ar Shonraí Móra"

Foinse: will.com

Add a comment