Tagħlim imqassam b'Apache MXNet u Horovod

It-traduzzjoni tal-artiklu tħejjiet lejlet il-bidu tal-kors "ML Industrijali fuq Big Data"

Taħriġ imqassam fuq każijiet multipli ta 'kompjuters ta' prestazzjoni għolja jista 'jnaqqas il-ħin ta' taħriġ ta 'netwerks newrali profondi moderni fuq ammonti kbar ta' dejta minn ġimgħat għal sigħat jew saħansitra minuti, u jagħmel din it-teknika ta 'taħriġ prevalenti f'applikazzjonijiet prattiċi ta' tagħlim profond. L-utenti jridu jifhmu kif jaqsmu u jissinkronizzaw id-dejta f'diversi istanzi, li mbagħad għandu impatt kbir fuq l-effiċjenza tal-iskala. Barra minn hekk, l-utenti għandhom ukoll ikunu jafu kif jużaw script ta 'taħriġ li jaħdem fuq istanza waħda għal istanzi multipli.

F'dan l-artikolu ser nitkellmu dwar mod rapidu u faċli biex jitqassam it-tagħlim bl-użu tal-librerija miftuħa ta 'tagħlim profond Apache MXNet u l-qafas ta' tagħlim distribwit Horovod. Se nuru b'mod ċar il-benefiċċji tal-prestazzjoni tal-qafas ta 'Horovod u nuru kif tikteb script ta' taħriġ MXNet sabiex taħdem b'mod distribwit ma 'Horovod.

X'inhu Apache MXNet

Apache MX Net huwa qafas ta' tagħlim profond ta' sors miftuħ li jintuża biex jinħolqu, jitħarrġu u jiġu skjerati netwerks newrali profondi. MXNet jastraxxi l-kumplessitajiet assoċjati mal-implimentazzjoni ta' netwerks newrali, huwa ta' prestazzjoni u skalabbli ħafna, u joffri APIs għal lingwi ta' programmar popolari bħal Python, C ++, Clojure, Java, Julia, R, iskala u oħrajn.

Taħriġ imqassam f'MXNet b'server tal-parametri

Modulu standard ta' tagħlim distribwit f'MXNet juża approċċ ta' server ta' parametri. Juża sett ta 'servers tal-parametri biex jiġbor gradjenti minn kull ħaddiem, iwettaq aggregazzjoni, u jibgħat gradjenti aġġornati lura lill-ħaddiema għall-iterazzjoni ta' ottimizzazzjoni li jmiss. Id-determinazzjoni tal-proporzjon korrett ta 'servers għall-ħaddiema hija ċ-ċavetta għal skalar effettiv. Jekk ikun hemm server ta 'parametru wieħed biss, jista' jirriżulta li jkun ostakolu fil-kalkoli. Bil-maqlub, jekk jintużaw wisq servers, il-komunikazzjoni minn ħafna għal ħafna tista' tfixkel il-konnessjonijiet tan-netwerk kollha.

X'inhu Horovod

Horovod huwa qafas miftuħ ta' tagħlim profond distribwit żviluppat f'Uber. Jisfrutta teknoloġiji effiċjenti cross-GPU u cross-node bħal NVIDIA Collective Communications Library (NCCL) u Message Passing Interface (MPI) biex iqassam u jaggrega parametri tal-mudell fuq vorecs. Jottimizza l-użu tal-bandwidth tan-netwerk u tiskali tajjeb meta taħdem ma 'mudelli ta' netwerk newrali profond. Bħalissa jappoġġa diversi oqfsa popolari ta 'tagħlim tal-magni, jiġifieri MX Net, Tensorflow, Keras, u PyTorch.

Integrazzjoni MXNet u Horovod

MXNet jintegra ma 'Horovod permezz tal-APIs ta' Tagħlim Imqassam definiti f'Horovod. APIs ta' komunikazzjoni ta' Horovod horovod.broadcast(), horovod.allgather() и horovod.allreduce() implimentati bl-użu ta' callbacks asinkroniċi tal-magna MXNet, bħala parti mill-grafika tal-kompitu tagħha. B'dan il-mod, id-dipendenzi tad-dejta bejn il-komunikazzjoni u l-komputazzjoni huma mmaniġġjati faċilment mill-magna MXNet biex jiġi evitat telf ta 'prestazzjoni minħabba s-sinkronizzazzjoni. Oġġett tal-ottimizzatur imqassam definit f'Horovod horovod.DistributedOptimizer tespandi Ottimizzatur f'MXNet sabiex isejjaħ lill-APIs Horovod korrispondenti għal aġġornamenti tal-parametri distribwiti. Dawn id-dettalji tal-implimentazzjoni kollha huma trasparenti għall-utenti finali.

Bidu mgħaġġel

Tista 'malajr tibda tħarreġ netwerk newrali konvoluzzjonali żgħir fuq is-sett tad-dejta MNIST billi tuża MXNet u Horovod fuq il-MacBook tiegħek.
L-ewwel, installa mxnet u horovod minn PyPI:

pip install mxnet
pip install horovod

Nota: Jekk tiltaqa' ma' żball waqt pip install horovodforsi għandek bżonn iżżid varjabbli MACOSX_DEPLOYMENT_TARGET=10.vvfejn vv – din hija l-verżjoni tal-verżjoni tal-MacOS tiegħek, pereżempju, għal MacOSX Sierra ser ikollok bżonn tikteb MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

Imbagħad installa OpenMPI għalhekk.

Fl-aħħar, niżżel l-iskrittura tat-test mxnet_mnist.py għalhekk u mexxi l-kmandi li ġejjin fit-terminal tal-MacBook fid-direttorju tax-xogħol:

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

Dan se jmexxi taħriġ fuq żewġ qlub tal-proċessur tiegħek. L-output se jkun dan li ġej:

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

Prestazzjoni Demo

Meta tħarreġ mudell ResNet50-v1 fuq sett tad-dejta ImageNet fuq 64 GPU bi tmien istanzi p3.16xlarge EC2, kull wieħed fih 8 GPUs NVIDIA Tesla V100 fuq AWS cloud, ksibna throughput ta 'taħriġ ta' 45000 immaġini / sek (jiġifieri, in-numru ta 'kampjuni mħarrġa kull sekonda). Taħriġ tlesta f'44 minuta wara 90 epoka bl-aħjar preċiżjoni ta '75.7%.

Aħna qabbilna dan mal-approċċ ta 'taħriġ distribwit ta' MXNet li juża servers ta 'parametri fuq 8, 16, 32 u 64 GPUs b'server ta' parametru wieħed u proporzjon ta 'server għal ħaddiem ta' 1 għal 1 u 2 għal 1, rispettivament. Tista 'tara r-riżultat fil-Figura 1 hawn taħt. Fuq l-assi y fuq ix-xellug, il-vireg jirrappreżentaw in-numru ta 'immaġini li jitħarrġu kull sekonda, il-linji jirriflettu l-effiċjenza tal-iskala (jiġifieri, il-proporzjon ta' throughput attwali għal ideali) fuq l-assi y fuq il-lemin. Kif tistgħu taraw, l-għażla tan-numru ta 'servers taffettwa l-effiċjenza tal-iskala. Jekk ikun hemm server ta 'parametru wieħed biss, l-effiċjenza tal-iskala tinżel għal 38% fuq 64 GPU. Biex tikseb l-istess effiċjenza tal-iskala bħal ma 'Horovod, trid tirdoppja n-numru ta' servers relattiv għan-numru ta 'ħaddiema.

Tagħlim imqassam b'Apache MXNet u Horovod
Figura 1. Tqabbil ta 'tagħlim distribwit bl-użu ta' MXNet ma 'Horovod u ma' server tal-parametri

Fit-Tabella 1 hawn taħt, inqabblu l-ispiża finali għal kull istanza meta nwettqu esperimenti fuq 64 GPU. L-użu ta 'MXNet ma' Horovod jipprovdi l-aħjar throughput bl-inqas spiża.

Tagħlim imqassam b'Apache MXNet u Horovod
Tabella 1. Tqabbil tal-ispejjeż bejn Horovod u Parameter Server b'proporzjon ta 'server għal ħaddiem ta' 2 għal 1.

Passi biex tirriproduċi

Fil-passi li jmiss, aħna ser nuruk kif tirriproduċi r-riżultat ta 'taħriġ distribwit bl-użu ta' MXNet u Horovod. Biex titgħallem aktar dwar it-tagħlim imqassam b'MXNet aqra din il-kariga.

Pass 1

Oħloq raggruppament ta 'istanzi omoġenji b'MXNet verżjoni 1.4.0 jew ogħla u Horovod verżjoni 0.16.0 jew ogħla biex tuża t-tagħlim distribwit. Ikollok bżonn ukoll li tinstalla libreriji għat-taħriġ tal-GPU. Għall-każijiet tagħna, għażilna Ubuntu 16.04 Linux, b'GPU Driver 396.44, CUDA 9.2, librerija cuDNN 7.2.1, komunikatur NCCL 2.2.13 u OpenMPI 3.1.1. Tista 'wkoll tuża Amazon Deep Learning AMI, fejn dawn il-libreriji huma diġà installati minn qabel.

Pass 2

Żid il-ħila li taħdem ma' l-API ta' Horovod fl-iskript tat-taħriġ MXNet tiegħek. L-iskrittura ta 'hawn taħt ibbażata fuq l-API MXNet Gluon tista' tintuża bħala mudell sempliċi. Il-linji b'tipa grassa huma meħtieġa jekk diġà għandek kitba ta' taħriġ korrispondenti. Hawn huma ftit bidliet kritiċi li trid tagħmel biex titgħallem ma' Horovod:

  • Issettja l-kuntest skond il-grad lokali Horovod (linja 8) biex tifhem li t-taħriġ isir fuq il-qalba tal-grafika korretta.
  • Għaddi l-parametri inizjali minn ħaddiem wieħed għal kulħadd (linja 18) biex jiġi żgurat li l-ħaddiema kollha jibdew bl-istess parametri inizjali.
  • Oħloq Horovod DistributedOptimizer (linja 25) biex taġġorna l-parametri b'mod distribwit.

Biex tikseb l-iskrittura sħiħa, jekk jogħġbok irreferi għall-eżempji ta '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    ...

Pass 3

Idħol f'wieħed mill-ħaddiema biex tibda t-taħriġ imqassam bl-użu tad-direttiva MPI. F'dan l-eżempju, it-taħriġ imqassam jimxi fuq erba' istanzi b'4 GPU kull wieħed, u total ta' 16-il GPU fil-cluster. L-ottimizzatur tal-Inżul tal-Gradjent Stokastiku (SGD) se jintuża bl-iperparametri li ġejjin:

  • daqs tal-lott żgħir: 256
  • rata ta 'tagħlim: 0.1
  • momentum: 0.9
  • tħassir tal-piż: 0.0001

Hekk kif qlajna minn GPU waħda għal 64 GPU, skalajna b'mod lineari r-rata ta' taħriġ skont in-numru ta' GPU (minn 0,1 għal 1 GPU għal 6,4 għal 64 GPU), filwaqt li nżommu n-numru ta' immaġini għal kull GPU f'256 (minn lott ta' 256 immaġini għal 1 GPU għal 16 għal 384 GPU). It-tnaqqis tal-piż u l-parametri tal-momentum inbidlu hekk kif in-numru ta 'GPUs żdied. Aħna użajna taħriġ ta 'preċiżjoni mħallta mat-tip ta' dejta float64 għall-passa 'l quddiem u float16 għal gradjenti biex tħaffef il-kalkoli float32 appoġġjati mill-GPUs NVIDIA Tesla.

$ 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

Konklużjoni

F'dan l-artikolu, ħares lejn approċċ skalabbli għal taħriġ ta 'mudell distribwit bl-użu ta' Apache MXNet u Horovod. Aħna wrejna l-effiċjenza tal-iskala u l-kosteffettività meta mqabbla mal-approċċ tas-server tal-parametri fuq is-sett tad-dejta ImageNet li fuqu ġie mħarreġ il-mudell ResNet50-v1. Inkludejna wkoll passi li tista' tuża biex timmodifika skript eżistenti biex tmexxi taħriġ multi-istanzi bl-użu ta' Horovod.

Jekk għadek kif tibda b'MXNet u tagħlim fil-fond, mur fil-paġna tal-installazzjoni MXNebiex l-ewwel tibni MXNet. Nirrakkomandaw bil-qawwa wkoll li taqra l-artiklu MXNet f'60 minutabiex tibda.

Jekk diġà ħdimt ma' MXNet u trid tipprova t-tagħlim imqassam ma' Horovod, imbagħad agħti ħarsa lejn Paġna ta 'installazzjoni ta' Horovod, ibniha minn MXNet u segwi l-eżempju MNIST jew ImageNet.

*l-ispiża hija kkalkulata bbażata fuq rati fis-siegħa AWS għall-istanzi EC2

Tgħallem aktar dwar il-kors "ML Industrijali fuq Big Data"

Sors: www.habr.com

Żid kumment