I whakaritea te whakamaoritanga o te tuhinga i te ahiahi o te timatanga o te akoranga
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
Whakangungu toha ki MXNet me te tūmau tawhā
He aha te Horovod
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
I te mutunga, tango i te tuhinga whakamatautau mxnet_mnist.py
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.
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.
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
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
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
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
Mena kua mahi koe me MXNet me te hiahia ki te whakamatau i te ako tohatoha me Horovod, katahi ka titiro ki
*ka tatauhia te utu i runga i
Ako atu mo te akoranga
Source: will.com