Ang paghubad sa artikulo giandam sa bisperas sa pagsugod sa kurso
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
Giapod-apod nga pagbansay sa MXNet nga adunay parameter server
Unsa ang Horovod
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
Sa katapusan, i-download ang test script mxnet_mnist.py
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.
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.
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
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
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
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
Kung nakatrabaho ka na sa MXNet ug gusto nimong sulayan ang giapod-apod nga pagkat-on sa Horovod, unya tan-awa ang
*Ang gasto gikalkulo base sa
Pagkat-on og dugang mahitungod sa kurso
Source: www.habr.com