เบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบเบฑเบš Apache MXNet เปเบฅเบฐ Horovod

เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเบฐโ€‹เบเบฝเบกโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบกเบฒเบ”โ€‹เบชเบฐโ€‹เบกเบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ‚เบญเบ‡โ€‹เบงเบดโ€‹เบŠเบฒโ€‹เบเบฒเบ™ "ML เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบเปˆ"

เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเปเบšเบšเปเบˆเบเบขเบฒเบเบขเบนเปˆเปƒเบ™เบซเบผเบฒเบเป†เบ•เบปเบงเบขเปˆเบฒเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบœเปˆเบญเบ™เป€เบงเบฅเบฒเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ neural เป€เบฅเบดเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบˆเบฒเบเบญเบฒเบ—เบดเบ”เบซเบฒเบŠเบปเปˆเบงเป‚เบกเบ‡เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบ™เบฒเบ—เบต, เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ™เบตเป‰เปเบกเปˆเบ™เปเบœเปˆเบ‚เบฐเบซเบเบฒเบเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบฅเบดเบ. เบœเบนเป‰เปƒเบŠเป‰เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เปเบฅเบฐ synchronize เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ—เบปเปˆเบงเบซเบผเบฒเบเป†เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เบ•เปเปˆเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบœเบนเป‰เปƒเบŠเป‰เบ„เบงเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฐเบ„เบดเบšเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบงเป„เบ›เบซเบฒเบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเป„เบงเปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบˆเบฐเปเบˆเบเบขเบฒเบเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบฅเบดเบเป€เบ›เบตเบ” Apache MXNet เปเบฅเบฐเบเบญเบšเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเปเบˆเบเบขเบฒเบ Horovod. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบเบญเบš Horovod เปเบฅเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เบšเบปเบ”เบเบถเบเบซเบฑเบ” MXNet เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเปเบˆเบเบขเบฒเบเบเบฑเบš Horovod.

Apache MXNet เปเบกเปˆเบ™เบซเบเบฑเบ‡

Apache MX Net เป€เบ›เบฑเบ™เบเบญเบšเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบฅเบดเบเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡, เบเบถเบเบญเบปเบšเบฎเบปเบก, เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบ neural เป€เบฅเบดเบ. MXNet abstracts เบซเปˆเบฒเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ neural, เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰, เปเบฅเบฐเบชเบฐเป€เบซเบ™เบต APIs เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบ™เบดเบเบปเบกเป€เบŠเบฑเปˆเบ™: Python, C ++, Clojure, Java, Julia, R, Scala เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเปเบˆเบเบขเบฒเบเปƒเบ™ MXNet เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต

เป‚เบกเบ”เบนเบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เปเบšเบšเปเบˆเบเบขเบฒเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™ MXNet เปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบตเบšเป€เบงเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต. เบกเบฑเบ™เปƒเบŠเป‰เบŠเบธเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป€เบžเบทเปˆเบญเป€เบเบฑเบšเบเปเบฒ gradients เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก, เปเบฅเบฐเบชเบปเปˆเบ‡ gradients เบชเบฐเบšเบฑเบšเบ›เบฑเบšเบ›เบธเบ‡เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ iteration เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ•เปเปˆเป„เบ›. เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฑเบšเบœเบนเป‰เบญเบญเบเปเบฎเบ‡เบ‡เบฒเบ™เปเบกเปˆเบ™เบเบธเบ™เปเบˆเบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เบ–เป‰เบฒเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ”เบฝเบง, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เปƒเบ™เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบ–เป‰เบฒเบกเบตเบเบฒเบ™เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›, เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบซเบผเบฒเบเบ•เปเปˆเบซเบผเบฒเบเบชเบฒเบกเบฒเบ”เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”.

Horovod เปเบกเปˆเบ™เบซเบเบฑเบ‡

เป‚เบฎเป‚เบฃเป‚เบงเบ” เปเบกเปˆเบ™เป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เปเบšเบšเป€เบ›เบตเบ”เป€เบœเบตเบเบ—เบตเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเบนเปˆ Uber. เบกเบฑเบ™เปƒเบŠเป‰เป€เบ—เบเป‚เบ™เป‚เบฅเบเบต cross-GPU เปเบฅเบฐ cross-node เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบŠเบฑเปˆเบ™ NVIDIA Collective Communications Library (NCCL) เปเบฅเบฐ Message Passing Interface (MPI) เป€เบžเบทเปˆเบญเปเบˆเบเบขเบฒเบเปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปƒเบ™เบ—เบปเปˆเบง vorecs. เบกเบฑเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบšเบ™เบงเบดเบ”เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เป„เบ”เป‰เบ”เบตเป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ•เบปเบงเปเบšเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบ neural เป€เบฅเบดเบ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบญเบšเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเบ™เบดเบเบปเบกเบซเบผเบฒเบ, เบ„เบท MX เบชเบธเบ”เบ—เบด, Tensorflow, Keras, เปเบฅเบฐ PyTorch.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ MXNet เปเบฅเบฐ Horovod

MXNet เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš Horovod เบœเปˆเบฒเบ™ APIs เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเปเบˆเบเบขเบฒเบเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ Horovod. Horovod APIs เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™ horovod.broadcast(), horovod.allgather() ะธ horovod.allreduce() เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป€เบญเบตเป‰เบ™เบ„เบทเบ™เปเบšเบš asynchronous เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ MXNet, เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบเบฒเบ™เบ‚เบทเป‰เบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เบเบฒเบ™เป„เบ”เป‰เบ‡เปˆเบฒเบเป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ MXNet เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเป‰เบญเบ™เบเบฒเบ™ synchronization. เปเบˆเบเบขเบฒเบเบงเบฑเบ”เบ–เบธ optimizer เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ Horovod horovod.DistributedOptimizer เบ‚เบฐเบซเบเบฒเบ เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ” เปƒเบ™ MXNet เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เป€เบญเบตเป‰เบ™ Horovod APIs เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเปเบˆเบเบขเบฒเบ. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เปเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบตเบ„เบงเบฒเบกเป‚เบ›เปˆเบ‡เปƒเบชเบ•เปเปˆเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ.

เป€เบฅเบตเปˆเบกเป„เบง

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเป€เบ„เบทเบญเบ‚เปˆเบฒเบ neural convolutional เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปƒเบ™เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™ MNIST เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเป‚เบ”เบเปƒเบŠเป‰ MXNet เปเบฅเบฐ Horovod เปƒเบ™ MacBook เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.
เบ—เปเบฒเบญเบดเบ”, เบ•เบดเบ”เบ•เบฑเป‰เบ‡ mxnet เปเบฅเบฐ horovod เบˆเบฒเบ PyPI:

pip install mxnet
pip install horovod

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹: เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบžเบปเบšโ€‹เบเบฑเบšโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹ pip เบ•เบดเบ”เบ•เบฑเป‰เบ‡ horovodเบšเบฒเบ‡เบ—เบตเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบ•เบปเบงเปเบ› MACOSX_DEPLOYMENT_TARGET=10.vvเบšเปˆเบญเบ™เบ—เบตเปˆ vv โ€“ เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบ‚เบญเบ‡ MacOS เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹, เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹, เบชเปเบฒโ€‹เบฅเบฑเบš MacOSX Sierra เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบ‚เบฝเบ™โ€‹ MACOSX_DEPLOYMENT_TARGET=10.12 pip เบ•เบดเบ”เบ•เบฑเป‰เบ‡ horovod

เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ OpenMPI เบˆเบฒเบเบ™เบตเป‰.

เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹, เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป„เบ”เป‰โ€‹ mxnet_mnist.py เบˆเบฒเบเบ™เบตเป‰ เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ MacBook terminal เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ:

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

เบ™เบตเป‰เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบเปˆเบฝเบงเบเบฑเบšเบชเบญเบ‡เปเบเบ™เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

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

เบเบฒเบ™เบชเบฒเบ—เบดเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เป€เบกเบทเปˆเบญเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบฎเบนเบšเปเบšเบš ResNet50-v1 เปƒเบ™เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™ ImageNet เบเปˆเบฝเบงเบเบฑเบš 64 GPUs เบ—เบตเปˆเบกเบตเปเบ›เบ”เบ•เบปเบงเบขเปˆเบฒเบ‡ p3.16xlarge EC2, เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ 8 NVIDIA Tesla V100 GPUs เปƒเบ™ AWS cloud, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบšเบฑเบ™เบฅเบธเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบœเปˆเบฒเบ™ 45000 เบฎเบนเบšเบžเบฒเบš/เบงเบดเบ™เบฒเบ—เบต (เป€เบŠเบฑเปˆเบ™: เบˆเปเบฒเบ™เบงเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต). เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™ 44 เบ™เบฒเบ—เบตเบซเบผเบฑเบ‡เบˆเบฒเบ 90 epochs เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡ 75.7%.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฝเบšเบ—เบฝเบšเบ™เบตเป‰เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ—เบตเปˆเปเบˆเบเบขเบฒเบเบ‚เบญเบ‡ MXNet เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™ 8, 16, 32 เปเบฅเบฐ 64 GPUs เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ”เบฝเบงเปเบฅเบฐเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เปเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ‚เบญเบ‡ 1 เบซเบฒ 1 เปเบฅเบฐ 2 เบซเบฒ 1, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบฎเบนเบš 1 เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เปƒเบ™เปเบเบ™ y เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบŠเป‰เบฒเบ, เปเบ–เบšเบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบˆเปเบฒเบ™เบงเบ™เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบˆเบฐเบเบถเบเบญเบปเบšเบฎเบปเบกเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต, เบชเบฒเบเบชเบฐเบ—เป‰เบญเบ™เป€เบ–เบดเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ” (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ•เบปเบงเบˆเบดเบ‡เบเบฑเบšเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก) เปƒเบ™เปเบเบ™ y เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบ‚เบงเบฒ. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”. เบ–เป‰เบฒเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ”เบฝเบง, เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ–เบดเบ‡ 38% เปƒเบ™ 64 GPUs. เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš Horovod, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเบญเบ‡เป€เบ—เบปเปˆเบฒเบ—เบฝเบšเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ„เบปเบ™เบ‡เบฒเบ™.

เบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบเบฑเบš Apache MXNet เปเบฅเบฐ Horovod
เบฎเบนเบš 1. เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เปเบšเบšเปเบˆเบเบขเบฒเบเป‚เบ”เบเปƒเบŠเป‰ MXNet เบเบฑเบš Horovod เปเบฅเบฐเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต

เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ 1 เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฝเบšเบ—เบฝเบšเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบชเบธเบ”เบ—เป‰เบฒเบเบ•เปเปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบกเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปƒเบ™ 64 GPUs. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ MXNet เบเบฑเบš Horovod เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ”เป‰เบงเบเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ•เปˆเปเบฒเบชเบธเบ”.

เบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบเบฑเบš Apache MXNet เปเบฅเบฐ Horovod
เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ 1. เบเบฒเบ™เบชเบปเบกเบ—เบฝเบšเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡ Horovod เปเบฅเบฐ Parameter Server เบ—เบตเปˆเบกเบตเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เปเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ‚เบญเบ‡ 2 เบ•เปเปˆ 1.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เปเบœเปˆเบžเบฑเบ™

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ„เบทเบ™เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ—เบตเปˆเปเบˆเบเบขเบฒเบเป‚เบ”เบเปƒเบŠเป‰ MXNet เปเบฅเบฐ Horovod. เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เปเบšเบšเปเบˆเบเบขเบฒเบเบเบฑเบš MXNet เบญเปˆเบฒเบ™ เบ•เบญเบšเบ™เบตเป‰.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 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, เบšเปˆเบญเบ™เบ—เบตเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบงเป‰เบเปˆเบญเบ™เปเบฅเป‰เบง.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 2

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Horovod API เบเบฑเบšเบชเบฐเบ„เบดเบšเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบก MXNet เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. script เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ MXNet Gluon API เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เปเบกเปˆเปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบ. เป€เบชเบฑเป‰เบ™เปƒเบ™เบ•เบปเบงเบซเบ™เบฒเปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบชเบฐเบ„เบดเบšเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปเบฅเป‰เบง. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เบเบฑเบš Horovod:

  • เบเปเบฒเบ™เบปเบ”เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš Horovod เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ (เป€เบชเบฑเป‰เบ™ 8) เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เบซเบผเบฑเบเบเบฒเบŸเบดเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.
  • เบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบˆเบฒเบเบ„เบปเบ™เบ‡เบฒเบ™เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบ—เบธเบเบ„เบปเบ™ (เป€เบชเบฑเป‰เบ™ 18) เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ„เบปเบ™เบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ”เบฝเบงเบเบฑเบ™.
  • เบชเป‰เบฒเบ‡ Horovod เป„เบ”เป‰ DistributedOptimizer (เป€เบชเบฑเป‰เบ™ 25) เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเปเบˆเบเบขเบฒเบ.

เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบชเบฐเบ„เบฃเบดเบšเป€เบ•เบฑเบก, เบเบฐเบฅเบธเบ™เบฒเป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ 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    ...

เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 3

เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเป„เบ›เบซเบฒเปœเบถเปˆเบ‡เปƒเบ™เบœเบนเป‰เบญเบญเบเปเบฎเบ‡เบ‡เบฒเบ™เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเปเบšเบšเปเบˆเบเบขเบฒเบเป‚เบ”เบเปƒเบŠเป‰เบ„เบณเบชเบฑเปˆเบ‡ MPI. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ—เบตเปˆเปเบˆเบเบขเบฒเบเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เบชเบตเปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบต 4 GPUs เปเบ•เปˆเบฅเบฐเบ„เบปเบ™, เปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” 16 GPUs เปƒเบ™เบเบธเปˆเบก. เบ•เบปเบงเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš Stochastic Gradient Descent (SGD) เบˆเบฐเบ–เบทเบเปƒเบŠเป‰เบเบฑเบš hyperparameters เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบ‚เบฐเปœเบฒเบ” mini-batch: 256
  • เบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰: 0.1
  • เปเบฎเบ‡เบ”เบฑเบ™: 0.9
  • เบเบฒเบ™โ€‹เบซเบผเบธเบ”โ€‹เบœเปˆเบญเบ™โ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒโ€‹: 0.0001โ€‹

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบˆเบฒเบ GPU เบซเบ™เบถเปˆเบ‡เป€เบ›เบฑเบ™ 64 GPUs, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ•เบฒเบกเบˆเปเบฒเบ™เบงเบ™ GPUs (เบˆเบฒเบ 0,1 เบชเปเบฒเบฅเบฑเบš 1 GPU เป€เบ›เบฑเบ™ 6,4 เบชเปเบฒเบฅเบฑเบš 64 GPUs), เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฎเบฑเบเบชเบฒเบˆเปเบฒเบ™เบงเบ™เบฎเบนเบšเบžเบฒเบšเบ•เปเปˆ GPU เบขเบนเปˆเบ—เบตเปˆ 256 (เบˆเบฒเบเบŠเบธเบ”เบ‚เบญเบ‡. 256 เบฎเบนเบšเบžเบฒเบšเบชเปเบฒเบฅเบฑเบš 1 GPU เป€เบ›เบฑเบ™ 16 เบชเปเบฒเบฅเบฑเบš 384 GPUs). เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบเบฒเบ™เป€เบชเบทเปˆเบญเบกเบชเบฐเบžเบฒเบšเบ‚เบญเบ‡เบ™เป‰เปเบฒเบซเบ™เบฑเบเปเบฅเบฐ momentum เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเป‰เบญเบ™เบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ GPUs เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบ›เบฐเบชเบปเบกเบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™ float64 เบชเปเบฒเบฅเบฑเบš forward pass เปเบฅเบฐ float16 เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ gradients เป€เบžเบทเปˆเบญเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ float32 เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ”เบ 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

เบชเบฐเบซเบฅเบธเบš

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ—เบตเปˆเปเบˆเบเบขเบฒเบเป‚เบ”เบเปƒเบŠเป‰ Apache MXNet เปเบฅเบฐ Horovod. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เปเบฅเบฐเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบตเบŸเป€เบงเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™ ImageNet เบ—เบตเปˆเบฎเบนเบšเปเบšเบš ResNet50-v1 เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบก. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป„เบ”เป‰เบฅเบงเบกเป€เบญเบปเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เบฑเบ”เปเบ›เบ‡เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰ Horovod.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฑเบš MXNet เปเบฅเบฐเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡, เป„เบ›เบ—เบตเปˆเบซเบ™เป‰เบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ MXNeเบ—เปเบฒเบญเบดเบ”เบชเป‰เบฒเบ‡ MXNet. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบขเปˆเบฒเบ‡เปเบ‚เบ‡เปเบฎเบ‡ MXNet เปƒเบ™ 60 เบ™เบฒเบ—เบตเป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš MXNet เปเบฅเป‰เบงเปเบฅเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบฎเบฝเบ™เบฎเบนเป‰เปเบšเบšเปเบˆเบเบขเบฒเบเบเบฑเบš Horovod, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡ เบซเบ™เป‰เบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Horovod, เบชเป‰เบฒเบ‡เบกเบฑเบ™เบˆเบฒเบ MXNet เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡ MNIST เบซเบผเบท IMAGEnet.

* เบ„เปˆเบฒโ€‹เปƒเบŠเป‰โ€‹เบˆเปˆเบฒเบโ€‹เปเบกเปˆเบ™โ€‹เบ„เบดเบ”โ€‹เป„เบฅเปˆโ€‹เป‚เบ”เบโ€‹เบญเบตเบ‡โ€‹เปƒเบชเปˆโ€‹ เบญเบฑเบ”เบ•เบฒเบŠเบปเปˆเบงเป‚เบกเบ‡ AWS เบชเปเบฒเบฅเบฑเบš EC2 Instances

เบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบซเบผเบฑเบเบชเบนเบ” "ML เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบเปˆ"

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster