Ako Tohaina me Apache MXNet me Horovod

I whakaritea te whakamaoritanga o te tuhinga i te ahiahi o te timatanga o te akoranga "ML Ahumahi i runga Raraunga Nui"

Ka taea e te whakangungu toha mo te maha o nga mahi rorohiko mahi teitei te whakaiti i te wa whakangungu o nga whatunga neural hohonu hou i runga i te nui o nga raraunga mai i nga wiki ki nga haora, tae noa ki nga meneti, na tenei tikanga whakangungu ka kaha ki te whakamahi i nga mahi ako hohonu. Me mohio nga kaiwhakamahi ki te tiritiri me te tukutahi i nga raraunga puta noa i nga waa maha, he nui te paanga ki te pai o te whakatauine. I tua atu, me mohio ano nga kaiwhakamahi ki te whakatakoto i tetahi tuhinga whakangungu e rere ana i runga i te waa kotahi ki nga waahi maha.

I roto i tenei tuhinga ka korero tatou mo te huarahi tere me te ngawari ki te tohatoha ako ma te whakamahi i te whare pukapuka ako hohonu tuwhera Apache MXNet me te anga ako kua tohatohahia e Horovod. Ka tino whakaatu matou i nga painga o te mahinga o te anga Horovod me te whakaatu me pehea te tuhi i tetahi tuhinga whakangungu MXNet kia mahi i roto i te tikanga tohatoha me Horovod.

He aha te Apache MXNet

Apache MX kupenga he anga ako hohonu puna tuwhera e whakamahia ana ki te hanga, ki te whakangungu, ki te tuku i nga whatunga neural hohonu. Ka tangohia e MXNet nga uauatanga e pa ana ki te whakatinana i nga whatunga neural, he tino mahi, he tauineine, me te tuku API mo nga reo hotaka rongonui penei i te nānati, C ++, Clojure, Java, Julia, R, Scala me etahi atu.

Whakangungu toha ki MXNet me te tūmau tawhā

Kōwae ako kua tohatohahia i roto i te MXNet ka whakamahi i te huarahi tūmau tawhā. Ka whakamahia e ia he huinga tūmau tawhā ki te kohi rōnaki mai i ia kaimahi, mahi whakahiato, me te whakahoki i nga rōnaki whakahōu ki ngā kaimahi mō te whitiwhiti arotautanga ka whai ake. Ko te whakatau i te ōwehenga tika o nga kaitoro ki nga kaimahi te mea matua mo te whakatauine whai hua. Mēnā kotahi noa te tūmau tawhā, tērā pea ka tūpono ki ngā tātaitanga. Engari, ki te nui rawa nga kaitoro e whakamahia ana, ka taea e te maha-ki-te-maha nga whakawhitinga korero te aukati i nga hononga whatunga katoa.

He aha te Horovod

Horovod he anga ako hohonu kua tohatoha tuwhera i whakawhanakehia i Uber. Ka whakamahia e ia nga hangarau whakawhiti-GPU me nga hangarau whakawhiti-whakawhiti penei i te NVIDIA Collective Communications Library (NCCL) me te Message Passing Interface (MPI) ki te tohatoha me te whakahiato i nga tawhā tauira puta noa i nga vorecs. Ka arotauhia te whakamahinga o te bandwidth whatunga me te pauna pai i te wa e mahi ana me nga tauira whatunga neural hohonu. I tenei wa kei te tautoko etahi anga ako miihini rongonui, ara MX kupenga, Tensorflow, Keras, me PyTorch.

MXNet me Horovod whakauru

Ka whakauru a MXNet ki a Horovod na roto i nga API Akoranga Tohatoha kua tautuhia ki Horovod. Nga API whakawhitiwhiti Horovod horovod.broadcast(), horovod.allgather() и horovod.allreduce() i whakatinanahia ma te whakamahi i nga waea whakahoki tukutahi o te miihini MXNet, hei waahanga o tana kauwhata mahi. Ma tenei huarahi, ka ngawari te whakahaere i nga hononga raraunga i waenga i te whakawhitiwhiti korero me te tatauranga e te miihini MXNet kia kore ai e ngaro nga mahi na te tukutahi. Ko te ahanoa kaihoroi tohatoha kua tautuhia ki Horovod horovod.DistributedOptimizer whakawhanui Haumaru i roto i te MXNet kia karangahia e ia nga API Horovod e rite ana mo nga whakahoutanga tawhā tohatoha. Ko enei taipitopito whakatinanatanga katoa he maamaa ki nga kaiwhakamahi mutunga.

Te tiimata tere

Ka taea e koe te timata ki te whakangungu i tetahi whatunga neural iti i runga i te huingararaunga MNIST ma te whakamahi i te MXNet me te Horovod i runga i to MacBook.
Tuatahi, whakauruhia te mxnet me te horovod mai i PyPI:

pip install mxnet
pip install horovod

Tuhipoka: Mena ka raru koe i te waa pip tāuta horovodtera pea me taapiri he taurangi MACOSX_DEPLOYMENT_TARGET=10.vvte wahi vv – koinei te putanga o to putanga MacOS, hei tauira, mo MacOSX Sierra me tuhi koe MACOSX_DEPLOYMENT_TARGET=10.12 pip tāuta horovod

Na ka tāuta OpenMPI mai i konei.

I te mutunga, tango i te tuhinga whakamatautau mxnet_mnist.py mai i konei ka whakahaere i nga whakahau e whai ake nei i te tauranga MacBook i te raarangi mahi:

mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py

Ma tenei ka whakahaere whakangungu i runga i nga matua e rua o to tukatuka. Ko te putanga e whai ake nei:

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

Whakaaturanga Mahi

I te whakangungu i tetahi tauira ResNet50-v1 i runga i te huinga raraunga ImageNet i runga i nga GPU 64 me nga wa e waru p3.16x nui EC2, kei roto ia ia 8 NVIDIA Tesla V100 GPU i runga i te kapua AWS, i tutuki i a maatau te whakangungu whakangungu o nga whakaahua 45000 / hekona (ara, te maha o nga tauira kua whakangungua ia hekona). I oti te whakangungu i roto i nga meneti 44 i muri i nga waa 90 me te tino tika o te 75.7%.

I whakaritea e matou tenei ki te huarahi whakangungu toha a MXNet mo te whakamahi i nga tūmau tawhā i runga i te 8, 16, 32 me te 64 GPU me te tūmau tawhā kotahi me te tūmau ki te ōwehenga kaimahi o 1 ki te 1 me te 2 ki te 1, ia. Ka taea e koe te kite i te hua i te Whakaahua 1 i raro nei. I runga i te tuaka-y i te taha maui, ko nga tutaki e tohu ana i te maha o nga whakaahua hei whakangungu mo ia hēkona, ko nga raina e whakaatu ana i te pai o te whakatauine (ara, ko te ōwehenga o te tino ki te whakaputanga pai) kei te tuaka-y kei te taha matau. Ka taea e koe te kite, ko te kowhiringa o te maha o nga kaitoro ka pa ki te pai o te whakatauine. Mena he kotahi noa te tūmau tawhā, ka heke te kaha o te tauine ki te 38% i runga i te 64 GPU. Hei whakatutuki i te pai o te tauine rite ki a Horovod, me whakaruarua te maha o nga kaitoro e pa ana ki te maha o nga kaimahi.

Ako Tohaina me Apache MXNet me Horovod
Whakaatu 1. Te whakataurite o te ako toha ma te whakamahi i te MXNet me Horovod me te tūmau tawhā

I te Ripanga 1 i raro nei, ka whakatairitehia e matou te utu whakamutunga mo ia tauira ka whakahaerehia nga whakamatautau mo nga GPU 64. Ma te whakamahi i te MXNet me Horovod e whakarato ana i nga waahanga pai rawa atu i te utu iti rawa atu.

Ako Tohaina me Apache MXNet me Horovod
Ripanga 1. Whakatauritenga utu i waenga i te Horovod me te Tūmau Tawhā me te 2 ki te 1 tūmau ki te ōwehenga kaimahi.

Nga taahiraa ki te whakaputa uri

I nga waahanga e whai ake nei, ka whakaatu matou ki a koe me pehea te whakaputa i te hua o te whakangungu tohatoha ma te whakamahi i te MXNet me Horovod. Hei ako atu mo nga akoranga toha me te panui MXNet tenei pou.

te taahi 1

Waihangahia he huinga o nga tauira riterite me te putanga MXNet 1.4.0 teitei ake me te putanga Horovod 0.16.0 teitei ake ranei hei whakamahi i nga akoranga toha. Me whakauru ano koe i nga whare pukapuka mo te whakangungu GPU. Mo o maatau, i whiriwhiria e matou te Ubuntu 16.04 Linux, me te GPU Driver 396.44, CUDA 9.2, cuDNN 7.2.1 whare pukapuka, NCCL 2.2.13 communicator me OpenMPI 3.1.1. Ka taea hoki e koe te whakamahi Amazon Deep Learning AMI, kei hea enei whare pukapuka kua oti te whakauru i mua.

te taahi 2

Tāpirihia te kaha ki te mahi me te Horovod API ki to tuhinga whakangungu MXNet. Ko te tuhinga i raro nei i runga i te MXNet Gluon API ka taea te whakamahi hei tauira ngawari. Ko nga rarangi i roto i te maia ka hiahiatia mena kei a koe he tuhinga whakangungu e rite ana. Anei etahi huringa tino nui me mahi koe ki te ako me Horovod:

  • Whakaritehia te horopaki kia rite ki te rarangi o Horovod o te rohe (raina 8) kia mohio ai kei te mahi whakangungu i runga i te kaupapa whakairoiro tika.
  • Tukuna nga tawhā tuatahi mai i tetahi kaimahi ki te katoa (raina 18) kia mohio ai ka timata nga kaimahi katoa ki nga tawhā tuatahi.
  • Waihangahia he Horovod DistributedOptimizer (raina 25) ki te whakahou i nga tawhā i roto i te tikanga tohatoha.

Ki te tiki i te tuhinga katoa, tirohia nga tauira 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    ...

te taahi 3

Takiuru ki tetahi o nga kaimahi ki te timata tohatoha whakangungu ma te whakamahi i te tohutohu MPI. I roto i tenei tauira, ka whakahaerehia nga whakangungu tohatoha i runga i nga wa e wha me nga 4 GPU ia ia, me te katoa o nga GPU 16 i roto i te kohinga. Ko te Stochastic Gradient Descent (SGD) arotau ka whakamahia me nga taapiri e whai ake nei:

  • te rahi o te puranga paku: 256
  • reeti ako: 0.1
  • torohaki: 0.9
  • pirau taimaha: 0.0001

I a matou i piki mai i te GPU kotahi ki te 64 GPU, ka whakatauhia e matou te reiti whakangungu i runga i te maha o nga GPU (mai i te 0,1 mo te 1 GPU ki te 6,4 mo te 64 GPU), me te pupuri i te maha o nga whakaahua mo ia GPU i te 256 (mai i te puranga o 256 whakaahua mo te 1 GPU ki te 16 mo te 384 GPU). Ko te paheketanga o te taumaha me nga tawhā torohaki ka huri i te pikinga o te maha o nga GPU. I whakamahia e matou he whakangungu tino tika me te momo raraunga float64 mo ​​te whakawhiti whakamua me te float16 mo nga rōnaki kia tere ake ai nga tatauranga float32 e tautokohia ana 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

mutunga

I roto i tenei tuhinga, i titiro matou ki tetahi huarahi tauineine ki te tohatoha whakangungu tauira ma te whakamahi i te Apache MXNet me Horovod. I whakaatuhia e matou te pai o te whakatauine me te utu-utu ka whakaritea ki te huarahi tūmau tawhā i runga i te huingararaunga ImageNet i whakangungua ai te tauira ResNet50-v1. Kua whakaurua ano e matou nga waahanga ka taea e koe te whakamahi ki te whakarereke i te tuhinga o naianei ki te whakahaere whakangungu-maha ma te whakamahi i a Horovod.

Mena kei te timata koe ki te MXNet me te ako hohonu, haere ki te wharangi whakaurunga MXNeki te hanga tuatahi MXNet. Ka tino taunaki ano matou ki te panui i te tuhinga MXNet i roto i te 60 menetiki te timata.

Mena kua mahi koe me MXNet me te hiahia ki te whakamatau i te ako tohatoha me Horovod, katahi ka titiro ki Whārangi whakaurunga Horovod, hanga mai i MXNet ka whai i te tauira MNIST ranei ImageNet.

*ka tatauhia te utu i runga i reiti haora AWS mo EC2 Tauira

Ako atu mo te akoranga "ML Ahumahi i runga Raraunga Nui"

Source: will.com

Tāpiri i te kōrero