Hāʻawi ʻia ke aʻo ʻana me Apache MXNet a me Horovod

Ua hoʻomākaukau ʻia ka unuhi ʻana o ka ʻatikala ma ka pō o ka hoʻomaka ʻana o ka papa "ML ʻOihana ma ka ʻikepili Nui"

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

ʻO Apache MX Pūnaewele 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 Python, C ++, ʻO Clojure, Iawa, Julia, R, Scala me nā mea ʻē aʻe.

Hāʻawi ʻia ka hoʻomaʻamaʻa ʻana ma MXNet me ka server parameter

ʻĀpana hoʻonaʻauao maʻamau ma MXNet 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

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 MX Net, 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 horovod

Nā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 mai kēia wahi.

I ka hopena, hoʻoiho i ka palapala hōʻike mxnet_mnist.py mai kēia wahi 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.py

E 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.870000

Hōʻ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.

Hāʻawi ʻia ke aʻo ʻana me Apache MXNet a me Horovod
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.

Hāʻawi ʻia ke aʻo ʻana me Apache MXNet a me Horovod
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 keia pou.

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. Также вы можете использовать Amazon Deep Learning AMI, 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 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    ...

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.py

hopena

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 MXNee kūkulu mua iā MXNet. Manaʻo ikaika mākou e heluhelu i ka ʻatikala MXNet i 60 minukee 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ā ʻaoʻao hoʻokomo ʻo Horovod, kūkulu ia mai MXNet a hahai i ka laʻana MNIST ai ole ia, IMAGEnet.

* helu ʻia ke kumukūʻai ma muli o uku o ka hora AWS no nā EC2

E ʻike hou aku e pili ana i ka papa "ML ʻOihana ma ka ʻikepili Nui"

Source: www.habr.com

E kūʻai i ka hoʻokipa hilinaʻi no nā pūnaewele me ka pale DDoS, nā kikowaena VPS VDS 🔥 E kūʻai i ka hoʻokipa pūnaewele hilinaʻi me ka pale DDoS, nā kikowaena VPS VDS | ProHoster