Artikkelin käännös valmistettiin kurssin alkamisen aattona
Hajautettu koulutus useissa tehokkaissa laskentatapauksissa voi lyhentää nykyaikaisten syvien hermoverkkojen koulutusaikaa suurilla tietomäärillä viikoista tunteihin tai jopa minuutteihin, mikä tekee tästä koulutustekniikasta yleisen syvän oppimisen käytännön sovelluksissa. Käyttäjien on ymmärrettävä, kuinka tietoja voidaan jakaa ja synkronoida useiden esiintymien välillä, millä puolestaan on suuri vaikutus skaalaustehokkuuteen. Lisäksi käyttäjien tulisi myös tietää, kuinka harjoituskomentosarja, joka suoritetaan yhdellä ilmentymällä, voidaan ottaa käyttöön useisiin esiintymiin.
Tässä artikkelissa puhumme nopeasta ja helposta tavasta jakaa oppimista käyttämällä avointa syväoppimiskirjastoa Apache MXNet ja Horovod hajautettua oppimiskehystä. Esittelemme selkeästi Horovod-kehyksen suorituskykyedut ja osoitamme kuinka kirjoittaa MXNet-harjoitusskripti niin, että se toimii hajautetusti Horovodin kanssa.
Mikä on Apache MXNet
Hajautettu koulutus MXNetissä parametripalvelimella
Mikä on Horovod
MXNet- ja Horovod-integraatio
MXNet integroituu Horovodin kanssa Horovodissa määriteltyjen Distributed Learning API:iden kautta. Horovodin viestintäsovellusliittymät horovod.broadcast(), horovod.allgather() и horovod.allreduce() toteutettu käyttämällä MXNet-moottorin asynkronisia takaisinkutsuja osana sen tehtäväkaaviota. Tällä tavalla MXNet-moottori käsittelee helposti tietoliikenteen ja laskennan välisiä riippuvuuksia, jotta vältytään synkronoinnista johtuvilta suorituskyvyn menetyksiltä. Hajautettu optimointiobjekti määritetty Horovodissa horovod.DistributedOptimizer laajenee Optimizer MXNetissä niin, että se kutsuu vastaavat Horovod API:t hajautettuja parametrien päivityksiä varten. Kaikki nämä toteutustiedot ovat läpinäkyviä loppukäyttäjille.
Nopea aloitus
Voit aloittaa nopeasti pienen konvoluutiohermoverkon harjoittamisen MNIST-tietojoukossa käyttämällä MacBookin MXNetiä ja Horovodia.
Asenna ensin mxnet ja horovod PyPI:stä:
pip install mxnet
pip install horovod
Huomautus: Jos kohtaat virheen aikana pip asennus horovodehkä sinun täytyy lisätä muuttuja MACOSX_DEPLOYMENT_TARGET=10.vvMissä vv – tämä on MacOS-versiosi versio, esimerkiksi MacOSX Sierraa varten sinun on kirjoitettava MACOSX_DEPLOYMENT_TARGET=10.12 pip asennus horovod
Asenna sitten OpenMPI
Lataa lopuksi testiskripti mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Tämä suorittaa koulutuksen prosessorisi kahdella ytimellä. Tulos on seuraava:
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
Esityksen demo
Harjoitettaessa ResNet50-v1-mallia ImageNet-tietojoukossa 64 GPU:ssa, joissa on kahdeksan esiintymää p3.16xlarge EC2, joista jokainen sisälsi 8 NVIDIA Tesla V100 GPU:ta AWS-pilvessä, saavutimme 45000 44 kuvan sekuntiopetuksen (eli harjoitettujen näytteiden määrän sekunnissa). Harjoittelu suoritettiin 90 minuutissa 75.7 jakson jälkeen parhaalla tarkkuudella XNUMX %.
Vertasimme tätä MXNetin hajautettuun harjoittelutapaan, jossa parametripalvelimia käytetään 8, 16, 32 ja 64 GPU:ssa, joissa on yksi parametripalvelin ja palvelimen ja työntekijän välinen suhde on 1:1 ja 2:1. Voit nähdä tuloksen alla olevasta kuvasta 1. Vasemmalla y-akselilla palkit edustavat sekunnissa harjoitettavien kuvien määrää, viivat heijastavat skaalaustehokkuutta (eli todellisen ja ideaalisen suorituskyvyn suhdetta) oikealla y-akselilla. Kuten näet, palvelimien lukumäärän valinta vaikuttaa skaalaustehokkuuteen. Jos parametripalvelinta on vain yksi, skaalaustehokkuus laskee 38 prosenttiin 64 GPU:lla. Saavuttaaksesi saman skaalaustehokkuuden kuin Horovodilla, sinun on kaksinkertaistettava palvelimien määrä suhteessa työntekijöiden määrään.
Kuva 1. Hajautetun oppimisen vertailu MXNetillä Horovodin ja parametripalvelimen kanssa
Alla olevassa taulukossa 1 vertaamme lopullista hintaa esiintymää kohden suoritettaessa kokeiluja 64 GPU:lla. MXNetin käyttäminen Horovodin kanssa tarjoaa parhaan suorituskyvyn alhaisin kustannuksin.
Taulukko 1. Horovodin ja Parameter Serverin kustannusvertailu palvelimen ja työntekijän välisen suhteen ollessa 2:1.
Vaiheet lisääntymiseen
Seuraavissa vaiheissa näytämme, kuinka voit toistaa hajautetun harjoittelun tulokset MXNetin ja Horovodin avulla. Lue lisää hajautetusta oppimisesta MXNetin avulla
Vaihe 1
Luo homogeenisten ilmentymien klusteri MXNet-versiolla 1.4.0 tai uudemmalla ja Horovod-versiolla 0.16.0 tai uudemmalla, jotta voit käyttää hajautettua oppimista. Sinun on myös asennettava kirjastoja GPU-koulutusta varten. Valitsimme tapauksillemme Ubuntu 16.04 Linuxin, jossa on GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 kirjasto, NCCL 2.2.13 kommunikaattori ja OpenMPI 3.1.1. Voit myös käyttää
Vaihe 2
Lisää MXNet-harjoitusskriptiisi mahdollisuus työskennellä Horovod API:n kanssa. Alla olevaa MXNet Gluon API:hen perustuvaa komentosarjaa voidaan käyttää yksinkertaisena mallina. Lihavoidut rivit ovat tarpeen, jos sinulla on jo vastaava koulutusohjelma. Tässä on muutamia tärkeitä muutoksia, jotka sinun on tehtävä oppiaksesi Horovodin kanssa:
- Aseta konteksti paikallisen Horovodin arvosanan mukaan (rivi 8), jotta ymmärrät, että koulutus suoritetaan oikealla grafiikkaytimellä.
- Välitä alkuparametrit yhdeltä työntekijältä kaikille (rivi 18) varmistaaksesi, että kaikki työntekijät aloittavat samoilla aloitusparametreilla.
- Luo Horovod DistributedOptimizer (rivi 25) päivittääksesi parametrit hajautetusti.
Saadaksesi koko käsikirjoituksen, katso Horovod-MXNet-esimerkkejä
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 ...
Vaihe 3
Kirjaudu sisään jollekin työntekijöistä aloittaaksesi hajautetun koulutuksen MPI-direktiivin avulla. Tässä esimerkissä hajautettu koulutus suoritetaan neljässä esiintymässä, joissa kussakin on 4 GPU:ta ja yhteensä 16 GPU:ta klusterissa. Stochastic Gradient Descent (SGD) -optimointityökalua käytetään seuraavien hyperparametrien kanssa:
- minierän koko: 256
- oppimisaste: 0.1
- vauhti: 0.9
- painon lasku: 0.0001
Kun skaalaimme yhdestä GPU:sta 64 GPU:hun, skaalaimme harjoitusnopeuden lineaarisesti GPU:iden lukumäärän mukaan (0,1:stä 1 GPU:lle 6,4:ään 64 GPU:lle) pitäen samalla kuvien määrän GPU:ta kohden 256:ssa (erästä 256 kuvaa 1 GPU:lle ja 16 384 kuvaa 64 GPU:lle). Painon lasku- ja liikemääräparametrit muuttuivat grafiikkasuorittimien määrän lisääntyessä. Käytimme sekoitettua tarkkuusharjoitusta float16-datatyypin kanssa eteenpäinkulkua varten ja float32-tietotyyppiä gradienteissa nopeuttaaksemme NVIDIA Teslan GPU:iden tukemia float16-laskelmia.
$ 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
Johtopäätös
Tässä artikkelissa tarkastelimme skaalautuvaa lähestymistapaa hajautettuun mallikoulutukseen käyttämällä Apache MXNetiä ja Horovodia. Osoitimme skaalaustehokkuuden ja kustannustehokkuuden verrattuna parametripalvelinlähestymistapaan ImageNet-tietojoukossa, johon ResNet50-v1-malli opetettiin. Olemme myös sisällyttäneet vaiheet, joiden avulla voit muokata olemassa olevaa komentosarjaa, jotta voit suorittaa usean esiintymän harjoittelua Horovodin avulla.
Jos olet vasta aloittamassa MXNetin ja syväoppimisen käyttöä, siirry asennussivulle
Jos olet jo työskennellyt MXNetin kanssa ja haluat kokeilla hajautettua oppimista Horovodin kanssa, katso
*hinta on laskettu
Lue lisää kurssista
Lähde: will.com