Versio articuli praeparata est pervigilio initii
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
Distribuit disciplina MXNet cum parametri servo
Quid est Horovod?
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
In fine, depone test scriptum mxnet_mnist.py
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.
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.
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
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
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
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
Si iam cum MXNet laboravi et doctrinam cum Horovod distributam experiri vis, vide at
* Pretium computatur secundum
Disce magis circa cursum
Source: www.habr.com