Itumọ nkan naa ni a pese sile ni aṣalẹ ti ibẹrẹ ikẹkọ naa
Ikẹkọ pinpin lori awọn iṣẹlẹ iširo iṣẹ-giga pupọ le dinku akoko ikẹkọ ti awọn nẹtiwọọki jinlẹ ti ode oni lori awọn oye nla ti data lati awọn ọsẹ si awọn wakati tabi paapaa awọn iṣẹju, ṣiṣe ilana ikẹkọ yii ni ibigbogbo ni awọn ohun elo iṣe ti ẹkọ jinlẹ. Awọn olumulo gbọdọ ni oye bi o ṣe le pin ati muuṣiṣẹpọ data kọja awọn iṣẹlẹ lọpọlọpọ, eyiti o ni ipa pataki lori ṣiṣe iwọnwọn. Ni afikun, awọn olumulo yẹ ki o tun mọ bi o ṣe le fi iwe afọwọkọ ikẹkọ ti o nṣiṣẹ lori apẹẹrẹ kan si awọn iṣẹlẹ pupọ.
Ninu àpilẹkọ yii a yoo sọrọ nipa ọna ti o yara ati irọrun lati pin kaakiri ẹkọ nipa lilo ile-ikawe ikẹkọ jinlẹ ti ṣiṣi Apache MXNet ati Horovod ilana ikẹkọ pinpin. A yoo ṣe afihan awọn anfani iṣẹ ti ilana Horovod ati ṣafihan bi o ṣe le kọ iwe afọwọkọ ikẹkọ MXNet ki o le ṣiṣẹ ni ọna pinpin pẹlu Horovod.
Kini Apache MXNet
Ikẹkọ pinpin ni MXNet pẹlu olupin paramita
Kí ni Horovod
MXNet ati Horovod Integration
MXNet ṣepọ pẹlu Horovod nipasẹ Awọn API Ẹkọ Pinpin ti a ṣalaye ni Horovod. Awọn API ibaraẹnisọrọ Horovod horovod.igbohunsafẹfẹ (), horovod.gbogbo () и horovod.allreduce() imuse nipa lilo asynchronous callbacks ti awọn MXNet engine, gẹgẹ bi ara ti awọn oniwe-ṣiṣe aworan. Ni ọna yii, awọn igbẹkẹle data laarin ibaraẹnisọrọ ati iṣiro jẹ irọrun mu nipasẹ ẹrọ MXNet lati yago fun awọn adanu iṣẹ ṣiṣe nitori mimuuṣiṣẹpọ. Pipin ohun optimizer telẹ ni Horovod horovod.DistributedOptimizer gbooro sii Optimizer ni MXNet ki o pe awọn API Horovod ti o baamu fun awọn imudojuiwọn paramita ti a pin. Gbogbo awọn alaye imuse wọnyi jẹ ṣiṣafihan si awọn olumulo ipari.
Yara ibere
O le yara bẹrẹ ikẹkọ kekere nẹtiwọọki nkankikan convolutional lori data MNIST nipa lilo MXNet ati Horovod lori MacBook rẹ.
Ni akọkọ, fi sori ẹrọ mxnet ati horovod lati PyPI:
pip install mxnet
pip install horovod
Akiyesi: Ti o ba pade aṣiṣe lakoko pip fi sori ẹrọ horovodboya o nilo lati fi oniyipada kun MACOSX_DEPLOYMENT_TARGET=10.vvnibo vv - Eyi ni ẹya ti ẹya MacOS rẹ, fun apẹẹrẹ, fun MacOSX Sierra iwọ yoo nilo lati kọ MACOSX_DEPLOYMENT_TARGET=10.12 pip fi horovod
Lẹhinna fi OpenMPI sori ẹrọ
Ni ipari, ṣe igbasilẹ iwe afọwọkọ idanwo naa mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Eyi yoo ṣiṣẹ ikẹkọ lori awọn ohun kohun meji ti ero isise rẹ. Ijade yoo jẹ atẹle yii:
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
Ririnkiri Performance
Nigbati ikẹkọ awoṣe ResNet50-v1 kan lori data data ImageNet lori 64 GPUs pẹlu awọn iṣẹlẹ mẹjọ p3.16x tobi EC2, ọkọọkan ti o ni 8 NVIDIA Tesla V100 GPUs lori awọsanma AWS, a ṣe aṣeyọri ipasẹ ikẹkọ ti awọn aworan 45000 / iṣẹju-aaya (ie, nọmba awọn ayẹwo ikẹkọ fun iṣẹju keji). Ikẹkọ ti pari ni awọn iṣẹju 44 lẹhin awọn akoko 90 pẹlu iṣedede ti o dara julọ ti 75.7%.
A ṣe afiwe eyi si ọna ikẹkọ pinpin pinpin ti MXNet ti lilo awọn olupin paramita lori 8, 16, 32 ati 64 GPUs pẹlu olupin paramita kan ati olupin si ipin oṣiṣẹ ti 1 si 1 ati 2 si 1, ni atele. O le wo abajade ni Nọmba 1 ni isalẹ. Lori y-axis ni apa osi, awọn ọpa jẹ aṣoju nọmba awọn aworan lati ṣe ikẹkọ fun iṣẹju-aaya, awọn ila ṣe afihan ṣiṣe igbelowọn (iyẹn ni, ipin ti gangan si ipasẹ to dara) lori y-axis ni apa ọtun. Bii o ti le rii, yiyan nọmba awọn olupin yoo ni ipa lori ṣiṣe iwọn. Ti olupin paramita kan ba wa, ṣiṣe igbelowọn silẹ si 38% lori 64 GPUs. Lati ṣaṣeyọri iṣẹ ṣiṣe iwọn kanna bi pẹlu Horovod, o nilo lati ilọpo meji nọmba awọn olupin ti o ni ibatan si nọmba awọn oṣiṣẹ.
Ṣe nọmba 1. Ifiwera ti ẹkọ pinpin nipa lilo MXNet pẹlu Horovod ati pẹlu olupin paramita
Ni Tabili 1 ni isalẹ, a ṣe afiwe idiyele ikẹhin fun apẹẹrẹ nigba ṣiṣe awọn idanwo lori 64 GPUs. Lilo MXNet pẹlu Horovod pese ipalọlọ ti o dara julọ ni idiyele ti o kere julọ.
Tabili 1. Ifiwera iye owo laarin Horovod ati Parameter Server pẹlu olupin si ipin oṣiṣẹ ti 2 si 1.
Awọn igbesẹ lati ẹda
Ni awọn igbesẹ ti o tẹle, a yoo fihan ọ bi o ṣe le ṣe atunṣe abajade ti ikẹkọ pinpin nipa lilo MXNet ati Horovod. Lati kọ ẹkọ diẹ sii nipa ẹkọ pinpin pẹlu MXNet ka
Igbesẹ 1
Ṣẹda iṣupọ ti awọn iṣẹlẹ isokan pẹlu ẹya MXNet 1.4.0 tabi ga julọ ati ẹya Horovod 0.16.0 tabi ga julọ lati lo ẹkọ ti o pin. Iwọ yoo tun nilo lati fi awọn ile-ikawe sori ẹrọ fun ikẹkọ GPU. Fun awọn apẹẹrẹ wa, a yan Ubuntu 16.04 Linux, pẹlu GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 ikawe, NCCL 2.2.13 asoro ati OpenMPI 3.1.1. Bakannaa o le lo
Igbesẹ 2
Ṣafikun agbara lati ṣiṣẹ pẹlu Horovod API si iwe afọwọkọ ikẹkọ MXNet rẹ. Iwe afọwọkọ ti o wa ni isalẹ ti o da lori MXNet Gluon API le ṣee lo bi awoṣe ti o rọrun. Awọn ila ni igboya nilo ti o ba ti ni iwe afọwọkọ ikẹkọ ti o baamu. Eyi ni awọn ayipada pataki diẹ ti o nilo lati ṣe lati kọ ẹkọ pẹlu Horovod:
- Ṣeto ọrọ-ọrọ ni ibamu si ipo Horovod agbegbe (ila 8) lati ni oye pe ikẹkọ ni a ṣe lori mojuto awọn aworan ti o pe.
- Ṣe awọn paramita akọkọ lati ọdọ oṣiṣẹ kan si gbogbo (ila 18) lati rii daju pe gbogbo awọn oṣiṣẹ bẹrẹ pẹlu awọn aye ibẹrẹ kanna.
- Ṣẹda Horovod PinpinOptimizer (ila 25) lati ṣe imudojuiwọn awọn paramita ni ọna pinpin.
Lati gba iwe afọwọkọ ni kikun, jọwọ tọka si awọn apẹẹrẹ Horovod-MXNet
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 ...
Igbesẹ 3
Wọle si ọkan ninu awọn oṣiṣẹ lati bẹrẹ ikẹkọ pinpin ni lilo itọsọna MPI. Ni apẹẹrẹ yii, ikẹkọ pinpin n ṣiṣẹ lori awọn iṣẹlẹ mẹrin pẹlu 4 GPU kọọkan, ati lapapọ 16 GPUs ninu iṣupọ. Iṣapeye Sitochastic Gradient Descent (SGD) yoo ṣee lo pẹlu awọn hyperparameter wọnyi:
- iwọn kekere: 256
- eko oṣuwọn: 0.1
- ipa: 0.9
- ibajẹ iwuwo: 0.0001
Bi a ṣe ṣe iwọn lati GPU kan si 64 GPUs, a ṣe iwọn laini iwọn ikẹkọ ni ibamu si nọmba awọn GPU (lati 0,1 fun 1 GPU si 6,4 fun 64 GPUs), lakoko ti o tọju nọmba awọn aworan fun GPU ni 256 (lati ipele kan ti Awọn aworan 256 fun 1 GPU si 16 fun 384 GPUs). Idibajẹ iwuwo ati awọn aye ipa ti yipada bi nọmba GPU ṣe pọ si. A lo ikẹkọ konge adalu pẹlu iru data float64 fun iwọle siwaju ati float16 fun awọn gradients lati mu iyara awọn iṣiro float32 ni atilẹyin nipasẹ 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
ipari
Ninu nkan yii, a wo ọna iwọn si ikẹkọ awoṣe ti a pin kaakiri nipa lilo Apache MXNet ati Horovod. A ṣe afihan ṣiṣe igbelowọn ati ṣiṣe idiyele ni akawe si ọna olupin paramita lori dataset ImageNet lori eyiti awoṣe ResNet50-v1 ti kọ ẹkọ. A tun ti ṣafikun awọn igbesẹ ti o le lo lati ṣe atunṣe iwe afọwọkọ ti o wa tẹlẹ lati ṣiṣẹ ikẹkọ ọpọlọpọ-apeere nipa lilo Horovod.
Ti o ba kan bẹrẹ pẹlu MXNet ati ẹkọ ti o jinlẹ, lọ si oju-iwe fifi sori ẹrọ
Ti o ba ti ṣiṣẹ tẹlẹ pẹlu MXNet ati pe o fẹ gbiyanju ikẹkọ pinpin pẹlu Horovod, lẹhinna wo
* iye owo ti wa ni iṣiro da lori
Kọ ẹkọ diẹ sii nipa ẹkọ naa
orisun: www.habr.com