āύāĻŋāĻŦāύā§āϧāĻāĻŋāϰ āĻ āύā§āĻŦāĻžāĻĻ āĻā§āϰā§āϏ āĻļā§āϰā§āϰ āĻĒā§āϰāĻžāĻā§āĻāĻžāϞ⧠āĻĒā§āϰāϏā§āϤā§āϤ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ
āĻāĻāĻžāϧāĻŋāĻ āĻāĻā§āĻ-āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻĻā§āώā§āĻāĻžāύā§āϤ⧠āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻāϧā§āύāĻŋāĻ āĻāĻā§āϰ āύāĻŋāĻāϰāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§āϰ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āϏāĻŽāϝāĻŧāĻā§ āϏāĻĒā§āϤāĻžāĻš āĻĨā§āĻā§ āĻāύā§āĻāĻž āĻŦāĻž āĻāĻŽāύāĻāĻŋ āĻŽāĻŋāύāĻŋāĻā§ āĻĒā§āϰāĻā§āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖā§ āĻĄā§āĻāĻžāϰ āĻāĻĒāϰ āĻāĻŽāĻŋāϝāĻŧā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§, āĻāĻ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻā§āĻļāϞāĻāĻŋāĻā§ āĻāĻā§āϰ āĻļāĻŋāĻā§āώāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻĒā§āϰāϝāĻŧā§āĻā§ āĻĒā§āϰāĻāϞāĻŋāϤ āĻāϰ⧠āϤā§āϞā§āĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻ āĻŦāĻļā§āϝāĻ āĻŦā§āĻāϤ⧠āĻšāĻŦā§ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻžāϧāĻŋāĻ āĻĻā§āώā§āĻāĻžāύā§āϤ āĻā§āĻĄāĻŧā§ āĻĄā§āĻāĻž āĻāĻžāĻ āĻāĻŦāĻ āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāĻāĻ āĻāϰāϤ⧠āĻšāϝāĻŧ, āϝāĻžāϰ āĻĢāϞāϏā§āĻŦāϰā§āĻĒ āϏā§āĻā§āϞāĻŋāĻ āĻĻāĻā§āώāϤāĻžāϰ āĻāĻĒāϰ āĻāĻāĻāĻŋ āĻŦāĻĄāĻŧ āĻĒā§āϰāĻāĻžāĻŦ āϰāϝāĻŧā§āĻā§āĨ¤ āĻāĻĒāϰāύā§āϤā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻāĻžāύāĻž āĻāĻāĻŋāϤ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻšāϝāĻŧ āϝāĻž āĻāĻāĻ āĻĻā§āώā§āĻāĻžāύā§āϤ āĻĨā§āĻā§ āĻāĻāĻžāϧāĻŋāĻ āĻĻā§āώā§āĻāĻžāύā§āϤ⧠āĻāϞā§āĨ¤
āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻāĻŽāϰāĻž āĻāĻĒā§āύ āĻĄāĻŋāĻĒ āϞāĻžāϰā§āύāĻŋāĻ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ Apache MXNet āĻāĻŦāĻ Horovod āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϞāĻžāϰā§āύāĻŋāĻ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻļā§āĻāĻžāϰ āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻžāϰ āĻāĻāĻāĻŋ āĻĻā§āϰā§āϤ āĻāĻŦāĻ āϏāĻšāĻ āĻāĻĒāĻžāϝāĻŧ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĨāĻž āĻŦāϞāĻŦāĨ¤ āĻāĻŽāϰāĻž āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ Horovod āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻā§āϰ āĻāĻžāϰā§āϝāĻāĻžāϰāĻŋāϤāĻž āϏā§āĻŦāĻŋāϧāĻžāĻā§āϞāĻŋ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰāĻŦ āĻāĻŦāĻ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰāĻŦ āĻā§āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ MXNet āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϞāĻŋāĻāϤ⧠āĻšāϝāĻŧ āϝāĻžāϤ⧠āĻāĻāĻŋ Horovod-āĻāϰ āϏāĻžāĻĨā§ āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻāĻžāĻ āĻāϰā§āĨ¤
Apache MXNet āĻāĻŋ
āĻāĻāĻāĻŋ āĻāĻĒā§āύ āϏā§āϰā§āϏ āĻĄāĻŋāĻĒ āϞāĻžāϰā§āύāĻŋāĻ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ āϝāĻž āĻāĻā§āϰ āύāĻŋāĻāϰāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϤā§āϰāĻŋ, āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻāĻŦāĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤ MXNet āύāĻŋāĻāϰāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύā§āϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻāĻāĻŋāϞāϤāĻžāĻā§āϞāĻŋāĻā§ āĻŦāĻŋāĻŽā§āϰā§āϤ āĻāϰā§, āĻāĻāĻŋ āĻ āϤā§āϝāύā§āϤ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāĻŦāĻ āϏā§āĻā§āϞāϝā§āĻā§āϝ āĻāĻŦāĻ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āĻāĻžāώāĻžāϰ āĻāύā§āϝ API āĻ āĻĢāĻžāϰ āĻāϰ⧠āϝā§āĻŽāύ , , , , , , āĻāĻŦāĻ āĻ āύā§āϝāĻĻā§āϰ
āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āϏāĻš MXNet-āĻ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§
āĻāĻāĻāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāϰā§āĻŽā§āϰ āĻāĻžāĻ āĻĨā§āĻā§ āĻā§āϰā§āĻĄāĻŋāϝāĻŧā§āύā§āĻ āϏāĻāĻā§āϰāĻš āĻāϰāϤā§, āĻāĻāϤā§āϰā§āĻāϰāĻŖ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāϤ⧠āĻāĻŦāĻ āĻĒāϰāĻŦāϰā§āϤ⧠āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋāϰ āĻāύā§āϝ āĻāϰā§āĻŽā§āĻĻā§āϰ āĻāĻžāĻā§ āĻāĻĒāĻĄā§āĻ āĻāϰāĻž āĻā§āϰā§āĻĄāĻŋāϝāĻŧā§āύā§āĻ āĻĒāĻžāĻ āĻžāϤ⧠āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāĻāĻāĻŋ āϏā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāϰā§āĻŽā§āĻĻā§āϰ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻ āĻŋāĻ āĻ āύā§āĻĒāĻžāϤ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāĻžāϰā§āϝāĻāϰ āϏā§āĻā§āϞāĻŋāĻ āĻāϰ āĻŽā§āϞ āĻāĻžāĻŦāĻŋāĻāĻžāĻ āĻŋāĨ¤ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻĨāĻžāĻāϞā§, āĻāĻāĻŋ āĻāĻŖāύāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻāĻŋ āĻŦāĻžāϧāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻŦāĻŋāĻĒāϰā§āϤāĻāĻžāĻŦā§, āϝāĻĻāĻŋ āĻ āύā§āĻāĻā§āϞāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ, āĻ āύā§āĻ-āĻĨā§āĻā§-āĻ āύā§āĻ āϝā§āĻāĻžāϝā§āĻ āϏāĻŽāϏā§āϤ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϏāĻāϝā§āĻāĻā§āϞāĻŋāĻā§ āĻāĻāĻā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤
Horovod āĻāĻŋ
āĻāĻŦāĻžāϰ⧠āĻŦāĻŋāĻāĻļāĻŋāϤ āĻāĻāĻāĻŋ āĻāĻĒā§āύ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻĄāĻŋāĻĒ āϞāĻžāϰā§āύāĻŋāĻ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻāĨ¤ āĻāĻāĻŋ āĻĻāĻā§āώ āĻā§āϰāϏ-āĻāĻŋāĻĒāĻŋāĻāĻ āĻāĻŦāĻ āĻā§āϰāϏ-āύā§āĻĄ āĻĒā§āϰāϝā§āĻā§āϤāĻŋ āϝā§āĻŽāύ NVIDIA āĻāĻžāϞā§āĻā§āĻāĻŋāĻ āĻāĻŽāĻŋāĻāύāĻŋāĻā§āĻļāύāϏ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ (NCCL) āĻāĻŦāĻ āĻŽā§āϏā§āĻ āĻĒāĻžāϏāĻŋāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ (MPI) āĻā§āϰā§āĻā§āϏ āĻā§āĻĄāĻŧā§ āĻŽāĻĄā§āϞ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻā§āϞāĻŋ āĻŦāĻŋāϤāϰāĻŖ āĻāĻŦāĻ āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻāĻŋ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻŦā§āϝāĻžāύā§āĻĄāĻāĻāĻĨā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻā§ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāϰ⧠āĻāĻŦāĻ āĻāĻā§āϰ āύāĻŋāĻāϰāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻŽāĻĄā§āϞāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻžāϞāĻāĻžāĻŦā§ āϏā§āĻā§āϞ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻŦāϰā§āϤāĻŽāĻžāύ⧠āĻŦā§āĻļ āĻāϝāĻŧā§āĻāĻāĻŋ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ āϏāĻŽāϰā§āĻĨāύ āĻāϰā§, āϝāĻĨāĻž , Tensorflow, Keras, āĻāĻŦāĻ PyTorch.
MXNet āĻāĻŦāĻ Horovod āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ
MXNet Horovod-āĻ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϞāĻžāϰā§āύāĻŋāĻ API-āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ Horovod-āĻāϰ āϏāĻžāĻĨā§ āĻāĻā§āĻā§āϤ āĻšāϝāĻŧāĨ¤ Horovod āϝā§āĻāĻžāϝā§āĻ APIs horovod.broadcast(), horovod.allgather() и horovod.allreduce() MXNet āĻāĻā§āĻāĻŋāύā§āϰ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āĻāϞāĻŦā§āϝāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāĻŋāϤ āĻšāϝāĻŧā§āĻā§, āĻāϰ āĻāĻžāϏā§āĻ āĻā§āϰāĻžāĻĢā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏā§āĻŦā§āĨ¤ āĻāĻāĻāĻžāĻŦā§, āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāĻāĻā§āĻļāύā§āϰ āĻāĻžāϰāĻŖā§ āĻāϰā§āĻŽāĻā§āώāĻŽāϤāĻž āĻā§āώāϤāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠MXNet āĻāĻā§āĻāĻŋāύ āĻĻā§āĻŦāĻžāϰāĻž āϝā§āĻāĻžāϝā§āĻ āĻāĻŦāĻ āĻāĻŖāύāĻžāϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āύāĻŋāϰā§āĻāϰāϤāĻž āϏāĻšāĻā§āĻ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāĻž āĻšāϝāĻŧāĨ¤ Horovod-āĻ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāϰ āĻ āĻŦāĻā§āĻā§āĻ horovod.DistributedOptimizer āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻšāϝāĻŧ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāϰ MXNet-āĻ āϝāĻžāϤ⧠āĻāĻāĻŋ āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻāĻĒāĻĄā§āĻā§āϰ āĻāύā§āϝ āϏāĻāĻļā§āϞāĻŋāώā§āĻ Horovod API-āĻā§ āĻāϞ āĻāϰā§āĨ¤ āĻāĻ āϏāĻŽāϏā§āϤ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύā§āϰ āĻŦāĻŋāĻŦāϰāĻŖ āĻļā§āώ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻāĻžāĻā§ āϏā§āĻŦāĻā§āĻāĨ¤
āĻĻā§āϰā§āϤ āĻļā§āϰā§
āĻāĻĒāύāĻŋ āĻĻā§āϰā§āϤ āĻāĻĒāύāĻžāϰ āĻŽā§āϝāĻžāĻāĻŦā§āĻā§ MXNet āĻāĻŦāĻ Horovod āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠MNIST āĻĄā§āĻāĻžāϏā§āĻā§ āĻāĻāĻāĻŋ āĻā§āĻ āĻāύāĻā§āϞā§āϝā§āĻļāύāĻžāϞ āύāĻŋāĻāϰāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§āϰ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻĒā§āϰāĻĨāĻŽā§, PyPI āĻĨā§āĻā§ mxnet āĻāĻŦāĻ horovod āĻāύāϏā§āĻāϞ āĻāϰā§āύ:
pip install mxnet
pip install horovodāĻĻā§āϰāώā§āĻāĻŦā§āϝ: āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāĻŽāϝāĻŧ āĻāĻāĻāĻŋ āϤā§āϰā§āĻāĻŋ āϏāĻŽā§āĻŽā§āĻā§āύ pip horovod āĻāύāϏā§āĻāϞ āĻāϰā§āύāĻšāϝāĻŧāϤ⧠āĻāĻĒāύāĻžāĻā§ āĻāĻāĻāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻļā§āϞ āϝā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§ MACOSX_DEPLOYMENT_TARGET=10.vvāϝā§āĻāĻžāύ⧠vv - āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ MacOS āϏāĻāϏā§āĻāϰāĻŖā§āϰ āϏāĻāϏā§āĻāϰāĻŖ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, MacOSX Sierra-āĻāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āϞāĻŋāĻāϤ⧠āĻšāĻŦā§ MACOSX_DEPLOYMENT_TARGET=10.12 āĻĒāĻŋāĻĒ āĻāύāϏā§āĻāϞ horovod
āϤāĻžāϰāĻĒāϰ OpenMPI āĻāύā§āϏāĻāϞ āĻāϰā§āύ .
āĻļā§āώā§, āĻĒāϰā§āĻā§āώāĻžāϰ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰā§āύ mxnet_mnist.py āĻāĻŦāĻ āĻāϝāĻŧāĻžāϰā§āĻāĻŋāĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻŽā§āϝāĻžāĻāĻŦā§āĻ āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻŽāĻžāύā§āĻĄāĻā§āϞāĻŋ āĻāĻžāϞāĻžāύ:
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āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻĄā§āĻŽā§
āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϏāĻš 50āĻāĻŋ āĻāĻŋāĻĒāĻŋāĻāĻāϤ⧠āĻāĻāĻāĻŋ āĻāĻŽā§āĻāύā§āĻ āĻĄā§āĻāĻžāϏā§āĻā§ ResNet1-v64 āĻŽāĻĄā§āϞāĻā§ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻĻā§āĻāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ p3.16 āĻŦāĻĄāĻŧ EC2, āĻĒā§āϰāϤāĻŋāĻāĻŋāϤ⧠AWS āĻā§āϞāĻžāĻāĻĄā§ 8āĻāĻŋ NVIDIA Tesla V100 GPU āϰāϝāĻŧā§āĻā§, āĻāĻŽāϰāĻž 45000 āĻāĻŦāĻŋ/āϏā§āĻā§āύā§āĻĄā§āϰ āĻāĻāĻāĻŋ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻĨā§āϰā§āĻĒā§āĻ āĻ āϰā§āĻāύ āĻāϰā§āĻāĻŋ (āĻ āϰā§āĻĨāĻžā§, āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŋāϤ āύāĻŽā§āύāĻžāϰ āϏāĻāĻā§āϝāĻž)āĨ¤ 44% āĻāϰ āϏāϰā§āĻŦā§āϤā§āϤāĻŽ āύāĻŋāϰā§āĻā§āϞāϤāĻžāϰ āϏāĻžāĻĨā§ 90āĻāĻŋ āϝā§āĻā§āϰ āĻĒāϰ⧠75.7 āĻŽāĻŋāύāĻŋāĻā§ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āϏāĻŽā§āĻĒāύā§āύ āĻšāϝāĻŧāĨ¤
āĻāĻŽāϰāĻž āĻāĻāĻŋāĻā§ MXNet-āĻāϰ āĻŦāĻŋāϤāϰāĻŖāĻā§āϤ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏāĻžāĻĨā§ 8, 16, 32 āĻāĻŦāĻ 64 GPU-āϤ⧠āĻāĻāĻāĻŋ āĻāĻāĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻŦāĻ āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻāϰā§āĻŽā§āϰ āĻ āύā§āĻĒāĻžāϤ āϝāĻĨāĻžāĻā§āϰāĻŽā§ 1 āĻĨā§āĻā§ 1 āĻāĻŦāĻ 2 āĻĨā§āĻā§ 1-āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏāĻžāĻĨā§ āϤā§āϞāύāĻž āĻāϰā§āĻāĻŋāĨ¤ āĻāĻĒāύāĻŋ āύā§āĻā§āϰ āĻāĻŋāϤā§āϰ 1 āĻ āĻĢāϞāĻžāĻĢāϞ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻŦāĻžāĻŽ āĻĻāĻŋāĻā§ y-āĻ āĻā§āώā§, āĻŦāĻžāϰāĻā§āϞāĻŋ āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āĻāύā§āϝ āĻāĻŋāϤā§āϰā§āϰ āϏāĻāĻā§āϝāĻž āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰā§, āϞāĻžāĻāύāĻā§āϞāĻŋ āĻĄāĻžāύāĻĻāĻŋāĻā§ y-āĻ āĻā§āώ⧠āϏā§āĻā§āϞāĻŋāĻ āĻĻāĻā§āώāϤāĻž (āĻ āϰā§āĻĨāĻžā§ āĻāĻĻāϰā§āĻļ āĻĨā§āϰā§āĻĒā§āĻ āĻĨā§āĻā§ āĻĒā§āϰāĻā§āϤ āĻ āύā§āĻĒāĻžāϤ) āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻā§āύ, āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻāĻā§āϝāĻžāϰ āĻĒāĻāύā§āĻĻ āϏā§āĻā§āϞāĻŋāĻ āĻĻāĻā§āώāϤāĻžāĻā§ āĻĒā§āϰāĻāĻžāĻŦāĻŋāϤ āĻāϰā§āĨ¤ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻĨāĻžāĻāϞā§, āϏā§āĻā§āϞāĻŋāĻ āĻĻāĻā§āώāϤāĻž 38āĻāĻŋ GPU-āϤ⧠64% āĻ āύā§āĻŽā§ āϝāĻžāϝāĻŧāĨ¤ Horovod āĻāϰ āĻŽāϤ⧠āĻāĻāĻ āϏā§āĻā§āϞāĻŋāĻ āĻĻāĻā§āώāϤāĻž āĻ āϰā§āĻāύ āĻāϰāϤā§, āĻāĻĒāύāĻžāĻā§ āĻāϰā§āĻŽā§āĻĻā§āϰ āϏāĻāĻā§āϝāĻžāϰ āϤā§āϞāύāĻžāϝāĻŧ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻāĻā§āϝāĻž āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤

āĻāĻŋāϤā§āϰ 1. Horovod āĻāĻŦāĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ MXNet āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻļāĻŋāĻā§āώāĻžāϰ āϤā§āϞāύāĻž
āύā§āĻā§āϰ āϏāĻžāϰāĻŖā§ 1-āĻ, 64āĻāĻŋ GPU-āϤ⧠āĻĒāϰā§āĻā§āώāĻž āĻāĻžāϞāĻžāύā§āϰ āϏāĻŽāϝāĻŧ āĻāĻŽāϰāĻž āĻāĻĻāĻžāĻšāϰāĻŖ āĻĒā§āϰāϤāĻŋ āĻā§āĻĄāĻŧāĻžāύā§āϤ āĻāϰāĻā§āϰ āϤā§āϞāύāĻž āĻāϰāĻŋāĨ¤ Horovod-āĻāϰ āϏāĻžāĻĨā§ MXNet āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠āϏāϰā§āĻŦāύāĻŋāĻŽā§āύ āĻāϰāĻā§ āϏā§āϰāĻž āĻĨā§āϰā§āĻĒā§āĻ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤

āϏāĻžāϰāĻŖāĻŋ 1. Horovod āĻāĻŦāĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻāϰā§āĻŽā§ āĻ
āύā§āĻĒāĻžāϤ 2 āĻĨā§āĻā§ 1 āĻāϰ āĻŽāϧā§āϝ⧠āĻāϰāĻā§āϰ āϤā§āϞāύāĻžā§ˇ
āϧāĻžāĻĒ āĻĒā§āύāϰā§āĻāĻ āύ āĻāϰ
āĻĒāϰāĻŦāϰā§āϤ⧠āϧāĻžāĻĒā§, āĻāĻŽāϰāĻž āĻāĻĒāύāĻžāĻā§ āĻĻā§āĻāĻžāĻŦ āĻāĻŋāĻāĻžāĻŦā§ MXNet āĻāĻŦāĻ Horovod āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻŋāϤāϰāĻŖāĻā§āϤ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āĻĢāϞāĻžāĻĢāϞ āĻĒā§āύāϰā§āϤā§āĻĒāĻžāĻĻāύ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ MXNet āĻāϰ āϏāĻžāĻĨā§ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϞāĻžāϰā§āύāĻŋāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύāϤ⧠āĻĒāĻĄāĻŧā§āύ .
āĻĒāĻāĻ āĻž 1
āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻā§āϰā§āύāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ MXNet āĻāĻžāϰā§āϏāύ 1.4.0 āĻŦāĻž āϤāĻžāϰ āĻŦā§āĻļāĻŋ āĻāĻŦāĻ Horovod āĻāĻžāϰā§āϏāύ 0.16.0 āĻŦāĻž āϤāĻžāϰ āĻŦā§āĻļāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻŽāĻāĻžāϤā§āϝāĻŧ āĻāύāϏā§āĻā§āϝāĻžāύā§āϏā§āϰ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤ GPU āĻā§āϰā§āύāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāĻā§āϞā§āĻ āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻŽāĻžāĻĻā§āϰ āĻāύāϏā§āĻā§āϝāĻžāύā§āϏāĻā§āϞā§āϰ āĻāύā§āϝ, āĻāĻŽāϰāĻž āĻŦā§āĻā§ āύāĻŋāϝāĻŧā§āĻāĻŋ Ubuntu 16.04 LinuxGPU āĻĄā§āϰāĻžāĻāĻāĻžāϰ 396.44, CUDA 9.2, cuDNN āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ 7.2.1, NCCL āĻāĻŽāĻŋāĻāύāĻŋāĻā§āĻāϰ 2.2.13 āĻāĻŦāĻ OpenMPI 3.1.1 āϏāĻšāĨ¤ āĻāĻĒāύāĻŋ āĻāϰāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ , āϝā§āĻāĻžāύ⧠āĻāĻ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāĻā§āϞāĻŋ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻāĻā§ā§ˇ
āĻĒāĻāĻ āĻž 2
āĻāĻĒāύāĻžāϰ MXNet āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āϏā§āĻā§āϰāĻŋāĻĒā§āĻā§ Horovod API-āĻāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻā§āώāĻŽāϤāĻž āϝā§āĻ āĻāϰā§āύāĨ¤ MXNet Gluon API-āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āύā§āĻā§āϰ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻāĻāĻāĻŋ āϏāĻāĻļā§āϞāĻŋāώā§āĻ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻŦā§āϞā§āĻĄ āϞāĻžāĻāύāĻā§āϞāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύ⧎ Horovod-āĻāϰ āϏāĻžāĻĨā§ āĻļā§āĻāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āĻāĻāĻžāύ⧠āĻāϝāĻŧā§āĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻšāĻŦā§:
- āϏāĻ āĻŋāĻ āĻā§āϰāĻžāĻĢāĻŋāĻā§āϏ āĻā§āϰ⧠āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āϏāĻā§āĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ āϤāĻž āĻŦā§āĻāĻžāϰ āĻāύā§āϝ āϏā§āĻĨāĻžāύā§āϝāĻŧ Horovod āϰâā§āϝāĻžāĻā§āĻ (āϞāĻžāĻāύ 8) āĻ āύā§āϝāĻžāϝāĻŧā§ āĻĒā§āϰāϏāĻā§āĻ āϏā§āĻ āĻāϰā§āύāĨ¤
- āĻāĻāĻāύ āĻāϰā§āĻŽā§ āĻĨā§āĻā§ āϏāĻāϞā§āϰ āĻāĻžāĻā§ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāĻā§āϞāĻŋ āĻĒāĻžāϏ āĻāϰā§āύ (āϞāĻžāĻāύ 18) āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāϤ⧠āϝ⧠āϏāĻŽāϏā§āϤ āĻāϰā§āĻŽā§ āĻāĻāĻ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āĨ¤
- āĻāĻāĻāĻŋ Horovod āϤā§āϰāĻŋ āĻāϰā§āύ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāϰ (āϞāĻžāĻāύ 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
āĻāĻŽāĻĒāĻŋāĻāĻ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻāϰā§āĻŽā§āĻĻā§āϰ āĻāĻāĻāύā§āϰ āϏāĻžāĻĨā§ āϞāĻ āĻāύ āĻāϰā§āύāĨ¤ āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§, āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻāĻžāϰāĻāĻŋ āĻĻā§āώā§āĻāĻžāύā§āϤ⧠āĻāϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ 4āĻāĻŋ āĻāĻŋāĻĒāĻŋāĻāĻ āϏāĻš, āĻāĻŦāĻ āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āĻŽā§āĻ 16āĻāĻŋ āĻāĻŋāĻĒāĻŋāĻāĻāĨ¤ āϏā§āĻāĻāĻžāϏā§āĻāĻŋāĻ āĻā§āϰā§āĻĄāĻŋāϝāĻŧā§āύā§āĻ āĻĄāĻŋāϏā§āύā§āĻ (SGD) āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻšāĻžāĻāĻĒāĻžāϰāĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāĻŦā§:
- āĻŽāĻŋāύāĻŋ-āĻŦā§āϝāĻžāĻā§āϰ āĻāĻāĻžāϰ: 256
- āĻļā§āĻāĻžāϰ āĻšāĻžāϰ: 0.1
- āĻāϰāĻŦā§āĻ: 0.9
- āĻāĻāύ āĻā§āώāϝāĻŧ: 0.0001
āϝā§āĻšā§āϤ⧠āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ GPU āĻĨā§āĻā§ 64 GPU-āϤ⧠āϏā§āĻā§āϞ āĻāϰā§āĻāĻŋ, āĻāĻŽāϰāĻž āϰā§āĻāĻŋāĻāĻāĻžāĻŦā§ GPU āĻā§āϞāĻŋāϰ āϏāĻāĻā§āϝāĻž āĻ āύā§āϏāĻžāϰ⧠āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āĻšāĻžāϰāĻā§ āϏā§āĻā§āϞ āĻāϰā§āĻāĻŋ (0,1 GPU-āĻāϰ āĻāύā§āϝ 1 āĻĨā§āĻā§ 6,4 GPU-āĻāϰ āĻāύā§āϝ 64), āϝāĻāύ GPU āĻĒā§āϰāϤāĻŋ āĻāĻŦāĻŋāϰ āϏāĻāĻā§āϝāĻž 256 āĻ āϰā§āĻā§āĻāĻŋ (āĻāĻāĻāĻŋ āĻŦā§āϝāĻžāĻ āĻĨā§āĻā§) 256 GPU-āĻāϰ āĻāύā§āϝ 1 āĻāĻŦāĻŋ āĻĨā§āĻā§ 16 GPU-āĻāϰ āĻāύā§āϝ 384)āĨ¤ GPU-āϰ āϏāĻāĻā§āϝāĻž āĻŦā§āĻĻā§āϧāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āĻāĻāύ āĻā§āώāϝāĻŧ āĻāĻŦāĻ āĻāϤāĻŋāϰ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāĻŽāϰāĻž NVIDIA Tesla GPUs āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽāϰā§āĻĨāĻŋāϤ float64 āĻāĻŖāύāĻžāϰ āĻāϤāĻŋ āĻŦāĻžāĻĄāĻŧāĻžāύā§āϰ āĻāύā§āϝ āĻĢāϰā§āϝāĻŧāĻžāϰā§āĻĄ āĻĒāĻžāϏā§āϰ āĻāύā§āϝ float16 āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻāĻŦāĻ āĻā§āϰā§āĻĄāĻŋāϝāĻŧā§āύā§āĻā§āϰ āĻāύā§āϝ float32 āϏāĻš āĻŽāĻŋāĻļā§āϰ āύāĻŋāϰā§āĻā§āϞ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻāĻŋāĨ¤
$ 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 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻŋāϤāϰāĻŖāĻā§āϤ āĻŽāĻĄā§āϞ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŽāĻžāĻĒāϝā§āĻā§āϝ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĻāĻŋāĻā§ āύāĻāϰ āĻĻāĻŋāϝāĻŧā§āĻāĻŋāĨ¤ āĻāĻŽāϰāĻž āĻāĻŽā§āĻāύā§āĻ āĻĄā§āĻāĻžāϏā§āĻā§āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϤā§āϞāύāĻžāϝāĻŧ āϏā§āĻā§āϞāĻŋāĻ āĻĻāĻā§āώāϤāĻž āĻāĻŦāĻ āĻāϰāĻ-āĻāĻžāϰā§āϝāĻāĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰā§āĻāĻŋ āϝāĻžāϰ āĻāĻĒāϰ ResNet50-v1 āĻŽāĻĄā§āϞ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŋāϤ āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤ āĻāĻŽāϰāĻž āĻāĻŽāύ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋāĻ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰā§āĻāĻŋ āϝāĻž āĻāĻĒāύāĻŋ Horovod āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŽāĻžāϞā§āĻāĻŋ-āĻāύāϏā§āĻā§āϝāĻžāύā§āϏ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāĻŦā§āĻŽāĻžāϤā§āϰ MXNet āĻāĻŦāĻ āĻāĻā§āϰ āĻļāĻŋāĻā§āώāĻž āύāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻāύāϏā§āĻāϞā§āĻļāύ āĻĒā§āώā§āĻ āĻžāϝāĻŧ āϝāĻžāύ āĻĒā§āϰāĻĨāĻŽā§ MXNet āϤā§āϰāĻŋ āĻāϰāϤā§āĨ¤ āĻāĻŽāϰāĻž āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āύāĻŋāĻŦāύā§āϧ āĻĒāĻĄāĻŧāĻžāϰ āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻļā§āϰ⧠āĻāϰāϤā§.
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ MXNet āĻāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰ⧠āĻĨāĻžāĻā§āύ āĻāĻŦāĻ Horovod-āĻāϰ āϏāĻžāĻĨā§ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϞāĻžāϰā§āύāĻŋāĻ āĻā§āώā§āĻāĻž āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻžāĻšāϞ⧠āĻĻā§āĻā§āύ , MXNet āĻĨā§āĻā§ āĻāĻāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻŋ āĻ āύā§āϏāϰāĻŖ āĻāϰā§āύ āĻŦāĻž .
* āĻāϰāĻā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻāĻŖāύāĻž āĻāϰāĻž āĻšāϝāĻŧ EC2 āĻĻā§āώā§āĻāĻžāύā§āϤā§āϰ āĻāύā§āϝ AWS
āĻā§āϰā§āϏ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύā§āύ
āĻāϤā§āϏ: www.habr.com
