Waxbarashada loo qaybiyay Apache MXNet iyo Horovod

Turjumaada maqaalka waxaa la diyaariyay ka hor bilowga koorsada "ML Industrial on Big Data"

Tababarka loo qaybiyay ee ku saabsan tusaalooyin badan oo waxqabadka sare leh ee xisaabinta ayaa yarayn kara wakhtiga tababarka ee shabakadaha neerfayaasha qotodheer ee casriga ah ee xog badan oo laga bilaabo toddobaadyo ilaa saacado ama xitaa daqiiqado, taas oo ka dhigaysa farsamadan tababarka ku baahsan codsiyada la taaban karo ee barashada qoto dheer. Isticmaalayaashu waa inay fahmaan sida loo wadaago oo la isu waafajiyo xogta marar badan, taas oo iyaduna saameyn weyn ku leh waxtarka miisaanka. Intaa waxaa dheer, isticmaalayaashu waa inay sidoo kale ogaadaan sida loo geeyo qoraalka tababarka kaas oo ku socda hal tusaale ilaa marar badan.

Maqaalkan waxaan kaga hadli doonaa si degdeg ah oo sahlan oo loo qaybiyo waxbarashada iyadoo la adeegsanayo maktabadda barasho qoto dheer ee furan Apache MXNet iyo Horovod qaab-dhismeedka waxbarashada qaybiyay. Waxaan si cad u muujin doonaa faa'iidooyinka waxqabadka ee qaabka Horovod waxaanan muujin doonaa sida loo qoro qoraalka tababarka MXNet si uu ugu shaqeeyo habka loo qaybiyo Horovod.

Waa maxay Apache MXNet

Apache MX Net waa qaab barasho qoto dheer oo il furan oo loo isticmaalo in lagu abuuro, lagu tababaro, lana geeyo shabakadaha neerfaha ee qoto dheer. MXNet waxay soo koobtaa kakanaanta la xidhiidha hirgelinta shabakadaha neerfaha, waa mid aad u firfircoon oo la miisaami karo, wuxuuna bixiyaa API-yada luqadaha barnaamijyada caanka ah sida Python, C ++, Xakamaynta, Java, Julia, R, Scala iyo kuwa kale.

Tababarka loo qaybiyay MXNet oo wata server-ka cabbiraadda

Heerka waxbarasho ee loo qaybiyay MXNet waxay isticmaashaa habka server-ka. Waxay adeegsataa serfarada cabbiraadda si ay uga ururiso hawlwadeen kasta, u qabato isku-darka, oo ay dib ugu soo celiso gradients-ka cusub shaqaalaha dib-u-habaynta soo socota. Go'aaminta saamiga saxda ah ee server-yada shaqaalaha ayaa fure u ah miisaan wax ku ool ah. Haddii uu jiro hal halbeeg oo keliya, waxa laga yaabaa inay noqoto cidhiidhi xagga xisaabinta. Taa beddelkeeda, haddii adeegayaal badan la isticmaalo, isgaarsiin badan iyo kuwo badan ayaa xiri kara dhammaan isku xirka shabakadaha.

Waa maxay Horovod

Horovod waa qaab barasho qoto dheer oo la qaybiyey oo laga sameeyay Uber. Waxay ka faa'iidaysataa tignoolajiyada iskutallaabta-GPU iyo iskutallaabyada hufan sida NVIDIA Collective Communications Library (NCCL) iyo Message Passing Interface (MPI) si ay u qaybiso oo ay isu geyso cabbirada moodeelka guud ahaan vorecs. Waxay si fiican u wanaajisaa isticmaalka xadhkaha xatooyada iyo miisaanka si fiican marka la shaqeynayo moodooyinka shabakadaha qoto dheer ee neerfaha. Waxay hadda taageertaa dhowr qaab-dhismeedka barashada mashiinka caanka ah, kuwaas oo ah MX Net, Tensorflow, Keras, iyo PyTorch.

MXNet iyo Horovod is dhexgalka

MXNet waxay ku biirtaa Horovod iyada oo loo marayo API-yada Waxbarashada La Qaybiyay ee lagu qeexay Horovod. APIs isgaarsiinta Horovod horovod.broadcast(), horovod.allgather() ΠΈ horovod.allreduce() la hirgeliyey iyadoo la adeegsanayo dib-u-soo-celin-celin-is-daba-marin ah oo mashiinka MXNet ah, taasoo qayb ka ah garaafka hawsha. Sidan, ku-tiirsanaanta xogta u dhaxaysa isgaadhsiinta iyo xisaabinta waxaa si fudud u maamula mishiinka MXNet si looga fogaado khasaaraha waxqabadka sababtoo ah isku-dubarid. Walaxda hagaajinta qaybsan ee lagu qeexay Horovod horovod.DistributedOptimizer balaadhiyo Optimizer gudaha MXNet si ay ugu wacdo Horovod API-yada u dhigma ee cusboonaysiinta cabbirka. Dhammaan tafaasiishan fulintu waa kuwo daah-furan isticmaalayaasha dhammaadka ah.

Bilow degdeg ah

Waxaad si dhakhso ah u bilaabi kartaa tababbarka shabakad yar oo neural ah oo ku saabsan xogta MNIST adoo isticmaalaya MXNet iyo Horovod ee MacBookgaaga.
Marka hore, ku rakib mxnet iyo horovod ka PyPI:

pip install mxnet
pip install horovod

Xusuusin: Haddii aad la kulanto qalad inta lagu jiro pip install horovodwaxaa laga yaabaa inaad u baahato inaad doorsoome ku darto MACOSX_DEPLOYMENT_TARGET=10.vvhalkaas oo vv - kani waa nooca MacOS kaaga, tusaale ahaan, MacOSX Sierra waxaad u baahan doontaa inaad qorto MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

Kadibna ku rakib OpenMPI halkan.

Dhammaadka, soo deji qoraalka imtixaanka mxnet_mnist.py halkan oo ku socodsii amarada soo socda gudaha MacBookga tusaha shaqada:

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

Tani waxay ku socon doontaa tababar ku saabsan labada qaybood ee processor-kaaga. Wax-soo-saarku wuxuu noqon doonaa sida soo socota:

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

Bandhiga Waxqabadka

Markaad tababbarto qaabka ResNet50-v1 ee xogta ImageNet ee 64 GPUs oo leh sideed xaaladood p3.16x weyn EC2, mid kasta oo ka kooban 8 NVIDIA Tesla V100 GPUs ee daruuraha AWS, waxaan ku gaadhnay tabobarka 45000 sawir/sek (ie, tirada muunado tababaran ilbiriqsikii). Tababarku wuxuu ku dhammaaday 44 daqiiqo ka dib 90-xilliyadii ugu saxsanaa ee 75.7%.

Waxaan tan barbar dhignay habka tababarka loo qaybiyey ee MXNet ee adeegsiga adeegsadaha cabbiraadaha ee 8, 16, 32 iyo 64 GPUs oo wata halbeeg halbeeg ah iyo serfarka saamiga shaqaalaha ee 1 ilaa 1 iyo 2 ilaa 1, siday u kala horreeyaan. Waxaad natiijada ka arki kartaa sawirka 1 ee hoose. Dhanka dhidibka y ee bidixda, baararka waxay u taagan yihiin tirada sawirada lagu tababarayo ilbiriqsi kasta, xariiqyadu waxay ka tarjumayaan hufnaanta miisaanka (taas oo ah, saamiga dhabta ah iyo soo saarista ugu habboon) ee dhidibka y ee midigta. Sida aad arki karto, doorashada tirada server-yada ayaa saameeya waxtarka miisaanka. Haddii uu jiro hal adeeg oo kaliya, hufnaanta miisaanku waxay hoos ugu dhacaysaa 38% 64 GPUs. Si aad u gaarto waxtarka miisaanka leh ee Horovod, waxaad u baahan tahay inaad labanlaabto tirada server-yada marka loo eego tirada shaqaalaha.

Waxbarashada loo qaybiyay Apache MXNet iyo Horovod
Jaantuska 1. Isbarbardhigga waxbarashada la qaybiyey iyadoo la isticmaalayo MXNet iyo Horovod iyo server-ka cabbirka

Jadwalka 1 ee hoose, waxaan is barbar dhigeynaa qiimaha ugu dambeeya tusaale ahaan marka aan wadno tijaabooyinka 64 GPUs. Isticmaalka MXNet ee Horovod waxay ku siinaysaa soosaarka ugu fiican ee qiimaha ugu hooseeya.

Waxbarashada loo qaybiyay Apache MXNet iyo Horovod
Shaxda 1. Isbarbardhigga qiimaha u dhexeeya Horovod iyo Parameter Server oo leh seerfar iyo saamiga shaqaalaha ee 2 ilaa 1.

Tallaabooyinka soo saarista

Tallaabooyinka soo socda, waxaan ku tusi doonaa sida loo soo saaro natiijada tababarka la qaybiyey iyadoo la isticmaalayo MXNet iyo Horovod. Si aad wax badan uga barato waxbarashada la qaybiyey MXNet akhri qoraalkan.

talaabo 1

Samee koox isku mid ah oo leh nooca MXNet 1.4.0 ama ka sareeya iyo nooca Horovod 0.16.0 ama ka sareeya si loo isticmaalo barasho la qaybiyey. Waxaad sidoo kale u baahan doontaa inaad ku rakibto maktabadaha tababarka GPU. Tusaale ahaan, waxaanu dooranay Ubuntu 16.04 Linux, oo leh GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 maktabadda, NCCL 2.2.13 communicator iyo OpenMPI 3.1.1. Sidoo kale waad isticmaali kartaa Amazon Deep Learning AMI, halkaas oo maktabadahan horay loo sii rakibay.

talaabo 2

Ku dar kartida aad kula shaqayn karto Horovod API qoraalkaaga tababarka ee MXNet. Qoraalka hoose ee ku salaysan MXNet Gluon API waxa loo isticmaali karaa qaab fudud. Xariiqyada geesinimada leh ayaa loo baahan yahay haddii aad hore u lahayd qoraal tababar oo u dhigma. Waa kuwan dhowr isbeddel oo muhiim ah oo aad u baahan tahay si aad wax uga barato Horovod:

  • U deji macnaha guud iyadoo la raacayo darajada Horovod ee deegaanka (line 8) si aad u fahamto in tababarka lagu sameeyo xudunta garaafyada saxda ah.
  • U gudub halbeegyada bilowga ah hal shaqaale una gudub dhammaan (line 18) si aad u hubiso in dhammaan shaqaaluhu ay ku bilowdaan cabbirro isku mid ah.
  • Samee Horovod QaybiyeyOptimizer (line 25) si loo cusboonaysiiyo cabbirada hab loo qaybiyey.

Si aad u hesho qoraalka buuxa, fadlan tixraac tusaalooyinka 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    ...

talaabo 3

Soo gal mid ka mid ah shaqaalaha si aad u bilowdo tabobar la qaybiyo adoo isticmaalaya dardaaranka MPI. Tusaalahan, tababarka la qaybiyay wuxuu ku socdaa afar xaaladood oo midkiiba 4 GPUs ah, iyo wadarta 16 GPUs ee kooxda. Kor u qaadka Dheefiyaha Stochastic Gradient (SGD) waxaa loo isticmaali doonaa cabirrada soo socda:

  • Cabbirka dufcada yar: 256
  • heerka waxbarashada: 0.1
  • xawaaraha: 0.9
  • Qulqulka miisaanka: 0.0001

Markaan ka cabirnay hal GPU ilaa 64 GPUs, waxaan si toos ah u cabirnay heerka tababarka iyadoo loo eegayo tirada GPU-yada (laga bilaabo 0,1 ee 1 GPU ilaa 6,4 ee 64 GPUs), anagoo ilaalinayna tirada sawirada GPU kasta 256 (laga bilaabo dufcad 256 sawir oo loogu talagalay 1 GPU ilaa 16 ee 384 GPUs). Miisaanka qudhunka iyo cabbirrada xawliga ayaa isbeddelay markii tirada GPU-yadu korodhay. Waxaan u isticmaalnay tababar sax ah oo isku dhafan oo leh nooca xogta float64 ee gudbinta hore iyo float16 ee gradients si aan u dedejinno xisaabinta float32 ee ay taageerto 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

gunaanad

Maqaalkan, waxaan eegnay hab la qiyaasi karo oo lagu qaybinayo tababbarka moodeelka iyadoo la adeegsanayo Apache MXNet iyo Horovod. Waxaan soo bandhignay hufnaanta miisaanka iyo waxtarka leh marka la barbar dhigo habka server-ka cabbirka xogta ImageNet kaas oo qaabka ResNet50-v1 lagu tababaray. Waxa kale oo aanu ku soo darnay tillaabooyin aad isticmaali karto si aad wax uga beddesho qoraalka jira si aad u socodsiiso tababbarka tusaalooyinka badan adoo isticmaalaya Horovod.

Haddii aad hadda ka bilaabayso MXNet iyo barasho qoto dheer, aad bogga rakibaadda MXNein marka hore la dhiso MXNet. Waxaan sidoo kale kugula talineynaa inaad akhrido maqaalka MXNet gudaha 60 daqiiqosi loo bilaabo.

Haddii aad horay ula soo shaqeysay MXNet oo aad rabto inaad isku daydo barashada qaybinta Horovod, ka dibna fiiri Horovod bogga rakibaadda, ka dhis MXNet oo raac tusaalaha MNIST ama ImageNet.

*Qiimaha waxaa la xisaabiyaa iyadoo lagu salaynayo qiimaha saacaddii AWS ee Tusaalooyinka EC2

Wax badan ka baro koorsada "ML Industrial on Big Data"

Source: www.habr.com

Add a comment