เบเบฒเบโเปเบโเบเบฒโเบชเบฒโเบเบญเบโเบเบปเบโเบเบงเบฒเบกโเปเบเปโเบเบทเบโเบเบฐโเบเบฝเบกโเปเบโเบชเบฐโเบกเบฒเบโเบชเบฐโเบกเบฒเบโเบเบญเบโเบเบฒเบโเปเบฅเบตเปเบกโเบเบปเปเบโเบเบญเบโเบงเบดโเบเบฒโเบเบฒเบ
เบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเปเบเบเปเบเบเบขเบฒเบเบขเบนเปเปเบเบซเบผเบฒเบเปเบเบปเบงเบขเปเบฒเบเบเบญเบกเบเบดเบงเปเบเบตเปเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบชเบนเบเบชเบฒเบกเบฒเบเบซเบผเบธเบเบเปเบญเบเปเบงเบฅเบฒเบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเบเบญเบเปเบเบทเบญเบเปเบฒเบ neural เปเบฅเบดเบเบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบเปเบฝเบงเบเบฑเบเบเปเปเบกเบนเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบเบเบฒเบเบญเบฒเบเบดเบเบซเบฒเบเบปเปเบงเปเบกเบเบซเบผเบทเปเบกเปเบเบฐเบเบฑเปเบเบเบฒเบเบต, เปเบฎเบฑเบเปเบซเปเปเบเบฑเบเบเบดเบเบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเบเบตเปเปเบกเปเบเปเบเปเบเบฐเบซเบเบฒเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบปเบงเบเบดเบเบเบญเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบฅเบดเบ. เบเบนเปเปเบเปเบเปเบญเบเปเบเบปเปเบฒเปเบเบงเบดเบเบตเบเบฒเบเปเบเปเบเบเบฑเบเปเบฅเบฐ synchronize เบเปเปเบกเบนเบเปเบเบเบปเปเบงเบซเบผเบฒเบเปเบเบปเบงเบขเปเบฒเบ, เปเบเบดเปเบเบกเบตเบเบปเบเบเบฐเบเบปเบเบญเบฑเบเปเบซเบเปเบซเบผเบงเบเบเปเปเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบเบฐเบซเบเบฒเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบนเปเปเบเปเบเบงเบเบฎเบนเปเบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเปเบชเบฐเบเบดเบเบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบปเบงเบขเปเบฒเบเบเบฝเบงเปเบเบซเบฒเบซเบผเบฒเบเบเบปเบงเบขเปเบฒเบ.
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบตเปเปเบงเปเบฅเบฐเบเปเบฒเบเบเบฒเบเบเบตเปเบเบฐเปเบเบเบขเบฒเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบเบเปเบเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบฅเบดเบเปเบเบตเบ Apache MXNet เปเบฅเบฐเบเบญเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเบเบตเปเปเบเบเบขเบฒเบ Horovod. เบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบขเปเบฒเบเบเบฐเปเบเปเบเบเปเบฝเบงเบเบฑเบเบเบปเบเบเบฐเปเบซเบเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเบญเบ Horovod เปเบฅเบฐเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเบดเบเบตเบเบฒเบเบเบฝเบเบเบปเบเบเบถเบเบซเบฑเบ MXNet เปเบเบทเปเบญเปเบซเปเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบเปเบเบเปเบเบเบขเบฒเบเบเบฑเบ Horovod.
Apache MXNet เปเบกเปเบเบซเบเบฑเบ
เปเบเบฑเบเบเบญเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบฅเบดเบเปเบซเบผเปเบเปเบเบตเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบชเปเบฒเบ, เบเบถเบเบญเบปเบเบฎเบปเบก, เปเบฅเบฐเบเปเบฒเปเบเปเปเบเบทเบญเบเปเบฒเบ neural เปเบฅเบดเบ. MXNet abstracts เบซเปเบฒเบเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบทเบญเบเปเบฒเบ neural, เบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบชเบนเบเปเบฅเบฐเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฒเบเปเบเป, เปเบฅเบฐเบชเบฐเปเบซเบเบต APIs เบชเปเบฒเบฅเบฑเบเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบเบดเบเบปเบกเปเบเบฑเปเบ: , , , , , , เปเบฅเบฐเบญเบทเปเบเป.
เบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเปเบเบเบขเบฒเบเปเบ MXNet เบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบฅเบฒเบกเบดเปเบเบต
เปเบเปเบงเบดเบเบตเบเบฒเบเปเบเบตเบเปเบงเบตเบเบฒเบฅเบฒเบกเบดเปเบเบต. เบกเบฑเบเปเบเปเบเบธเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเบทเปเบญเปเบเบฑเบเบเปเบฒ gradients เบเบฒเบเปเบเปเบฅเบฐเบเบฐเบเบฑเบเบเบฒเบ, เบเบฐเบเบดเบเบฑเบเบเบฒเบเบฅเบงเบเบฅเบงเบก, เปเบฅเบฐเบชเบปเปเบ gradients เบชเบฐเบเบฑเบเบเบฑเบเบเบธเบเบเบฑเบเบเบทเบเปเบเบเปเบญเบเบเบฐเบเบฑเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบ iteration เบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเปเปเปเบ. เบเบฒเบเบเปเบฒเบเบปเบเบญเบฑเบเบเบฒเบชเปเบงเบเบเบตเปเบเบทเบเบเปเบญเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฑเบเบเบนเปเบญเบญเบเปเบฎเบเบเบฒเบเปเบกเปเบเบเบธเบเปเบเบชเปเบฒเบเบฑเบเปเบเบเบฒเบเบเบฑเบเบเบฐเบซเบเบฒเบเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบ. เบเปเบฒเบกเบตเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบฝเบง, เบกเบฑเบเบญเบฒเบเบเบฐเบเบฒเบเปเบเบฑเบเบเปเปเบเบปเบเบเปเบญเบเปเบเบเบฒเบเบเบดเบเปเบฅเป. เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบเปเบฒเบกเบตเบเบฒเบเปเบเปเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบซเบผเบฒเบเปเบเบตเบเปเบ, เบเบฒเบเบชเบทเปเบชเบฒเบเบซเบผเบฒเบเบเปเปเบซเบผเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบงเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเปเบเบทเบญเบเปเบฒเบเบเบฑเบเบซเบกเบปเบ.
Horovod เปเบกเปเบเบซเบเบฑเบ
เปเบกเปเบเปเบเบเบฎเปเบฒเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบเบเปเบเบตเบเปเบเบตเบเบเบตเปเปเบเบตเบเปเบเบตเบเบเบตเปเบเบฑเบเบเบฐเบเบฒเบขเบนเป Uber. เบกเบฑเบเปเบเปเปเบเบเปเบเปเบฅเบเบต cross-GPU เปเบฅเบฐ cross-node เบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเบฑเปเบ NVIDIA Collective Communications Library (NCCL) เปเบฅเบฐ Message Passing Interface (MPI) เปเบเบทเปเบญเปเบเบเบขเบฒเบเปเบฅเบฐเบฅเบงเบเบฅเบงเบกเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบเบเบเปเบฒเบฅเบญเบเปเบเบเบปเปเบง vorecs. เบกเบฑเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบเบงเบดเบเบเบญเบเปเบเบทเบญเบเปเบฒเบเปเบฅเบฐเบเบฐเบซเบเบฒเบเปเบเปเบเบตเปเบกเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบปเบงเปเบเบเปเบเบทเบญเบเปเบฒเบ neural เปเบฅเบดเบ. เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบญเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบเบทเปเบญเบเบเบฑเบเบเบตเปเบเบดเบเบปเบกเบซเบผเบฒเบ, เบเบท , 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, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเบเปเบฒเบเบงเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบชเบญเบเปเบเบปเปเบฒเบเบฝเบเบเบฑเบเบเปเบฒเบเบงเบเบเบปเบเบเบฒเบ.

เบฎเบนเบ 1. เบเบฒเบเบเบฝเบเบเบฝเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบเบเปเบเบเบขเบฒเบเปเบเบเปเบเป MXNet เบเบฑเบ Horovod เปเบฅเบฐเบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบฅเบฒเบกเบดเปเบเบต
เปเบเบเบฒเบเบฐเบฅเบฒเบ 1 เบเปเบฒเบเบฅเบธเปเบกเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฝเบเบเบฝเบเบเปเบฒเปเบเปเบเปเบฒเบเบชเบธเบเบเปเบฒเบเบเปเปเบเบปเบงเบขเปเบฒเบเปเบกเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบฅเบญเบเปเบ 64 GPUs. เบเบฒเบเบเปเบฒเปเบเป 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. ะขะฐะบะถะต ะฒั ะผะพะถะตัะต ะธัะฟะพะปัะทะพะฒะฐัั , เบเปเบญเบเบเบตเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบเปเบเบทเบเบเบดเบเบเบฑเปเบเปเบงเปเบเปเบญเบเปเบฅเปเบง.
เบเบฑเปเบเบเบญเบ 2
เปเบเบตเปเบกเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ Horovod API เบเบฑเบเบชเบฐเบเบดเบเบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบก MXNet เบเบญเบเบเปเบฒเบ. script เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบเบเบญเบตเบเปเบชเป MXNet Gluon API เบชเบฒเบกเบฒเบเบเบทเบเบเปเบฒเปเบเปเปเบเบฑเบเปเบกเปเปเบเบเบเปเบฒเบเบเบฒเบ. เปเบชเบฑเปเบเปเบเบเบปเบงเบซเบเบฒเปเบกเปเบเบเปเบฒเปเบเบฑเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบกเบตเบชเบฐเบเบดเบเบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเปเบฅเปเบง. เบเบตเปเปเบกเปเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเบชเปเบฒเบเบฑเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฎเบฑเบเปเบเบทเปเบญเบฎเบฝเบเบฎเบนเปเบเบฑเบ Horovod:
- เบเปเบฒเบเบปเบเบชเบฐเบเบฒเบเบเบฒเบเบเบฒเบกเบฅเปเบฒเบเบฑเบ Horovod เบเปเบญเบเบเบดเปเบ (เปเบชเบฑเปเบ 8) เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบงเปเบฒเบเบฒเบเบเบถเบเบญเบปเบเบฎเบปเบกเปเบกเปเบเบเปเบฒเปเบเบตเบเบขเบนเปเปเบเบซเบผเบฑเบเบเบฒเบเบดเบเบเบตเปเบเบทเบเบเปเบญเบ.
- เบเปเบฒเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบเบทเปเบญเบเบเบปเปเบเบเบฒเบเบเบปเบเบเบฒเบเบซเบเบถเปเบเปเบเบซเบฒเบเบธเบเบเบปเบ (เปเบชเบฑเปเบ 18) เปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบเบปเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบปเบงเบเปเบฒเบเบปเบเปเบเบทเปเบญเบเบเบปเปเบเบเบฝเบงเบเบฑเบ.
- เบชเปเบฒเบ Horovod เปเบเป DistributedOptimizer (เปเบชเบฑเปเบ 25) เปเบเบทเปเบญเบเบฑเบเบเบธเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเบฅเบฑเบเบชเบฐเบเบฐเปเบเบเบขเบฒเบ.
เปเบเบทเปเบญเปเบซเปเปเบเปเบชเบฐเบเบฃเบดเบเปเบเบฑเบก, เบเบฐเบฅเบธเบเบฒเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบ 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 ...เบเบฑเปเบเบเบญเบ 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 เปเบฅเบฐเบเบฒเบเบฎเบฝเบเบฎเบนเปเปเบฅเบดเบเปเบเบดเปเบ, เปเบเบเบตเปเบซเบเปเบฒเบเบฒเบเบเบดเบเบเบฑเปเบ เบเปเบฒเบญเบดเบเบชเปเบฒเบ MXNet. เบเบงเบเปเบฎเบปเบฒเบเบฑเบเปเบเบฐเบเปเบฒเปเบซเปเบญเปเบฒเบเบเบปเบเบเบงเบฒเบกเบขเปเบฒเบเปเบเบเปเบฎเบ เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบ.
เบเปเบฒเบเปเบฒเบเปเบเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ MXNet เปเบฅเปเบงเปเบฅเบฐเบเปเบญเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเบฎเบฝเบเบฎเบนเปเปเบเบเปเบเบเบขเบฒเบเบเบฑเบ Horovod, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบฅเบญเบเปเบเบดเปเบ , เบชเปเบฒเบเบกเบฑเบเบเบฒเบ MXNet เปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบปเบงเบขเปเบฒเบ เบซเบผเบท .
* เบเปเบฒโเปเบเปโเบเปเบฒเบโเปเบกเปเบโเบเบดเบโเปเบฅเปโเปเบเบโเบญเบตเบโเปเบชเปโ AWS เบชเปเบฒเบฅเบฑเบ EC2 Instances
เบฎเบฝเบเบฎเบนเปเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบซเบผเบฑเบเบชเบนเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
