Giapod-apod nga Pagkat-on uban sa Apache MXNet ug Horovod

Ang paghubad sa artikulo giandam sa bisperas sa pagsugod sa kurso "Industrial ML sa Dakong Data"

Ang gipang-apod-apod nga pagbansay sa daghang mga higayon sa high-performance computing makapakunhod sa oras sa pagbansay sa mga modernong deep neural network sa daghang mga datos gikan sa mga semana ngadto sa mga oras o bisan mga minuto, nga naghimo niini nga teknik sa pagbansay nga kaylap sa praktikal nga mga aplikasyon sa lawom nga pagkat-on. Kinahanglan nga masabtan sa mga tiggamit kung giunsa ang pagpaambit ug pag-synchronize sa datos sa daghang mga higayon, nga sa baylo adunay dako nga epekto sa kahusayan sa pag-scale. Dugang pa, ang mga tiggamit kinahanglan usab nga mahibal-an kung giunsa ang pag-deploy sa usa ka script sa pagbansay nga nagdagan sa usa ka higayon hangtod sa daghang mga higayon.

Niining artikuloha maghisgot kita bahin sa usa ka dali ug sayon ​​nga paagi sa pag-apod-apod sa pagkat-on gamit ang bukas nga lawom nga librarya sa pagkat-on Apache MXNet ug ang Horovod distributed learning framework. Klaro natong ipakita ang mga benepisyo sa pasundayag sa gambalay sa Horovod ug ipakita kon unsaon pagsulat ang script sa pagbansay sa MXNet aron kini molihok sa paagi nga gipang-apod-apod sa Horovod.

Unsa ang Apache MXNet

Apache MX Net usa ka open-source nga lawom nga balangkas sa pagkat-on nga gigamit sa paghimo, pagbansay, ug pag-deploy sa lawom nga mga neural network. Gikuha sa MXNet ang mga pagkakomplikado nga nalangkit sa pag-implementar sa mga neural network, maayo kaayo nga performance ug scalable, ug nagtanyag og mga API alang sa mga sikat nga programming language sama sa Python, C ++, Clojure, Java, Julia, R, Scala ug uban pa.

Giapod-apod nga pagbansay sa MXNet nga adunay parameter server

Standard nga gipang-apod-apod nga module sa pagkat-on sa MXNet naggamit ug parameter server approach. Naggamit kini og set sa mga parameter server aron makolekta ang mga gradient gikan sa matag trabahante, paghimo og aggregation, ug ipadala ang updated nga gradients balik ngadto sa mga trabahante para sa sunod nga optimization iteration. Ang pagtino sa husto nga ratio sa mga server sa mga trabahante mao ang yawe sa epektibo nga pag-scaling. Kung adunay usa ra ka parameter server, mahimo’g kini usa ka bottleneck sa mga kalkulasyon. Sa kasukwahi, kung daghan kaayo nga mga server ang gigamit, ang daghang-sa-daghan nga komunikasyon mahimong makabara sa tanan nga koneksyon sa network.

Unsa ang Horovod

Horovod usa ka bukas nga gipang-apod-apod nga lawom nga balangkas sa pagkat-on nga gihimo sa Uber. Gigamit niini ang episyente nga cross-GPU ug cross-node nga mga teknolohiya sama sa NVIDIA Collective Communications Library (NCCL) ug Message Passing Interface (MPI) aron ipang-apod-apod ug igrupo ang mga parameter sa modelo sa mga vorrecs. Gi-optimize niini ang paggamit sa bandwidth sa network ug maayo ang mga timbangan kung nagtrabaho sa lawom nga mga modelo sa neural network. Kini karon nagsuporta sa pipila ka popular nga machine learning frameworks, nga mao MX Net, Tensorflow, Keras, ug PyTorch.

Paghiusa sa MXNet ug Horovod

Ang MXNet nakig-uban sa Horovod pinaagi sa Distributed Learning APIs nga gihubit sa Horovod. Mga API sa komunikasyon sa Horovod horovod.broadcast(), horovod.allgather() ΠΈ horovod.allreduce() gipatuman gamit ang asynchronous nga mga callback sa MXNet engine, isip kabahin sa task graph niini. Niining paagiha, ang mga dependency sa datos tali sa komunikasyon ug pag-compute dali nga madumala sa MXNet nga makina aron malikayan ang pagkawala sa performance tungod sa pag-synchronize. Gipanagtag nga optimizer nga butang nga gihubit sa Horovod horovod.DistributedOptimizer nagpalapad Ang pagkamalaumon sa MXNet aron kini motawag sa katugbang nga mga Horovod API alang sa gipang-apod-apod nga mga update sa parameter. Ang tanan niini nga mga detalye sa pagpatuman klaro sa mga end user.

Paspas nga pagsugod

Makasugod ka dayon sa pagbansay sa usa ka gamay nga convolutional neural network sa MNIST dataset gamit ang MXNet ug Horovod sa imong MacBook.
Una, i-install ang mxnet ug horovod gikan sa PyPI:

pip install mxnet
pip install horovod

Mubo nga sulat: Kung makasugat ka og sayup sa panahon pip install horovodtingali kinahanglan nimo nga idugang ang usa ka variable MACOSX_DEPLOYMENT_TARGET=10.vvdiin vv - kini ang bersyon sa imong bersyon sa MacOS, pananglitan, para sa MacOSX Sierra kinahanglan nimo isulat MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

Dayon i-install ang OpenMPI gikan dinhi.

Sa katapusan, i-download ang test script mxnet_mnist.py gikan dinhi ug ipadagan ang mosunod nga mga sugo sa MacBook terminal sa working directory:

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

Kini magpadagan sa pagbansay sa duha ka mga core sa imong processor. Ang output mao ang mosunod:

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 sa Pagganap

Kung nagbansay sa usa ka modelo nga ResNet50-v1 sa usa ka dataset sa ImageNet sa 64 nga mga GPU nga adunay walo ka mga higayon p3.16x dako EC2, ang matag usa adunay 8 NVIDIA Tesla V100 GPUs sa AWS cloud, nakab-ot namo ang training throughput nga 45000 images/sec (ie, ang gidaghanon sa nabansay nga sample kada segundo). Ang pagbansay nahuman sa 44 minuto pagkahuman sa 90 nga mga panahon nga adunay labing katumpak nga 75.7%.

Gikumpara namo kini sa giapod-apod nga pamaagi sa pagbansay sa MXNet sa paggamit sa mga parameter server sa 8, 16, 32 ug 64 GPUs nga adunay usa ka parameter server ug server sa worker ratio nga 1 ngadto sa 1 ug 2 ngadto sa 1, matag usa. Imong makita ang resulta sa Figure 1 sa ubos. Sa y-axis sa wala, ang mga bar nagrepresentar sa gidaghanon sa mga imahe nga gibansay matag segundo, ang mga linya nagpakita sa scaling efficiency (nga mao, ang ratio sa aktuwal ngadto sa ideal nga throughput) sa y-axis sa tuo. Sama sa imong nakita, ang pagpili sa gidaghanon sa mga server makaapekto sa kahusayan sa scaling. Kung adunay usa ra ka parameter nga server, ang kahusayan sa pag-scale nahulog sa 38% sa 64 nga mga GPU. Aron makab-ot ang parehas nga scaling efficiency sama sa Horovod, kinahanglan nimo nga doblehon ang gidaghanon sa mga server nga may kalabotan sa gidaghanon sa mga trabahante.

Giapod-apod nga Pagkat-on uban sa Apache MXNet ug Horovod
Figure 1. Pagtandi sa gipang-apod-apod nga pagkat-on gamit ang MXNet sa Horovod ug sa parameter server

Sa Talaan 1 sa ubos, among gitandi ang katapusang gasto kada higayon kung nagdagan sa mga eksperimento sa 64 GPUs. Ang paggamit sa MXNet sa Horovod naghatag sa labing kaayo nga throughput sa labing ubos nga gasto.

Giapod-apod nga Pagkat-on uban sa Apache MXNet ug Horovod
Talaan 1. Pagtandi sa gasto tali sa Horovod ug Parameter Server nga adunay server ngadto sa trabahante nga ratio nga 2 ngadto sa 1.

Mga lakang sa pagpanganak

Sa sunod nga mga lakang, ipakita namo kanimo kung unsaon pag-reproduce ang resulta sa gipang-apod-apod nga pagbansay gamit ang MXNet ug Horovod. Aron makakat-on og dugang mahitungod sa gipang-apod-apod nga pagkat-on gamit ang MXNet basaha kini nga post.

lakang 1

Paghimo usa ka pundok sa mga homogenous nga mga higayon nga adunay MXNet nga bersyon 1.4.0 o mas taas ug Horovod nga bersyon 0.16.0 o mas taas aron magamit ang giapod-apod nga pagkat-on. Kinahanglan nimo usab nga mag-install og mga librarya alang sa pagbansay sa GPU. Alang sa among mga higayon, gipili namo ang Ubuntu 16.04 Linux, nga adunay GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 library, NCCL 2.2.13 communicator ug OpenMPI 3.1.1. Mahimo usab nimo gamiton Amazon Deep Learning AMI, diin kini nga mga librarya na-pre-install na.

lakang 2

Idugang ang abilidad sa pagtrabaho kauban ang Horovod API sa imong script sa pagbansay sa MXNet. Ang ubos nga script base sa MXNet Gluon API mahimong magamit isip usa ka yano nga template. Ang mga linya sa bold gikinahanglan kung aduna ka'y ​​katugbang nga script sa pagbansay. Ania ang pipila ka hinungdanon nga mga pagbag-o nga kinahanglan nimong buhaton aron makat-on sa Horovod:

  • Ibutang ang konteksto sumala sa lokal nga ranggo sa Horovod (linya 8) aron masabtan nga ang pagbansay gihimo sa husto nga graphic core.
  • Ipasa ang mga inisyal nga parameter gikan sa usa ka trabahante ngadto sa tanan (linya 18) aron masiguro nga ang tanang mga trabahante magsugod sa samang inisyal nga mga parameter.
  • Paghimo og Horovod DistributedOptimizer (linya 25) aron ma-update ang mga parametro sa paagi nga gipang-apod-apod.

Aron makuha ang tibuok nga script, palihog tan-awa ang mga pananglitan sa 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    ...

lakang 3

Pag-log in sa usa sa mga trabahante aron masugdan ang pag-apod-apod sa pagbansay gamit ang direktiba sa MPI. Niini nga pananglitan, ang gipang-apod-apod nga pagbansay nagdagan sa upat ka mga higayon nga adunay 4 nga mga GPU matag usa, ug usa ka kinatibuk-an nga 16 nga mga GPU sa cluster. Ang Stochastic Gradient Descent (SGD) optimizer gamiton sa mosunod nga mga hyperparameter:

  • mini-batch nga gidak-on: 256
  • rate sa pagkat-on: 0.1
  • kusog: 0.9
  • gibug-aton pagkadunot: 0.0001

Sa among pag-scale gikan sa usa ka GPU ngadto sa 64 GPUs, among gi-linearly nga gi-scale ang training rate sumala sa gidaghanon sa GPUs (gikan sa 0,1 alang sa 1 GPU ngadto sa 6,4 para sa 64 GPUs), samtang gipabilin ang gidaghanon sa mga imahe kada GPU sa 256 (gikan sa usa ka batch sa 256 ka mga hulagway alang sa 1 GPU ngadto sa 16 alang sa 384 ka GPU). Ang pagkadunot sa gibug-aton ug ang mga parameter sa momentum nausab samtang ang gidaghanon sa mga GPU misaka. Gigamit namo ang nagkasagol nga precision training sa float64 data type para sa forward pass ug float16 para sa gradients aron mapadali ang float32 kalkulasyon nga gisuportahan sa 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

konklusyon

Niini nga artikulo, among gitan-aw ang usa ka scalable nga pamaagi sa gipang-apod-apod nga pagbansay sa modelo gamit ang Apache MXNet ug Horovod. Gipakita namo ang scaling efficiency ug cost-effectiveness kon itandi sa parameter server approach sa ImageNet dataset diin ang ResNet50-v1 nga modelo gibansay. Giapil usab namo ang mga lakang nga imong magamit sa pag-usab sa usa ka kasamtangan nga script sa pagpadagan sa multi-instance nga pagbansay gamit ang Horovod.

Kung nagsugod ka pa sa MXNet ug lawom nga pagkat-on, adto sa panid sa pag-install MXNesa una nga pagtukod sa MXNet. Girekomenda usab namon nga basahon ang artikulo MXNet sulod sa 60 minutossa pagsugod.

Kung nakatrabaho ka na sa MXNet ug gusto nimong sulayan ang giapod-apod nga pagkat-on sa Horovod, unya tan-awa ang Panid sa pag-install sa Horovod, buhata kini gikan sa MXNet ug sunda ang panig-ingnan MNIST o ImageNet.

*Ang gasto gikalkulo base sa matag oras nga rates AWS para sa EC2 Instance

Pagkat-on og dugang mahitungod sa kurso "Industrial ML sa Dakong Data"

Source: www.habr.com

Idugang sa usa ka comment