Ikastaroa hasi bezperan prestatu zen artikuluaren itzulpena
Errendimendu handiko konputazio-instantzia anitzetan banatutako prestakuntzak sare neuronal sakon modernoen entrenamendu-denbora murrizten du datu-kopuru handietan asteetatik orduetara edo baita minutuetara ere, prestakuntza-teknika hau ikaskuntza sakonaren aplikazio praktikoetan nagusituz. Erabiltzaileek ulertu behar dute nola partekatu eta sinkronizatu datuak hainbat instantziatan, eta horrek eragin handia du eskalatzeko eraginkortasunean. Horrez gain, erabiltzaileek instantzia bakarrean exekutatzen den prestakuntza-scripta hainbat instantziatara nola zabaldu ere jakin beharko lukete.
Artikulu honetan ikaskuntza banatzeko modu azkar eta erraz bati buruz hitz egingo dugu Apache MXNet deep learning liburutegi irekia eta Horovod banatutako ikaskuntza esparrua erabiliz. Horovod esparruaren errendimendu onurak argi eta garbi erakutsiko ditugu eta MXNet prestakuntza-gidoia nola idatzi erakutsiko dugu, Horovod-ekin modu banatuan funtziona dezan.
Zer da Apache MXNet
Prestakuntza banatua MXNet-en parametro zerbitzariarekin
Zer da Horovod
MXNet eta Horovod integrazioa
MXNet Horovod-ekin integratzen da Horovod-en definitutako Distributed Learning APIen bidez. Horovod komunikazio APIak horovod.broadcast(), horovod.allgather() ΠΈ horovod.allreduce() MXNet motorraren dei asinkronoak erabiliz inplementatu da, bere ataza grafikoaren zati gisa. Modu honetan, komunikazioaren eta konputazioaren arteko datuen mendekotasunak erraz kudeatzen ditu MXNet motorrak, sinkronizazioaren ondorioz errendimendu-galerak ekiditeko. Horovoden definitutako optimizatzaile banatutako objektua horovod.DistributedOptimizer zabaltzen da Optimizer MXNet-en, dagozkion Horovod APIetara dei ditzan parametroen eguneratze banatuetarako. Ezarpen xehetasun horiek guztiak gardenak dira azken erabiltzaileentzat.
Hasiera azkarra
Azkar has zaitezke MNIST datu multzoan sare neuronal konboluzional txiki bat entrenatzen zure MacBook-en MXNet eta Horovod erabiliz.
Lehenik eta behin, instalatu mxnet eta horovod PyPI-tik:
pip install mxnet
pip install horovod
Oharra: Errore bat aurkitzen baduzu pip instalatu horovodagian aldagai bat gehitu behar duzu MACOSX_DEPLOYMENT_TARGET=10.vvNon vv β hau zure MacOS bertsioaren bertsioa da, adibidez, MacOSX Sierrarako idatzi beharko duzu MACOSX_DEPLOYMENT_TARGET=10.12 pip instalatu horovod
Ondoren, instalatu OpenMPI
Amaieran, deskargatu probaren gidoia mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Honek zure prozesadorearen bi nukleotan entrenatuko du. Irteera hau izango da:
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
Performance Demo
ResNet50-v1 modelo bat ImageNet datu-multzo batean entrenatzean zortzi instantziako 64 GPUtan p3.16xhandia EC2, bakoitzak 8 NVIDIA Tesla V100 GPU dituen AWS hodeian, 45000 irudi/seg-eko entrenamenduaren errendimendua lortu dugu (hau da, segundoko entrenatu diren lagin kopurua). Entrenamendua 44 minututan burutu zen 90 garairen ondoren, %75.7ko zehaztasun onenarekin.
Parametro zerbitzariak 8, 16, 32 eta 64 GPUtan erabiltzeko MXNet-en trebakuntza-ikuspegi banatuarekin alderatu dugu parametro bakarreko zerbitzariarekin eta zerbitzari eta langile-erlazioa 1 eta 1 eta 2 eta 1, hurrenez hurren. Emaitza beheko 1. irudian ikus dezakezu. Ezkerreko y ardatzean, barrek segundoko entrenatu beharreko irudi kopurua adierazten dute, lerroek eskalatze-eraginkortasuna islatzen dute (hau da, errendimendu errealaren eta idealaren arteko erlazioa) eskuineko y ardatzean. Ikus dezakezunez, zerbitzari kopurua aukeratzeak eskalatzearen eraginkortasunari eragiten dio. Parametro zerbitzari bakarra badago, eskalatzearen eraginkortasuna % 38ra jaisten da 64 GPUtan. Horovod-ekin duen eskalatze-eraginkortasun bera lortzeko, zerbitzarien kopurua bikoiztu behar duzu langile kopuruaren aldean.
1. Irudia. MXNet erabiliz ikasteko banatuaren konparazioa Horovod-ekin eta parametro-zerbitzariarekin
Beheko 1. taulan, instantzia bakoitzeko azken kostua konparatzen dugu esperimentuak 64 GPUtan egiten direnean. MXNet Horovod-ekin erabiltzeak errendimendu onena eskaintzen du kostu txikienean.
1. taula. Horovod eta Parameter Server arteko kostuen konparazioa zerbitzariaren eta langilearen arteko erlazioa 2 eta 1ekoa izanik.
Erreproduzitzeko urratsak
Hurrengo urratsetan, banatutako prestakuntzaren emaitza nola erreproduzitu erakutsiko dizugu MXNet eta Horovod erabiliz. MXNet-ekin banatutako ikaskuntzari buruz gehiago jakiteko irakurri
Urratsera 1
Sortu instantzia homogeneoen multzoa MXNet 1.4.0 bertsioa edo handiagoarekin eta Horovod 0.16.0 bertsioa edo handiagoarekin ikaskuntza banatua erabiltzeko. GPU prestakuntzarako liburutegiak ere instalatu beharko dituzu. Gure kasuetarako, Ubuntu 16.04 Linux aukeratu dugu, GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 liburutegiarekin, NCCL 2.2.13 komunikatzailea eta OpenMPI 3.1.1. Era berean, erabil dezakezu
Urratsera 2
Gehitu Horovod APIarekin lan egiteko gaitasuna zure MXNet prestakuntza-gidoiari. MXNet Gluon APIan oinarritutako beheko scripta txantiloi soil gisa erabil daiteke. Lodiz idatzitako lerroak behar dira dagoeneko dagokion prestakuntza-gidoia baduzu. Hona hemen Horovod-ekin ikasteko egin behar dituzun aldaketa kritiko batzuk:
- Ezarri testuingurua tokiko Horovod mailaren arabera (8. lerroa) entrenamendua nukleo grafiko egokian egiten dela ulertzeko.
- Pasatu hasierako parametroak langile batetik guztietara (18. lerroa), langile guztiak hasierako parametro berdinekin hasten direla ziurtatzeko.
- Sortu Horovod bat DistributedOptimizer (25. lerroa) parametroak modu banatuan eguneratzeko.
Script osoa lortzeko, ikusi Horovod-MXNet adibideetara
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 ...
Urratsera 3
Hasi saioa langileetako batean prestakuntza banatua hasteko MPI zuzentaraua erabiliz. Adibide honetan, prestakuntza banatua lau instantziatan exekutatzen da bakoitza 4 GPUrekin, eta guztira 16 GPU klusterrean. Gradiente Estokastikoaren Jaitsiera (SGD) optimizatzailea hiperparametro hauekin erabiliko da:
- lote txikien tamaina: 256
- ikaskuntza-tasa: 0.1
- momentua: 0.9
- pisuaren gainbehera: 0.0001
GPU batetik 64 GPUra eskalatu genuenez, entrenamendu-tasa linealki eskalatu genuen GPU kopuruaren arabera (0,1etik 1 GPUrako 6,4ra 64 GPUrako), GPU bakoitzeko irudi kopurua 256an mantenduz (sorte batetik. 256 irudi 1 GPUrako 16tik 384 GPUrako). Pisuaren gainbehera eta momentuaren parametroak aldatu egin ziren GPU kopurua handitu ahala. Doitasun-entrenamendu mistoa erabili dugu float64 datu-motarekin aurrera egiteko eta float16 gradienteetarako NVIDIA Tesla GPUek onartzen dituzten float32 kalkuluak bizkortzeko.
$ 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
Ondorioa
Artikulu honetan, Apache MXNet eta Horovod erabiliz banatutako ereduen prestakuntzarako ikuspegi eskalagarria aztertu dugu. ResNet50-v1 eredua trebatu zen ImageNet datu-multzoan parametro zerbitzariaren ikuspegiarekin alderatuta eskalatzeko eraginkortasuna eta kostu-eraginkortasuna frogatu ditugu. Lehendik dagoen script bat aldatzeko erabil ditzakezun urratsak ere sartu ditugu, instantzia anitzeko prestakuntza exekutatzeko, Horovod erabiliz.
MXNet-ekin eta ikaskuntza sakonarekin hasten ari bazara, joan instalazio orrira
Dagoeneko MXNet-ekin lan egin baduzu eta Horovod-en ikaskuntza banatua probatu nahi baduzu, begiratu
*kostua oinarrituta kalkulatzen da
Ikastaroari buruzko informazio gehiago
Iturria: www.habr.com