Ua hoʻomākaukau ʻia ka unuhi ʻana o ka ʻatikala ma ka pō o ka hoʻomaka ʻana o ka papa
Hiki ke hoʻemi i ka manawa hoʻomaʻamaʻa o nā ʻupena neural hohonu o kēia wā ma ka nui o ka ʻikepili mai nā pule a i nā hola a i ʻole mau minuke, e hoʻonui i kēia ʻano hoʻomaʻamaʻa i nā noi kūpono o ke aʻo hohonu. Pono nā mea hoʻohana e hoʻomaopopo i ke kaʻana like ʻana a me ka hoʻonohonoho ʻana i ka ʻikepili i nā manawa he nui, a he hopena nui ia i ka hana scaling. Eia hou, pono e ʻike nā mea hoʻohana i ka hoʻolālā ʻana i kahi palapala hoʻomaʻamaʻa e holo ana ma kahi manawa hoʻokahi i nā manawa he nui.
Ma kēia ʻatikala e kamaʻilio mākou e pili ana i kahi ala wikiwiki a maʻalahi hoʻi e puʻunaue i ke aʻo ʻana me ka hoʻohana ʻana i ka waihona aʻo hohonu hohonu ʻo Apache MXNet a me ka Horovod distributed learning framework. E hōʻike maopopo mākou i nā pono hana o ka hoʻolālā Horovod a hōʻike i ke kākau ʻana i kahi palapala hoʻomaʻamaʻa MXNet i hana ia ma ke ʻano puʻupuʻu me Horovod.
He aha ka Apache MXNet
he kumu hoʻonaʻauao hohonu i hoʻohana ʻia no ka hana ʻana, hoʻomaʻamaʻa, a kau i nā ʻupena neural hohonu. Hoʻopuka ʻo MXNet i nā mea paʻakikī e pili ana i ka hoʻokō ʻana i nā ʻupena neural, hana nui a hiki ke hoʻonui ʻia, a hāʻawi i nā API no nā ʻōlelo papahana kaulana e like me , , , , , , me nā mea ʻē aʻe.
Hāʻawi ʻia ka hoʻomaʻamaʻa ʻana ma MXNet me ka server parameter
hoʻohana i kahi ala kikowaena kikowaena. Hoʻohana ia i kahi pūʻulu o nā kikowaena kikowaena e hōʻiliʻili i nā gradients mai kēlā me kēia limahana, hana i ka hōʻuluʻulu ʻana, a hoʻouna hou i nā gradients hou i nā limahana no ka hoʻonui hou ʻana. ʻO ka hoʻoholo ʻana i ka lakio kūpono o nā kikowaena i nā limahana ke kī i ka scaling pono. Inā hoʻokahi wale nō server parameter, hiki ke lilo i bottleneck i ka helu ʻana. ʻO ka mea ʻē aʻe, inā he nui nā kikowaena i hoʻohana ʻia, hiki i nā kamaʻilio nui-a-nui ke pani i nā pilina pūnaewele āpau.
He aha ka Horovod
he papa hana hoʻonaʻauao hohonu i wehe ʻia ma Uber. Hoʻohana ia i nā ʻenehana cross-GPU a me nā ʻenehana cross-node e like me NVIDIA Collective Communications Library (NCCL) a me Message Passing Interface (MPI) e puʻunaue a hōʻuluʻulu i nā ʻāpana kumu hoʻohālike ma waena o nā vorecs. Hoʻonui ia i ka hoʻohana ʻana i ka bandwidth network a me nā unahi maikaʻi i ka wā e hana ai me nā ʻōnaehana neural hohonu. Kākoʻo ia i kēia manawa i kekahi mau papa hana aʻo mīkini kaulana, ʻo ia hoʻi , Tensorflow, Keras, a me PyTorch.
MXNet a me Horovod hoʻohui
Hoʻohui ʻia ʻo MXNet me Horovod ma o ka Distributed Learning API i wehewehe ʻia ma Horovod. Nā API kamaʻilio Horovod horovod.broadcast(), horovod.allgather() и horovod.allreduce() hoʻohana ʻia me ka hoʻohana ʻana i nā kelepona asynchronous o ka mīkini MXNet, ma ke ʻano o kāna pakuhi hana. Ma kēia ʻano, ʻike maʻalahi ʻia nā hilinaʻi ʻikepili ma waena o ka kamaʻilio a me ka helu ʻana e ka mīkini MXNet e pale aku i nā poho o ka hana ma muli o ka synchronization. Hoʻokaʻawale ʻia kahi mea optimizer i wehewehe ʻia ma Horovod horovod.DistributedOptimizer hoʻonui Optimizer i MXNet no laila e kāhea ʻo ia i nā API Horovod e pili ana no ka hoʻolaha ʻana i nā mea hoʻonui. ʻIke ʻia kēia mau kikoʻī hoʻokō āpau i nā mea hoʻohana hope.
Hoʻomaka wikiwiki
Hiki iā ʻoe ke hoʻomaka koke i ke aʻo ʻana i kahi pūnaewele neural convolutional liʻiliʻi ma ka ʻikepili MNIST me ka hoʻohana ʻana iā MXNet a me Horovod ma kāu MacBook.
ʻO ka mua, e hoʻokomo i ka mxnet a me ka horovod mai PyPI:
pip install mxnet
pip install horovodNānā: Inā loaʻa iā ʻoe kahi hewa i ka wā pip hoʻokomo horovodpono paha ʻoe e hoʻohui i kahi loli MACOSX_DEPLOYMENT_TARGET=10.vvkahi vv - ʻo kēia ka mana o kāu mana MacOS, no ka laʻana, no MacOSX Sierra pono ʻoe e kākau MACOSX_DEPLOYMENT_TARGET=10.12 pip hoʻokomo horovod
A laila e hoʻokomo iā OpenMPI .
I ka hopena, hoʻoiho i ka palapala hōʻike mxnet_mnist.py a holo i kēia mau kauoha ma ka pahu MacBook ma ka papa kuhikuhi hana:
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.pyE holo ana kēia i ka hoʻomaʻamaʻa ʻana ma nā cores ʻelua o kāu kaʻina hana. ʻO kēia ka hopena:
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.870000Hōʻikeʻike hana
Ke hoʻomaʻamaʻa ʻana i kahi hiʻohiʻona ResNet50-v1 ma kahi waihona ImageNet ma 64 GPU me ʻewalu mau manawa. p3.16x nui EC2, loaʻa kēlā me kēia me 8 NVIDIA Tesla V100 GPU ma ke ao AWS, ua loaʻa iā mākou kahi hoʻomaʻamaʻa aʻo ʻana o 45000 kiʻi/sec (ʻo ia hoʻi, ka helu o nā laʻana i aʻo ʻia i kekona). Hoʻopau ka hoʻomaʻamaʻa ʻana ma 44 mau minuke ma hope o 90 mau manawa me ka pololei o 75.7%.
Ua hoʻohālikelike mākou i kēia me ke ala hoʻomaʻamaʻa puʻupuʻu a MXNet no ka hoʻohana ʻana i nā kikowaena parameter ma 8, 16, 32 a me 64 GPU me kahi kikowaena kikowaena hoʻokahi a me kahi server i ka ratio limahana o 1 a 1 a me 2 i 1, kēlā me kēia. Hiki iā ʻoe ke ʻike i ka hopena ma ka Figure 1 ma lalo nei. Ma ka axis y ma ka hema, hōʻike nā kī i ka helu o nā kiʻi e hoʻomaʻamaʻa i kēlā me kēia kekona, e hōʻike ana nā laina i ka pono hoʻonui (ʻo ia hoʻi, ka ratio o ka hana maoli a me ka hiki ke kūpono) ma ka axis ma ka ʻākau. E like me kāu e ʻike ai, ʻo ke koho ʻana o ka helu o nā kikowaena e pili ana i ka pono scaling. Inā hoʻokahi wale nō kikowaena kikowaena, hāʻule ka hana scaling i 38% ma 64 GPU. No ka hoʻokō ʻana i ka pono scaling like me Horovod, pono ʻoe e pālua i ka helu o nā kikowaena pili i ka helu o nā limahana.

Kiʻi 1. Ka hoʻohālikelike ʻana o ke aʻo ʻana i puʻunaue ʻia me MXNet me Horovod a me ka server parameter
Ma ka Papa 1 ma lalo nei, hoʻohālikelike mākou i ke kumukūʻai hope no kēlā me kēia manawa ke holo nei i nā hoʻokolohua ma 64 GPU. ʻO ka hoʻohana ʻana iā MXNet me Horovod e hāʻawi i ka throughput maikaʻi loa ma ke kumukūʻai haʻahaʻa.

Papa 1. Hoʻohālikelike kumu kūʻai ma waena o Horovod a me Parameter Server me kahi kikowaena o ka limahana limahana o 2 a 1.
Nā ʻanuʻu e hana hou
Ma nā ʻanuʻu aʻe, e hōʻike mākou iā ʻoe pehea e hana hou ai i ka hopena o ka hoʻomaʻamaʻa ʻana me ka hoʻohana ʻana iā MXNet a me Horovod. E aʻo hou e pili ana i ke aʻo ʻana me MXNet heluhelu .
pani 1
Создайте кластер однородных экземпляров с MXNet версии 1.4.0 или выше и Horovod версии 0.16.0 или выше, чтобы использовать распределенное обучение. Вам также нужно будет установить библиотеки для обучения на GPU. Для наших экземпляров мы выбрали Ubuntu 16.04 Linux, с GPU Driver 396.44, CUDA 9.2, библиотеку cuDNN 7.2.1, коммуникатор NCCL 2.2.13 и OpenMPI 3.1.1. Также вы можете использовать , kahi i hoʻokomo mua ʻia kēia mau hale waihona puke.
pani 2
Hoʻohui i ka hiki ke hana me ka Horovod API i kāu palapala hoʻomaʻamaʻa MXNet. Hiki ke hoʻohana ʻia ka palapala ma lalo nei e pili ana i ka MXNet Gluon API ma ke ʻano he maʻalahi. Pono nā laina i ka wiwo ʻole inā loaʻa iā ʻoe kahi palapala aʻo e pili ana. Eia kekahi mau hoʻololi koʻikoʻi e pono ai ʻoe e aʻo me Horovod:
- E hoʻonohonoho i ka pōʻaiapili e like me ke kūlana Horovod kūloko (laina 8) no ka hoʻomaopopo ʻana ua hana ʻia ke aʻo ʻana ma ke kumu kiʻi pololei.
- E hāʻawi i nā palena mua mai kekahi limahana i nā mea a pau (laina 18) e hōʻoia i ka hoʻomaka ʻana o nā limahana āpau me nā ʻāpana mua like.
- Hana i kahi Horovod DistributedOptimizer (laina 25) e hoʻololi i nā ʻāpana ma ke ʻano puʻupuʻu.
No ka loaʻa ʻana o ka palapala piha, e ʻoluʻolu e nānā i nā hiʻohiʻona 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 ...pani 3
E komo i kekahi o nā limahana e hoʻomaka i ka hoʻomaʻamaʻa ʻana me ka hoʻohana ʻana i ke kuhikuhi MPI. Ma kēia hiʻohiʻona, holo ka hoʻomaʻamaʻa ʻana i ʻehā mau manawa me 4 GPU i kēlā me kēia, a me ka huina o 16 GPU i ka hui. E hoʻohana ʻia ka Stochastic Gradient Descent (SGD) optimizer me nā hyperparameter aʻe:
- ka nui o ka pūʻulu mini: 256
- ka helu aʻo: 0.1
- ka manawa: 0.9
- pohō kaumaha: 0.0001
I ko mākou piʻi ʻana mai hoʻokahi GPU a i 64 GPU, ua hoʻonui mākou i ka helu hoʻomaʻamaʻa e like me ka helu o nā GPU (mai 0,1 no 1 GPU a i 6,4 no 64 GPU), ʻoiai e mālama ana i ka helu o nā kiʻi no kēlā me kēia GPU ma 256 (mai kahi pūʻulu o 256 kiʻi no 1 GPU a 16 no 384 GPU). Ua hoʻololi ʻia ka palaho kaumaha a me nā ʻāpana momentum i ka hoʻonui ʻana o ka helu o nā GPU. Ua hoʻohana mākou i ka hoʻomaʻamaʻa pololei ʻana me ka ʻano data float64 no ka hele mua a me ka float16 no nā gradients e wikiwiki i nā helu float32 i kākoʻo ʻia e 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.pyhopena
Ma kēia ʻatikala, ua nānā mākou i kahi ala hiki ke hoʻokaʻawale ʻia i ka hoʻomaʻamaʻa ʻana me Apache MXNet a me Horovod. Ua hōʻike mākou i ka maikaʻi o ka scaling a me ke kumu kūʻai i hoʻohālikelike ʻia i ke ala kikowaena kikowaena ma ka ʻikepili ImageNet kahi i aʻo ʻia ai ke kumu hoʻohālike ResNet50-v1. Ua hoʻokomo pū mākou i nā ʻanuʻu e hiki ai iā ʻoe ke hoʻohana e hoʻololi i kahi palapala i loaʻa e holo i ka hoʻomaʻamaʻa lehulehu me ka hoʻohana ʻana iā Horovod.
Inā ʻoe e hoʻomaka ana me MXNet a me ke aʻo hohonu, e hele i ka ʻaoʻao hoʻonohonoho e kūkulu mua iā MXNet. Manaʻo ikaika mākou e heluhelu i ka ʻatikala e hoʻomaka.
Inā ua hana mua ʻoe me MXNet a makemake ʻoe e hoʻāʻo i ke aʻo ʻana me Horovod, a laila e nānā , kūkulu ia mai MXNet a hahai i ka laʻana ai ole ia, .
* helu ʻia ke kumukūʻai ma muli o AWS no nā EC2
E ʻike hou aku e pili ana i ka papa
Source: www.habr.com
