Distributa Doctrinae cum Apache MXNet et Horovod

Versio articuli praeparata est pervigilio initii " ML Industriae in Big Data"

Disciplina in multiplex summus perficientur computandi instantiis potest reducere disciplinae temporis hodierni retiacula profunda neuralis in magna copia notitiarum ab hebdomadibus ad horas vel etiam minutas, ut haec institutio technica ars praevaleat in applicationibus altae doctrinae. Usores intelligendi sunt quomodo notitias communicandi et synchronise per multiplices instantias, quae rursus maiorem ictum in efficientiam scalis habent. Praeter, utentes etiam sciunt quomodo explicandam esse scriptionem disciplinae quae in uno instantia ad plures instantias percurrit.

In hoc articulo loquemur de via celeri et facili ad discendum distribuendum utentes bibliothecam altam discendi apertam Apache MXNet et Horovod compagem discendi distributam. Luculenter demonstrabimus exhibitionem operis compagis Horovod et demonstrabimus quomodo scripturae disciplinae MXNet conscribendae sint ut modo distributo cum Horovod operetur.

Quid est Apache MXNet

Apache MX Net fons aperta est alta discendi compage, quae ad creandum, instituendum et ad alta retiacula neuralis explicanda adhibetur. MXNet complexitates abstrahit cum reticulis neuralis exsequendis, valde faciendos et scalabiles, et APIs praebet ad programmandi linguas populares quales sunt. Python, C ++, Clojure, Java, Julia, R, Scala et aliis.

Distribuit disciplina MXNet cum parametri servo

Vexillum eruditionis moduli in MXNet distributed distributum modulo utitur servo adventu. Statuto servientium parametri utitur ad gradus colligendos ab unoquoque opifice, aggregationem perficiendum, et ad renovatas gradus reducendos operarios pro altera optimization iteratione. Recta ratio determinandi de servientibus operariis clavis est ad scalas efficaces. Si modulus unus tantum sit, evenire potest ut in calculis bottleneck sit. Vice versa, si nimis multi servientes adhibentur, multi ad multam communicationem omnes retiaculorum nexus impedire possunt.

Quid est Horovod?

Horovod aperta est distributa alta doctrina in compage evoluta Über. Levat efficax cross-GPU et technologiae nodus ut NVIDIA Collectiva Communicationum Bibliotheca (NCCL) et Nuntius Interface (MPI) ad exemplar parametri per vorecs distribuendum et aggregatum. Optimatur usum band longitudinis et squamae retis bene operandi cum exemplaribus reticulis neural profundis. Hoc nunc complures machinae populares discendi fabricas sustinent, nempe MX NetTensorflow, Keras et PyTorch.

MXNet et Horovod integratio

MXNet integrat cum Horovod per Doctrinam Distributam APIs in Horovod definitam. Horovod communicatio APIs horovod.broadcast(), horovod.allgather () ΠΈ horovod.allreduce () utendo asynchrono instrumenti machinationis MXNet impletur, ut partem graphi operis sui. Hoc modo, dependentiae notitiae inter communicationem et supputationem facile a machinatione MXNet tractantur ad vitanda damna ob synchronizationem faciendam. Distribuit optimizer objectum definitum in Horovod horovod.DistributedOptimizer expands Optimizer in MXNet ita ut APIs Horovod respondentem vocet ad parametri updates distributa. Omnes hae exsecutiones singulae perspicuae sunt ad finem utentium.

Ieiunium satus

Cito potes instituere retiacula parva convolutionis neuralis in MNIST dataset utens MXNet et Horovod in MacBook.
Primum, mxnet et horovod institue a PyPI;

pip install mxnet
pip install horovod

Nota: Si per errorem occurrant pituitam install horovodmaybe debes addere variabilis MACOSX_DEPLOYMENT_TARGET=10.vvquibus vv - haec est versio MacOS versionis tuae, exempli gratia, pro MacOSX Sierra scribere debes MACOSX_DEPLOYMENT_TARGET= 10.12 pituitam inaugurationem horovod

Tunc install OpenMPI hic.

In fine, depone test scriptum mxnet_mnist.py hic et sequentia praecepta currunt in MacBook terminatio in directorio operativo:

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

Disciplina in duobus nucleis processus tui hoc fugiet. Output hoc erit:

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

euismod Demo

Cum disciplina ResNet50-v1 exemplar in ImageNet dataset in LXIV GPUs cum octo exemplis p3.16xlarge EC2, singuli 8 NVIDIA Tesla V100 GPUs in nube AWS, exercitationem per numerum 45000 imaginum/sec consecuti sumus (i.e., numerus exemplorum exercitatorum per alterum). Disciplina in 44 minutis post 90 epochae confecta cum optima subtilitate 75.7%.

Hanc ad MXNet distributam accessionem comparavimus utendi parametri servientibus in 8, 16, 32 et 64 GPUs cum uno servo parametri et servo operanti proportionis 1 ad 1 et 2 ad 1, respective. Eventum in Figura 1 infra videre potes. In y-axis sinistris vectes repraesentant numerum imaginum per alterum instituendi, lineae autem efficientiam (id est rationem actualis ad idealem perput) in dextra y-axis reflectunt. Ut videre potes, electio ministrantium ad efficientiam scalam pertinet. Si modulus unus tantum est, scala efficientiae cadit ad 38% in 64 GPUs. Ad eandem scalam augendam ac ad Horovod consequendam, debes duplicare numerum servientium secundum numerum opificum.

Distributa Doctrinae cum Apache MXNet et Horovod
Figura 1. Comparatio studiorum MXNet cum Horovod et cum parametri servo

In tabula 1 infra, extremum pretium per exemplum comparamus cum experimenta in 64 GPUs decurrendo. Usura MXNet cum Horovod optima throughput in infima pecunia praebet.

Distributa Doctrinae cum Apache MXNet et Horovod
Mensa 1. Pretium comparationis inter Horovod et Parameter Servo cum servo ad rationem laborantis 2 ad 1 .

Ad effingere

Proximis gradibus ostendemus tibi quomodo effingere effectus disciplinae distributae MXNet et Horovod utentes. Plus discere de doctrina distributa cum MXNet legere hoc post.

1 step

Botrus instantiarum homogenearum crea cum versione MXNet 1.4.0 vel superiore et Horovod versione 0.16.0 vel altiori utendi doctrina distributa. Etiam bibliothecas GPU instituendo instituere debebis. Pro nostris exemplis elegimus Decuria 16.04 Linux, cum GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 bibliotheca, NCCL 2.2.13 communicator et OpenMPI 3.1.1. Etiam uti potes Profunda Amazon AMIubi hae bibliothecae iam praeextiterunt.

2 step

Adde facultatem laborandi cum Horovod API ad MXNet scriptionem tuam instituendam. Scriptum inferius in MXNet Gluon API fundatum adhiberi potest pro simplici template. Lineae audacium necessariae sunt si iam habes scripturae congruentem institutionem. Hic paucae mutationes criticae cum Horovod discere debes:

  • Contextum pone iuxta gradum loci Horovod (line 8) ad intellegendum institutionem exercendam in nucleo recto graphics.
  • Praeterire parametri initiales ab uno opifice omnibus (versus 18) ut omnes operarii ab iisdem parametris initialibus incipiant.
  • Horovod creare DistributedOptimizer (line 25) ad parametri renovationem modo distributo.

Ut plenam scripturam, ad exempla Horovod-MXNet referre placet 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    ...

3 step

Log in unum ex operariis incipere distributa disciplina utens MPI directiva. In hoc exemplo institutio distributa percurrit in quatuor instantias cum 4 GPUs singulis, et summa 16 GPUs in botro. Descensus stochasticus Gradientis (SGD) optimizer adhibebitur cum sequentibus hyperparametris:

  • mini-batch size: 256
  • doctrina rate: 0.1
  • momentum: 0.9
  • pondus labe: 0.0001

Cum ab uno GPU ad 64 GPUs escendimus, secundum numerum GPUs (ab 0,1 pro 1 GPU ad 6,4 pro 64 GPUs ascendimus), numerum imaginum per GPU ad 256 (ex massam imaginum retinemus) 256 imagines pro 1 GPU ad 16 pro 384 GPUs). Pondus deminutio et momentum parametri mutaverunt sicut numerus GPUs auctus est. Mixta accuratione formationem cum float64 datarum specierum ad transitum antrorsum et float16 ad gradientes ad accelerandum calculis subnixis NVIDIA Tesla GPUs usi sumus.

$ 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

conclusio,

In hoc articulo inspeximus accessum scalabilem ad exemplar disciplinae distribuendum utentes Apache MXNet et Horovod. Demonstravimus scalam efficientiam et efficaciam sumptus-efficentiae comparati ad parametri servi accessum in Imaginibus Dataset in quo exemplar ResNet50-v1 institutum est. Vestigia etiam inclusa habuimus quibus scriptum exsistentem mutare potes uti ad multi-exstantiae disciplinae usus Horovod currendam.

Si mox cum MXNet et alta doctrina incepit, vade ad paginam institutionem MXNeut prius MXNet. Nos quoque articulum valde commendamus legentes MXNet in LX minutaut incipiat.

Si iam cum MXNet laboravi et doctrinam cum Horovod distributam experiri vis, vide at Horovod institutionem paginamex MXNet aedifica et sequere exemplum MNIST aut ImageNet.

* Pretium computatur secundum hourly rates AWS pro EC2 Instantiae

Disce magis circa cursum " ML Industriae in Big Data"

Source: www.habr.com