Die vertaling van die artikel is voorberei op die vooraand van die aanvang van die kursus
Verspreide opleiding oor veelvuldige hoëprestasie-rekenaargevalle kan die opleidingstyd van moderne diep neurale netwerke op groot hoeveelhede data van weke tot ure of selfs minute verminder, wat hierdie opleidingstegniek algemeen maak in praktiese toepassings van diepleer. Gebruikers moet verstaan hoe om data oor verskeie gevalle te deel en te sinchroniseer, wat weer 'n groot impak op skaaldoeltreffendheid het. Daarbenewens moet gebruikers ook weet hoe om 'n opleidingskrip wat op 'n enkele instansie loop, na verskeie instansies te ontplooi.
In hierdie artikel sal ons praat oor 'n vinnige en maklike manier om leer te versprei deur die oop diepleerbiblioteek Apache MXNet en die Horovod-verspreide leerraamwerk te gebruik. Ons sal die prestasievoordele van die Horovod-raamwerk duidelik demonstreer en demonstreer hoe om 'n MXNet-opleidingskrip te skryf sodat dit op 'n verspreide wyse met Horovod werk.
Wat is Apache MXNet
Verspreide opleiding in MXNet met parameterbediener
Wat is Horovod
MXNet en Horovod-integrasie
MXNet integreer met Horovod deur die verspreide leer-API's wat in Horovod gedefinieer is. Horovod kommunikasie API's horovod.broadcast(), horovod.allgather() и horovod.allreduce() geïmplementeer deur gebruik te maak van asinchroniese terugroepe van die MXNet-enjin, as deel van sy taakgrafiek. Op hierdie manier word data-afhanklikhede tussen kommunikasie en berekening maklik deur die MXNet-enjin hanteer om prestasieverliese as gevolg van sinchronisasie te vermy. Verspreide optimizer-objek gedefinieer in Horovod horovod.DistributedOptimizer brei uit Optimizer in MXNet sodat dit die ooreenstemmende Horovod API's oproep vir verspreide parameteropdaterings. Al hierdie implementeringsbesonderhede is deursigtig vir eindgebruikers.
Vinnige begin
Jy kan vinnig begin om 'n klein konvolusionele neurale netwerk op die MNIST-datastel op te lei deur MXNet en Horovod op jou MacBook te gebruik.
Installeer eers mxnet en horovod vanaf PyPI:
pip install mxnet
pip install horovod
Let wel: As jy 'n fout teëkom tydens pip installeer horovodmiskien moet jy 'n veranderlike byvoeg MACOSX_DEPLOYMENT_TARGET=10.vvWaar vv – dit is die weergawe van jou MacOS-weergawe, byvoorbeeld vir MacOSX Sierra wat jy sal moet skryf MACOSX_DEPLOYMENT_TARGET=10.12 pip installeer horovod
Installeer dan OpenMPI
Laai aan die einde die toetsskrif af mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Dit sal opleiding op twee kerne van jou verwerker laat loop. Die uitset sal die volgende wees:
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
Prestasie Demo
Wanneer 'n ResNet50-v1-model op 'n ImageNet-datastel op 64 GPU's met agt gevalle opgelei word p3.16xgroot EC2, wat elk 8 NVIDIA Tesla V100 GPU's op AWS-wolk bevat, het ons 'n opleidingsdeurset van 45000 44 beelde/sek (d.w.s. die aantal opgeleide monsters per sekonde) behaal. Opleiding voltooi in 90 minute na 75.7 tydperke met 'n beste akkuraatheid van XNUMX%.
Ons het dit vergelyk met MXNet se verspreide opleidingsbenadering om parameterbedieners op 8, 16, 32 en 64 GPU's te gebruik met 'n enkele parameter bediener en 'n bediener tot werker verhouding van onderskeidelik 1 tot 1 en 2 tot 1. Jy kan die resultaat in Figuur 1 hieronder sien. Op die y-as aan die linkerkant verteenwoordig die stawe die aantal beelde om per sekonde op te lei, die lyne weerspieël die skaaldoeltreffendheid (dit wil sê die verhouding van werklike tot ideale deurset) op die y-as aan die regterkant. Soos u kan sien, beïnvloed die keuse van die aantal bedieners die skaaldoeltreffendheid. As daar net een parameterbediener is, daal die skaaldoeltreffendheid tot 38% op 64 GPU's. Om dieselfde skaaldoeltreffendheid as met Horovod te bereik, moet jy die aantal bedieners verdubbel relatief tot die aantal werkers.
Figuur 1. Vergelyking van verspreide leer met behulp van MXNet met Horovod en met parameterbediener
In Tabel 1 hieronder vergelyk ons die finale koste per geval wanneer eksperimente op 64 GPU's uitgevoer word. Die gebruik van MXNet met Horovod bied die beste deurset teen die laagste koste.
Tabel 1. Koste vergelyking tussen Horovod en Parameter Server met 'n bediener tot werker verhouding van 2 tot 1.
Stappe om voort te plant
In die volgende stappe sal ons jou wys hoe om die resultaat van verspreide opleiding met MXNet en Horovod weer te gee. Om meer te wete te kom oor verspreide leer met MXNet, lees
Stap 1
Skep 'n groep homogene gevalle met MXNet weergawe 1.4.0 of hoër en Horovod weergawe 0.16.0 of hoër om verspreide leer te gebruik. Jy sal ook biblioteke moet installeer vir GPU-opleiding. Vir ons gevalle het ons Ubuntu 16.04 Linux gekies, met GPU-bestuurder 396.44, CUDA 9.2, cuDNN 7.2.1-biblioteek, NCCL 2.2.13-kommunikeerder en OpenMPI 3.1.1. Jy kan ook gebruik
Stap 2
Voeg die vermoë om met die Horovod API te werk by jou MXNet-opleidingskrip. Die onderstaande skrif gebaseer op die MXNet Gluon API kan as 'n eenvoudige sjabloon gebruik word. Die vetgedrukte lyne is nodig as jy reeds 'n ooreenstemmende opleidingskrif het. Hier is 'n paar kritieke veranderinge wat jy moet maak om met Horovod te leer:
- Stel die konteks volgens die plaaslike Horovod-rang (reël 8) om te verstaan dat opleiding op die korrekte grafiese kern uitgevoer word.
- Gee aanvanklike parameters van een werker na almal deur (reël 18) om te verseker dat alle werkers met dieselfde aanvanklike parameters begin.
- Skep 'n Horovod DistributedOptimizer (reël 25) om die parameters op 'n verspreide wyse op te dateer.
Om die volledige skrif te kry, verwys asseblief na die Horovod-MXNet-voorbeelde
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 ...
Stap 3
Meld aan by een van die werkers om verspreide opleiding te begin deur die MPI-voorskrif te gebruik. In hierdie voorbeeld loop verspreide opleiding op vier gevalle met 4 GPU's elk, en 'n totaal van 16 GPU's in die groep. Die Stogastiese Gradient Descent (SGD) optimiseerder sal met die volgende hiperparameters gebruik word:
- mini-batch grootte: 256
- leertempo: 0.1
- momentum: 0.9
- gewig verval: 0.0001
Soos ons van een GPU na 64 GPU's afgeskaal het, het ons die opleidingstempo lineêr afgeskaal volgens die aantal GPU's (van 0,1 vir 1 GPU's tot 6,4 vir 64 GPU's), terwyl ons die aantal beelde per GPU op 256 gehou het (van 'n bondel van 256 beelde vir 1 GPU tot 16 384 vir 64 GPU's). Die gewigsverval en momentumparameters het verander namate die aantal GPU's toegeneem het. Ons het gemengde presisie-opleiding gebruik met die float16-datatipe vir die voorwaartse pas en float32 vir gradiënte om die float16-berekeninge wat deur NVIDIA Tesla GPU's ondersteun word, te bespoedig.
$ 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
Gevolgtrekking
In hierdie artikel het ons gekyk na 'n skaalbare benadering tot verspreide modelopleiding met behulp van Apache MXNet en Horovod. Ons het die skaaldoeltreffendheid en kostedoeltreffendheid gedemonstreer in vergelyking met die parameterbedienerbenadering op die ImageNet-datastel waarop die ResNet50-v1-model opgelei is. Ons het ook stappe ingesluit wat jy kan gebruik om 'n bestaande skrif te verander om multi-instansie opleiding met Horovod uit te voer.
As jy net begin met MXNet en diep leer, gaan na die installasie bladsy
As jy reeds met MXNet gewerk het en verspreide leer met Horovod wil probeer, kyk dan na
*koste word bereken op grond van
Kom meer te wete oor die kursus
Bron: will.com