Fianarana mizara miaraka amin'i Apache MXNet sy Horovod

Ny fandikana ny lahatsoratra dia nomanina tamin'ny fiandohan'ny fianarana "ML indostrialy amin'ny angona lehibe"

Ny fampiofanana zaraina amin'ny tranga informatika mahomby maro dia afaka mampihena ny fotoana fanofanana ny tambajotra neural lalina maoderina amin'ny angon-drakitra be dia be ao anatin'ny herinandro ka hatramin'ny ora na minitra, ka mahatonga ity teknika fanofanana ity hanjaka amin'ny fampiharana azo ampiharina amin'ny fianarana lalina. Ny mpampiasa dia tsy maintsy mahatakatra ny fomba fizarana sy fampifanarahana ny angona amin'ny tranga maro, izay misy fiantraikany lehibe amin'ny fahombiazan'ny scaling. Ho fanampin'izay, tokony ho fantatry ny mpampiasa ihany koa ny fomba fametrahana script fanofanana izay mandeha amin'ny tranga tokana mankany amin'ny tranga maro.

Ato amin'ity lahatsoratra ity dia hiresaka momba ny fomba haingana sy mora amin'ny fizarana fianarana amin'ny fampiasana ny tranomboky fianarana lalina misokatra Apache MXNet sy ny rafitra fianarana nozaraina Horovod. Hasehontsika mazava tsara ny tombotsoan'ny fampisehoana ho an'ny rafitra Horovod ary hampiseho ny fomba hanoratana script fanofanana MXNet mba hiasa amin'ny fomba mizara miaraka amin'i Horovod.

Inona no atao hoe Apache MXNet

Apache MX Net dia rafitra fianarana lalina misy loharano misokatra izay ampiasaina hamoronana, hanofanana ary hametraka tambajotra neural lalina. Ny MXNet dia manaisotra ny fahasarotana mifandraika amin'ny fampiharana ny tambajotra neural, tena mahomby sy azo esorina, ary manolotra API ho an'ny fiteny fandaharana malaza toy ny Python, C ++, Clojure, Java, Julia, R, Scala ary ny hafa.

Fiofanana zaraina amin'ny MXNet miaraka amin'ny mpizara parameter

Module fianarana zaraina manara-penitra ao amin'ny MXNet mampiasa fomba fiasa mpizara parameter. Mampiasa lohamilina maromaro izy io mba hanangonana gradient avy amin'ny mpiasa tsirairay, hanaovana fanangonam-bokatra ary handefasana gradient nohavaozina hiverina any amin'ny mpiasa ho an'ny fanavaozana manaraka. Ny famaritana ny tahan'ny mpizara mety amin'ny mpiasa no fanalahidin'ny scaling mahomby. Raha toa ka tsy misy afa-tsy mpizara paramètre iray ihany, dia mety hivadika ho tavoara amin'ny kajy izany. Mifanohitra amin'izany, raha be loatra ny lohamilina ampiasaina, ny fifandraisana maro amin'ny maro dia mety hanakana ny fifandraisana rehetra amin'ny tambajotra.

Inona no atao hoe Horovod

Horovod dia rafitra fianarana lalina misokatra misokatra novolavolaina tao amin'ny Uber. Mampiasa teknolojia cross-GPU sy cross-node mahery toy ny NVIDIA Collective Communications Library (NCCL) sy Message Passing Interface (MPI) izy io mba hizarana sy hanambatra ny masontsivana modely manerana ny vorrecs. Izy io dia manatsara ny fampiasana ny bandwidth tambajotra ary mizana tsara rehefa miasa amin'ny modely tambajotra neural lalina. Izy io dia manohana rafitra fianarana milina malaza maro, izany hoe MX Net, Tensorflow, Keras, ary PyTorch.

Fampidirana MXNet sy Horovod

Ny MXNet dia mitambatra amin'ny Horovod amin'ny alàlan'ny API fianarana zaraina voafaritra ao amin'ny Horovod. Horovod communication APIs horovod.broadcast(), horovod.allgather() и horovod.allreduce() nampiharina tamin'ny alàlan'ny antso an-tariby asynchronous an'ny motera MXNet, ho ampahany amin'ny tabilaon'ny asa. Amin'izany fomba izany, ny fiankinan'ny angona eo amin'ny fifandraisana sy ny kajy dia mora fehezin'ny motera MXNet mba hialana amin'ny fatiantoka noho ny fampifanarahana. Zavatra optimizer zaraina voafaritra ao amin'ny Horovod horovod.DistributedOptimizer Mitatra ny Optimizer ao amin'ny MXNet mba hiantsoana ireo API Horovod mifanaraka amin'izany ho an'ny fanavaozam-baovao voazara. Ireo antsipiriany fampiharana rehetra ireo dia mangarahara amin'ny mpampiasa farany.

Manomboka haingana

Afaka manomboka manofana haingana tambajotra neural kely amin'ny angona MNIST ianao amin'ny fampiasana MXNet sy Horovod amin'ny MacBook-nao.
Voalohany, apetraho mxnet sy horovod avy amin'ny PyPI:

pip install mxnet
pip install horovod

Fanamarihana: Raha sendra misy hadisoana ianao mandritra ny pip install horovodmety mila ampiana variable ianao MACOSX_DEPLOYMENT_TARGET=10.vvizay vv – ity no dikan-tenin'ny MacOS anao, ohatra, ho an'ny MacOSX Sierra mila soratanao MACOSX_DEPLOYMENT_TARGET=10.12 pip fametrahana horovod

Ampidiro avy eo ny OpenMPI avy eto.

Amin'ny farany, alao ny script fitsapana mxnet_mnist.py avy eto ary tanteraho ireto baiko manaraka ireto ao amin'ny terminal MacBook ao amin'ny lahatahiry miasa:

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

Izany dia hitarika fiofanana amin'ny cores roa amin'ny processeur anao. Ny vokatra dia ho toy izao manaraka izao:

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

Demo fampisehoana

Rehefa manofana modely ResNet50-v1 amin'ny angon-drakitra ImageNet amin'ny GPU 64 misy tranga valo p3.16x lehibe EC2, izay misy GPU 8 NVIDIA Tesla V100 ao amin'ny rahona AWS, dia nahatratra 45000 ny sary / seg (izany hoe ny isan'ny santionany voaofana isan-tsegondra). Vita tao anatin'ny 44 minitra ny fiofanana taorian'ny vanim-potoana 90 miaraka amin'ny fahitsiana tsara indrindra amin'ny 75.7%.

Nampitahainay tamin'ny fomba fanofanana nozaraina tamin'ny MXNet amin'ny fampiasana server parameter amin'ny GPU 8, 16, 32 ary 64 miaraka amin'ny serivera tokana sy mpizara amin'ny mpiasa 1 ka hatramin'ny 1 ary 2 amin'ny 1. Hitanao ao amin'ny sary 1 etsy ambany ny valiny. Eo amin'ny axis y eo ankavia, ny bara dia maneho ny isan'ny sary hampiofanana isan-tsegondra, ny tsipika dia maneho ny fahombiazan'ny scaling (izany hoe ny tahan'ny tena izy amin'ny fivoahana tsara indrindra) eo amin'ny axis y eo ankavanana. Araka ny hitanao dia misy fiantraikany amin'ny fahombiazan'ny scaling ny fisafidianana ny isan'ny mpizara. Raha toa ka tsy misy afa-tsy mpizara parameter iray, dia midina ho 38% ny fahombiazan'ny scaling amin'ny GPU 64. Mba hahatratrarana ny fahombiazan'ny scaling mitovy amin'ny an'i Horovod dia mila ampitomboinao avo roa heny ny isan'ny mpizara raha oharina amin'ny isan'ny mpiasa.

Fianarana mizara miaraka amin'i Apache MXNet sy Horovod
Sary 1. Fampitahana ny fianarana mizara mampiasa MXNet amin'ny Horovod sy amin'ny mpizara parameter

Ao amin'ny tabilao 1 etsy ambany, dia mampitaha ny vidin'ny farany isaky ny tranga isika rehefa manao andrana amin'ny 64 GPU. Ny fampiasana MXNet miaraka amin'i Horovod dia manome ny vokatra tsara indrindra amin'ny vidiny ambany indrindra.

Fianarana mizara miaraka amin'i Apache MXNet sy Horovod
Tabilao 1. Fampitahana ny vidiny eo amin'ny Horovod sy Parameter Server miaraka amin'ny salan'isa mpizara amin'ny mpiasa 2 amin'ny 1.

Dingana hamerenana

Amin'ny dingana manaraka dia hasehontsika anao ny fomba famerenana ny vokatry ny fiofanana nozaraina amin'ny fampiasana MXNet sy Horovod. Raha te hianatra bebe kokoa momba ny fianarana zaraina miaraka amin'ny MXNet vakio ity lahatsoratra ity.

dingana 1

Mamoròna vondrona misy "instances" mitovy lenta miaraka amin'ny MXNet version 1.4.0 na ambony kokoa ary Horovod version 0.16.0 na ambony kokoa mba hampiasana ny "distributed training". Mila mametraka ireo "libraries" ho an'ny "GPU training" ihany koa ianao. Ho an'ireo "instances"-nay, dia nifidy izahay Ubuntu 16.04 Linux, miaraka amin'ny GPU Driver 396.44, CUDA 9.2, cuDNN library 7.2.1, NCCL communicator 2.2.13 ary OpenMPI 3.1.1. Azonao ampiasaina ihany koa Amazon Deep Learning AMI, izay efa voapetraka mialoha ireo tranomboky ireo.

dingana 2

Ampio ny fahaizana miara-miasa amin'ny Horovod API amin'ny script fanofanana MXNet anao. Ny script etsy ambany mifototra amin'ny MXNet Gluon API dia azo ampiasaina ho maodely tsotra. Ilaina ny andalana amin'ny bold raha efa manana script fanofanana mifanaraka amin'izany ianao. Ireto misy fiovana lehibe vitsivitsy tokony hataonao mba hianarana miaraka amin'i Horovod:

  • Mametraha ny teny manodidina araka ny laharana Horovod eo an-toerana (andalana faha-8) mba hahatakarana fa ny fiofanana dia atao amin'ny fototra sary marina.
  • Alefaso ny mason-tsivana voalohany avy amin'ny mpiasa iray mankany amin'ny rehetra (andalana 18) mba hahazoana antoka fa ny mpiasa rehetra dia manomboka amin'ny mari-pamantarana voalohany.
  • Mamorona Horovod DistributedOptimizer (andalana 25) hanavao ny masontsivana amin'ny fomba fizarana.

Raha te hahazo ny script feno dia jereo ny ohatra 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    ...

dingana 3

Midira ao amin'ny iray amin'ireo mpiasa hanomboka fizarana fiofanana amin'ny alàlan'ny torolàlana MPI. Amin'ity ohatra ity, ny fiofanana mizara dia mandeha amin'ny tranga efatra miaraka amin'ny GPU 4 tsirairay, ary GPU 16 amin'ny fitambarany. Ny optimizer Stochastic Gradient Descent (SGD) dia hampiasaina amin'ireto hyperparameter manaraka ireto:

  • haben'ny mini-batch: 256
  • tahan'ny fianarana: 0.1
  • hery: 0.9
  • lanja simba: 0.0001

Rehefa niakatra avy amin'ny GPU iray ka hatramin'ny GPU 64 izahay, dia nampitombo tsikelikely ny tahan'ny fanofanana araka ny isan'ny GPU (avy amin'ny 0,1 ho an'ny 1 GPU ka hatramin'ny 6,4 ho an'ny 64 GPU), raha mitazona ny isan'ny sary isaky ny GPU amin'ny 256 (avy amin'ny andiany iray. 256 sary ho an'ny 1 GPU ka hatramin'ny 16 ho an'ny 384 GPU). Niova ny fahapotehan'ny lanja sy ny mari-pandrefesana rehefa nitombo ny isan'ny GPU. Nampiasa fiofanana mazava tsara izahay miaraka amin'ny karazana data float64 ho an'ny pass forward sy float16 ho an'ny gradients mba hanafainganana ny kajy float32 tohanan'ny 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

famaranana

Ato amin'ity lahatsoratra ity, nijery fomba azo scalable amin'ny fiofanana modely mizara amin'ny fampiasana Apache MXNet sy Horovod izahay. Nasehonay ny fahombiazan'ny scaling sy ny fahombiazan'ny vidiny raha oharina amin'ny fomba fiasa mpizara parameter amin'ny angon-drakitra ImageNet izay nampiofanana ny modely ResNet50-v1. Nampidirinay ihany koa ny dingana azonao ampiasaina hanovana ny script efa misy mba hampandehanana fiofanana maromaro amin'ny fampiasana Horovod.

Raha vao manomboka amin'ny MXNet sy ny fianarana lalina ianao dia mandehana any amin'ny pejy fametrahana MXNemba hananganana MXNet voalohany. Manoro hevitra mafy koa izahay hamaky ilay lahatsoratra MXNet ao anatin'ny 60 minitrahanombohana.

Raha efa niara-niasa tamin'ny MXNet ianao ary te hanandrana fianarana mizara miaraka amin'i Horovod, dia jereo ny Pejy fametrahana Horovod, manamboatra azy avy amin'ny MXNet ary araho ny ohatra MNIST na IMAGEnet.

*Ny vidiny dia kajy mifototra amin'ny sara isan'ora AWS ho an'ny EC2 Instances

Mianara bebe kokoa momba ny fianarana "ML indostrialy amin'ny angona lehibe"

Source: www.habr.com

Mividiana fampiantranoana azo antoka ho an'ny tranokala misy fiarovana DDoS, mpizara VPS VDS 🔥 Mividiana fampiantranoana tranonkala azo antoka miaraka amin'ny fiarovana DDoS, mpizara VPS VDS | ProHoster