Hajutatud Ôpe Apache MXNeti ja Horovodiga

Artikli tÔlge valmis kursuse alguse eelÔhtul "Industrial ML on Big Data"

Jaotatud koolitus mitmel suure jĂ”udlusega andmetöötluseksemplaril vĂ”ib vĂ€hendada kaasaegsete sĂŒgavate nĂ€rvivĂ”rkude koolitusaega suurte andmemahtude korral nĂ€dalatest tundideks vĂ”i isegi minutiteks, muutes selle koolitustehnika levinud sĂŒvaĂ”ppe praktilistes rakendustes. Kasutajad peavad mĂ”istma, kuidas jagada ja sĂŒnkroonida andmeid mitme eksemplari vahel, mis omakorda mĂ”jutab oluliselt skaleerimise tĂ”husust. Lisaks peaksid kasutajad teadma, kuidas juurutada koolitusskripti, mis töötab ĂŒhel eksemplaril, mitmes eksemplaris.

Selles artiklis rÀÀgime kiirest ja lihtsast viisist Ă”ppe levitamiseks avatud sĂŒvaĂ”ppeteegi Apache MXNet ja Horovodi hajutatud Ă”pperaamistiku abil. NĂ€itame selgelt Horovodi raamistiku jĂ”udluse eeliseid ja nĂ€itame, kuidas kirjutada MXNeti koolitusskripti nii, et see töötaks koos Horovodiga hajutatud viisil.

Mis on Apache MXNet

Apache MX Net on avatud lĂ€htekoodiga sĂŒvaĂ”pperaamistik, mida kasutatakse sĂŒgavate nĂ€rvivĂ”rkude loomiseks, koolitamiseks ja juurutamiseks. MXNet vĂ”tab kokku nĂ€rvivĂ”rkude rakendamisega seotud keerukuse, on suure jĂ”udlusega ja skaleeritav ning pakub API-sid populaarsete programmeerimiskeelte jaoks, nagu nĂ€iteks Python, C + +, Clojure, Java, Julia, R, Scala ja teised.

Jagatud koolitus MXNetis koos parameetriserveriga

Standardne hajutatud Ă”ppemoodul MXNetis kasutab parameetriserveri lĂ€henemist. See kasutab parameetriserverite komplekti, et koguda gradiente igalt töötajalt, teostada liitmist ja saata vĂ€rskendatud gradiente töötajatele jĂ€rgmise optimeerimise iteratsiooni jaoks. Serverite ja töötajate Ă”ige suhte mÀÀramine on tĂ”husa skaleerimise vĂ”ti. Kui on ainult ĂŒks parameetriserver, vĂ”ib see osutuda arvutustes kitsaskohaks. Ja vastupidi, kui kasutatakse liiga palju servereid, vĂ”ib mitu-mitmele suhtlus ummistada kĂ”ik vĂ”rguĂŒhendused.

Mis on Horovod

Horovod on avatud hajutatud sĂŒvaĂ”ppe raamistik, mis on vĂ€lja töötatud Uberis. See kasutab tĂ”husaid GPU ja sĂ”lmedevahelisi tehnoloogiaid, nagu NVIDIA Collective Communications Library (NCCL) ja Message Passing Interface (MPI), et levitada ja koondada mudeli parameetreid vorecide vahel. See optimeerib vĂ”rgu ribalaiuse kasutamist ja skaleerib hĂ€sti sĂŒgava nĂ€rvivĂ”rgu mudelitega töötamisel. See toetab praegu mitmeid populaarseid masinĂ”ppe raamistikke, nimelt MX Net, Tensorflow, Keras ja PyTorch.

MXNeti ja Horovodi integratsioon

MXNet integreerub Horovodiga Horovodis mÀÀratletud hajutatud Ă”ppe API-de kaudu. Horovodi side API-d horovod.broadcast(), horovod.allgather() Đž horovod.allreduce() rakendatakse MXNeti mootori asĂŒnkroonsete tagasihelistamiste abil selle ĂŒlesannete graafiku osana. Sel viisil saab MXNeti mootor hĂ”lpsasti kĂ€sitleda andmeside ja arvutuste vahelisi sĂ”ltuvusi, et vĂ€ltida sĂŒnkroonimisest tulenevat jĂ”udluse kadu. Horovodis mÀÀratletud hajutatud optimeerija objekt horovod.DistributedOptimizer laieneb Optimeerija MXNetis, nii et see kutsub hajutatud parameetrite vĂ€rskendamiseks vastavaid Horovodi API-sid. KĂ”ik need rakenduse ĂŒksikasjad on lĂ”ppkasutajatele lĂ€bipaistvad.

Kiire algus

Saate kiiresti alustada vÀikese konvolutsioonilise nÀrvivÔrgu treenimist MNIST-i andmestikul, kasutades oma MacBookis MXNeti ja Horovodi.
Esmalt installige PyPI-st mxnet ja horovod:

pip install mxnet
pip install horovod

MĂ€rkus. Kui ilmneb tĂ”rge ajal pip install horovodvĂ”ib-olla peate lisama muutuja MACOSX_DEPLOYMENT_TARGET=10.vvKus vv – see on teie MacOS-i versiooni versioon, nĂ€iteks MacOSX Sierra jaoks peate kirjutama MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

SeejÀrel installige OpenMPI siit.

LÔpuks laadige alla testskript mxnet_mnist.py siit ja kÀivitage töökataloogis MacBooki terminalis jÀrgmised kÀsud:

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

See kÀivitab koolituse teie protsessori kahel tuumal. VÀljund on jÀrgmine:

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

Esituse demo

ResNet50-v1 mudeli treenimisel ImageNeti andmestikul 64 GPU-l kaheksa eksemplariga p3.16xsuur EC2, millest igaĂŒks sisaldab 8 NVIDIA Tesla V100 GPU-d AWS-i pilves, saavutasime treeningu lĂ€bilaskevĂ”ime 45000 44 pilti sekundis (st treenitud nĂ€idiste arv sekundis). Treening lĂ€biti 90 minutiga pĂ€rast 75.7 epohhi parima tĂ€psusega XNUMX%.

VĂ”rdlesime seda MXNeti hajutatud koolitusmeetodiga, mille kohaselt kasutatakse parameetriservereid 8, 16, 32 ja 64 GPU-l ĂŒhe parameetriga serveriga ning serveri ja töötaja suhe on vastavalt 1:1 ja 2:1. Tulemust nĂ€ete alloleval joonisel 1. Vasakpoolsel y-teljel tĂ€histavad tulbad sekundis treenitavate piltide arvu, jooned peegeldavad skaleerimise efektiivsust (st tegeliku ja ideaalse lĂ€bilaskevĂ”ime suhet) paremal y-teljel. Nagu nĂ€ete, mĂ”jutab serverite arvu valik skaleerimise efektiivsust. Kui on ainult ĂŒks parameetriserver, langeb skaleerimise efektiivsus 38 GPU puhul 64%-ni. Samasuguse skaleerimise efektiivsuse saavutamiseks nagu Horovodi puhul peate serverite arvu töötajate arvuga vĂ”rreldes kahekordistama.

Hajutatud Ôpe Apache MXNeti ja Horovodiga
Joonis 1. Hajutatud Ôppe vÔrdlus MXNeti ja Horovodi ja parameetriserveriga

Allolevas tabelis 1 vÔrdleme eksemplari lÔplikku maksumust katsete tegemisel 64 GPU-ga. MXNeti kasutamine koos Horovodiga tagab parima lÀbilaskevÔime madalaima kuluga.

Hajutatud Ôpe Apache MXNeti ja Horovodiga
Tabel 1. Horovodi ja parameetriserveri kulude vÔrdlus serveri ja töötaja suhtega 2:1.

Paljundamise sammud

JÀrgmistes sammudes nÀitame teile, kuidas MXNeti ja Horovodi abil hajutatud treeningu tulemusi reprodutseerida. MXNeti abil hajutatud Ôppimise kohta lisateabe saamiseks lugege see postitus.

Samm 1

Hajutatud treeningu kasutamiseks looge homogeensetest eksemplaridest koosnev klaster, kasutades MXNeti versiooni 1.4.0 vĂ”i uuemat ja Horovodi versiooni 0.16.0 vĂ”i uuemat. Samuti peate installima GPU-treeningu teegid. Meie eksemplaride jaoks valisime Ubuntu 16.04 Linux, GPU draiveriga 396.44, CUDA 9.2, cuDNN teegiga 7.2.1, NCCL kommunikaatoriga 2.2.13 ja OpenMPI 3.1.1. VĂ”ite kasutada ka Amazoni sĂŒvaĂ”ppe AMI, kus need teegid on juba eelinstallitud.

Samm 2

Lisage oma MXNeti treeningskriptile vÔimalus töötada koos Horovodi API-ga. Allolevat MXNet Gluoni API-l pÔhinevat skripti saab kasutada lihtsa mallina. Paksus read on vajalikud, kui teil on juba vastav koolitusskript. Siin on mÔned olulised muudatused, mida peate Horovodiga Ôppimiseks tegema:

  • Seadke kontekst vastavalt kohalikule Horovodi auastmele (rida 8), et mĂ”ista, et koolitus viiakse lĂ€bi Ă”igel graafikatuumal.
  • Edastage algparameetrid ĂŒhelt töötajalt kĂ”igile (rida 18), et kĂ”ik töötajad alustaksid samade algparameetritega.
  • Looge Horovod DistributedOptimizer (rida 25), et vĂ€rskendada parameetreid hajutatud viisil.

TÀieliku skripti saamiseks vaadake Horovod-MXNeti nÀiteid 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    ...

Samm 3

MPI direktiivi abil hajutatud koolituse alustamiseks logige sisse ĂŒhe töötaja juurde. Selles nĂ€ites töötab hajutatud koolitus neljal eksemplaril, millest igaĂŒhes on 4 GPU-d ja klastris kokku 16 GPU-d. Stochastic Gradient Descent (SGD) optimeerijat kasutatakse jĂ€rgmiste hĂŒperparameetritega:

  • minipartii suurus: 256
  • Ă”ppimise mÀÀr: 0.1
  • hoog: 0.9
  • kaalulangus: 0.0001

Kui me skaleerisime ĂŒhelt GPU-lt 64-le GPU-le, skaleerisime treeningkiirust lineaarselt vastavalt GPU-de arvule (0,1-lt 1 GPU-le 6,4-le 64-le GPU-le), hoides samal ajal piltide arvu GPU kohta 256-l (kogust 256 pilti 1 GPU jaoks kuni 16 384 pilti 64 GPU jaoks). Kaalu vĂ€henemise ja impulsi parameetrid muutusid GPU-de arvu suurenedes. NVIDIA Tesla GPU-de toetatud float16 arvutuste kiirendamiseks kasutasime segatud tĂ€psustreeningut andmetĂŒĂŒbiga float32 edasipÀÀsu jaoks ja float16 gradientide jaoks.

$ 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

JĂ€reldus

Selles artiklis vaatlesime hajutatud mudelikoolituse skaleeritavat lÀhenemisviisi Apache MXNeti ja Horovodi abil. NÀitasime skaleerimise tÔhusust ja kulutasuvust vÔrreldes parameetriserveri lÀhenemisviisiga ImageNeti andmekogumis, mille pÔhjal ResNet50-v1 mudelit koolitati. Oleme lisanud ka sammud, mida saate kasutada olemasoleva skripti muutmiseks, et kÀivitada Horovodi abil mitme eksemplari koolitust.

Kui te alles alustate MXNeti ja sĂŒvaĂ”ppega, minge installilehele MXNeet kĂ”igepealt ehitada MXNet. Samuti soovitame tungivalt artiklit lugeda MXNet 60 minutigaalustamiseks.

Kui olete juba MXNetiga töötanud ja soovite Horovodiga hajutatud Ôpet proovida, siis vaadake Horovodi paigaldusleht, looge see MXNetist ja jÀrgige eeskuju MNIST vÔi IMAGEnet.

*kulu arvutatakse lÀhtuvalt tunnitasud AWS EC2 eksemplaride jaoks

Lisateavet kursuse kohta "Industrial ML on Big Data"

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster