Apache MXNet рд░ Horovod рд╕рдВрдЧ рд╢рд┐рдХреНрд╖рд╛ рд╡рд┐рддрд░рд┐рдд

рд▓реЗрдЦрдХреЛ рдЕрдиреБрд╡рд╛рдж рдкрд╛рдареНрдпрдХреНрд░рдордХреЛ рд╕реБрд░реБрд╡рд╛рддрдХреЛ рдкреВрд░реНрд╡рд╕рдиреНрдзреНрдпрд╛рдорд╛ рддрдпрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ "рдмрд┐рдЧ рдбрд╛рдЯрд╛рдорд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рдПрдордПрд▓"

рдзреЗрд░реИ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд▓реЗ рдЖрдзреБрдирд┐рдХ рдЧрд╣рд┐рд░реЛ рддрдВрддреНрд░рд┐рдХрд╛ рд╕рдЮреНрдЬрд╛рд▓рд╣рд░реВрдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдордпрд▓рд╛рдИ рд╣рдкреНрддрд╛рджреЗрдЦрд┐ рдШрдгреНрдЯрд╛ рд╡рд╛ рдорд┐рдиреЗрдЯрдорд╛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рдбреЗрдЯрд╛рдорд╛ рдШрдЯрд╛рдЙрди рд╕рдХреНрдЫ, рдпрд╕ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рд╡рд┐рдзрд┐рд▓рд╛рдИ рдЧрд╣рд┐рд░реЛ рд╢рд┐рдХреНрд╖рд╛рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдкреНрд░рдЪрд▓рд┐рдд рдмрдирд╛рдЙрдБрдЫред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдбреЗрдЯрд╛ рдХрд╕рд░реА рд╕рд╛рдЭреЗрджрд╛рд░реА рд░ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдмреБрдЭреНрдиреБрдкрд░реНрдЫ, рдЬрд╕рд▓реЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рджрдХреНрд╖рддрд╛рдорд╛ рдареВрд▓реЛ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫред рдердк рд░реВрдкрдорд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╕рд░реА рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдкрдирд┐ рдЬрд╛рдиреНрдиреБрдкрд░реНрдЫ рдЬреБрди рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдЪрд▓реНрдЫред

рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рдЦреБрд▓рд╛ рдЧрд╣рд┐рд░реЛ рд╕рд┐рдХрд╛рдЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп Apache MXNet рд░ Horovod рд╡рд┐рддрд░рд┐рдд рд╕рд┐рдХрд╛рдЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╕рд┐рдХрд╛рдЗ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рджреНрд░реБрдд рд░ рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА Horovod рдлреНрд░реЗрдорд╡рд░реНрдХрдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд▓рд╛рднрд╣рд░реВ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рджреЗрдЦрд╛рдЙрдиреЗрдЫреМрдВ рд░ MXNet рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓рд┐рдкрд┐ рдХрд╕рд░реА рд▓реЗрдЦреНрдиреЗ рднрдиреЗрд░ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗрдЫреМрдВ рддрд╛рдХрд┐ рдпрд╕рд▓реЗ Horovod рд╕рдБрдЧ рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рддрд░рд┐рдХрд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫред

Apache MXNet рдХреЗ рд╣реЛ

рдЕрдкрд╛рдЪреЗ MXNet рдПрдЙрдЯрд╛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдЧрд╣рд┐рд░реЛ рд╢рд┐рдХреНрд╖рд╛ рдврд╛рдБрдЪрд╛ рд╣реЛ рдЬреБрди рдЧрд╣рд┐рд░реЛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рддрд╛рд▓рд┐рдо рджрд┐рди рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред MXNet рд▓реЗ рддрдВрддреНрд░рд┐рдХрд╛ рд╕рдЮреНрдЬрд╛рд▓рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдореНрдмрдиреНрдзрд┐рдд рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рд╛рд░ рджрд┐рдиреНрдЫ, рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЫ, рд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВ рдЬрд╕реНрддреИ API рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдЕрдЬрдЧрд░, рд╕реА ++, Clojure, Java, рдЬреБрд▓рд┐рдпрд╛, R, Scala рд░ рдЕрдиреНрдпред

рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░рдХреЛ рд╕рд╛рде MXNet рдорд╛ рд╡рд┐рддрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг

MXNet рдорд╛ рдорд╛рдирдХ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рдХрд╛рдЗ рдореЛрдбреНрдпреБрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдпрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдмрд╛рдЯ рдврд╛рдБрдЪрд╛рд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди, рдПрдХреАрдХрд░рдг рдЧрд░реНрди, рд░ рдЕрд░реНрдХреЛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рдорджрд╛рд░рд╣рд░реВрд▓рд╛рдИ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдврд╛рдБрдЪрд╛рд╣рд░реВ рдкрдард╛рдЙрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд╕реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдХрд╛рдорджрд╛рд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд╕рд╣реА рдЕрдиреБрдкрд╛рдд рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд╕реНрдХреЗрд▓рд┐рдВрдЧрдХреЛ рдХреБрдЮреНрдЬреА рд╣реЛред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ рдЫ рднрдиреЗ, рдпреЛ рдЧрдгрдирд╛ рдорд╛ рдПрдХ рдмрд╛рдзрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдзреЗрд░реИ рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рднрдиреЗ, рдзреЗрд░реИ-рджреЗрдЦрд┐-рдзреЗрд░реИ рд╕рдЮреНрдЪрд╛рд░рд▓реЗ рд╕рдмреИ рдиреЗрдЯрд╡рд░реНрдХ рдЬрдбрд╛рдирд╣рд░реВ рдмрдиреНрдж рдЧрд░реНрди рд╕рдХреНрдЫред

Horovod рдХреЗ рд╣реЛ

Horovod Uber рдорд╛ рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЦреБрд▓рд╛ рд╡рд┐рддрд░рд┐рдд рдЧрд╣рд┐рд░реЛ рд╢рд┐рдХреНрд╖рд╛ рдврд╛рдБрдЪрд╛ рд╣реЛред рдпрд╕рд▓реЗ рдХреБрд╢рд▓ рдХреНрд░рд╕-GPU рд░ рдХреНрд░рд╕-рдиреЛрдб рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреАрд╣рд░реВ рдЬрд╕реНрддреИ NVIDIA рдХрд▓реЗрдХреНрдЯрд┐рдн рдХрдореНрдпреБрдирд┐рдХреЗрд╕рдиреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (NCCL) рд░ рдореЗрд╕реЗрдЬ рдкрд╛рд╕рд┐рдЩ рдЗрдиреНрдЯрд░рдлреЗрд╕ (MPI) рдХреЛ рднреЗрд░реЗрдХреНрд╕рд╣рд░реВрдорд╛ рдореЛрдбреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╡рд┐рддрд░рдг рд░ рдПрдХреАрдХреГрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд▓рд╛рдн рдЙрдард╛рдЙрдБрдЫред рдпрд╕рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрдпрд╛рдиреНрдбрд╡рд┐рдердХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдЫ рд░ рдЧрд╣рд┐рд░реЛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдореЛрдбреЗрд▓рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдорд╛рдкрди рдЧрд░реНрджрдЫред рдпрд╕рд▓реЗ рд╣рд╛рд▓ рдзреЗрд░реИ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЗрд╕рд┐рди рд▓рд░реНрдирд┐рдЩ рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ, рдЕрд░реНрдерд╛рддреН MX рдиреЗрдЯ, 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 рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫред рдпреА рд╕рдмреИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЕрдиреНрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдкрд╛рд░рджрд░реНрд╢реА рдЫрдиреНред

рджреНрд░реБрдд рд╕реБрд░реБрд╡рд╛рдд

рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ MacBook рдорд╛ 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 pip install horovod

рддреНрдпрд╕рдкрдЫрд┐ OpenMPI рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдпрд╣рд╛рдБ рджреЗрдЦрд┐.

рдЕрдиреНрддреНрдпрдорд╛, рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдкрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН mxnet_mnist.py рдпрд╣рд╛рдБ рджреЗрдЦрд┐ рд░ рдХрд╛рдо рдЧрд░реНрдиреЗ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ MacBook рдЯрд░реНрдорд┐рдирд▓рдорд╛ рдирд┐рдореНрди рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

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 GPU рд╣рд░реВрдорд╛ рдЖрда рджреГрд╖реНрдЯрд╛рдиреНрддрд╣рд░реВ рднрдПрдХреЛ ImageNet рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ ResNet1-v64 рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдВрджрд╛ p3.16x рдареВрд▓реЛ EC2, рдкреНрд░рддреНрдпреЗрдХрд▓реЗ AWS рдХреНрд▓рд╛рдЙрдбрдорд╛ 8 NVIDIA Tesla V100 GPU рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рд╣рд╛рдореАрд▓реЗ 45000 рдЫрд╡рд┐рд╣рд░реВ/рд╕реЗрдХреЗрдиреНрдб (рдЕрд░реНрдерд╛рдд, рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирдореВрдирд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдереНрд░реБрдкреБрдЯ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНтАНрдпреМрдВред 44% рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рд╢реБрджреНрдзрддрд╛рдХреЛ рд╕рд╛рде 90 рдпреБрдЧрд╣рд░реВ рдкрдЫрд┐ 75.7 рдорд┐рдиреЗрдЯрдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рднрдпреЛред

рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ MXNet рдХреЛ 8, 16, 32 рд░ 64 GPU рдорд╛ рдПрдХрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ рд░ 1 рджреЗрдЦрд┐ 1 рд░ 2 рджреЗрдЦрд┐ 1 рдХреЛ рд╕рд░реНрднрд░ рд░ 1 рджреЗрдЦрд┐ 38 рдХреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрдкрд╛рддрдХреЛ рд╕рд╛рде рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдпреМрдВред рддрдкрд╛рдИрдВрд▓реЗ рддрд▓рдХреЛ рдЪрд┐рддреНрд░ рез рдорд╛ рдирддрд┐рдЬрд╛ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдмрд╛рдБрдпрд╛рдорд╛ y-рдЕрдХреНрд╖рдорд╛, рдмрд╛рд░рд╣рд░реВрд▓реЗ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЫрд╡рд┐рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫ, рд░реЗрдЦрд╛рд╣рд░реВрд▓реЗ рджрд╛рдпрд╛рдБ y-рдЕрдХреНрд╖рдорд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рджрдХреНрд╖рддрд╛ (рдЕрд░реНрдерд╛рдд, рдЖрджрд░реНрд╢ рдереНрд░реБрдкреБрдЯрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкрд╛рдд) рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрджрдЫред рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдЫрдиреМрдЯрд▓реЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рджрдХреНрд╖рддрд╛рд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ рдЫ рднрдиреЗ, рд╕реНрдХреЗрд▓рд┐рдВрдЧ рджрдХреНрд╖рддрд╛ 64 GPU рдорд╛ XNUMX% рдорд╛ рдЭрд░реНрдЫред Horovod рдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рджрдХреНрд╖рддрд╛ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдХрд╛рдорджрд╛рд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдХреЛ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЛрдмреНрдмрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

Apache MXNet рд░ Horovod рд╕рдВрдЧ рд╢рд┐рдХреНрд╖рд╛ рд╡рд┐рддрд░рд┐рдд
рдЪрд┐рддреНрд░ 1. Horovod рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ рд╕рдВрдЧ MXNet рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╡рд┐рддрд░рд┐рдд рд╕рд┐рдХрд╛рдЗрдХреЛ рддреБрд▓рдирд╛

рддрд▓рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рез рдорд╛, ремрек GPU рдорд╛ рдкреНрд░рдпреЛрдЧрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрджрд╛ рд╣рд╛рдореА рдкреНрд░рддрд┐ рдЙрджрд╛рд╣рд░рдг рдЕрдиреНрддрд┐рдо рд▓рд╛рдЧрдд рддреБрд▓рдирд╛ рдЧрд░реНрдЫреМрдВред Horovod рдХреЛ рд╕рд╛рде MXNet рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рдХрдо рд▓рд╛рдЧрддрдорд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдереНрд░реБрдкреБрдЯ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

Apache MXNet рд░ Horovod рд╕рдВрдЧ рд╢рд┐рдХреНрд╖рд╛ рд╡рд┐рддрд░рд┐рдд
рддрд╛рд▓рд┐рдХрд╛ 1. Horovod рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ 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 рддрд╛рд▓рд┐рдо рд▓рд┐рдкрд┐рдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдердкреНрдиреБрд╣реЛрд╕реНред 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 GPU рд╣рд░реВ рд░ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдХреБрд▓ 16 GPU рд╣рд░реВ рд╕рд╣рд┐рдд рдЪрд╛рд░рд╡рдЯрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд▓реНрдЫред Stochastic Gradient Descent (SGD) рдЕрдиреБрдХреВрд▓рдХ рдирд┐рдореНрди рд╣рд╛рдЗрдкрд░рдкреЗрд░рд╛рдорд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ:

  • рдорд┐рдиреА рдмреНрдпрд╛рдЪ рдЖрдХрд╛рд░: 256
  • рд╕рд┐рдХрд╛рдЗ рджрд░: реж.рез
  • рдЧрддрд┐: реж.реп
  • рд╡рдЬрди рдХреНрд╖рдп: 0.0001

рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ GPU рдмрд╛рдЯ 64 GPU рдорд╛ рдорд╛рдкрди рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ рддрд╛рд▓рд┐рдо рджрд░рд▓рд╛рдИ GPU рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрд╕рд╛рд░ (0,1 рдмрд╛рдЯ 1 GPU рдХреЛ рд▓рд╛рдЧрд┐ 6,4 рдмрд╛рдЯ 64 GPU рд╣рд░реВ) рдЕрдиреБрд╕рд╛рд░ рддрд╛рд▓рд┐рдо рджрд░ рдорд╛рдкрди рдЧрд░реНрдпреМрдВ, рдЬрдмрдХрд┐ рдкреНрд░рддрд┐ 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 рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ ImageNet рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд░реНрднрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдорд╛рдкрди рджрдХреНрд╖рддрд╛ рд░ рд▓рд╛рдЧрдд-рдкреНрд░рднрд╛рд╡рдХрд╛рд░рд┐рддрд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдпреМрдВред рд╣рд╛рдореАрд▓реЗ Horovod рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрд╣реБ-рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╡рд╕реНрдерд┐рдд рд▓рд┐рдкрд┐ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреЗ рдЪрд░рдгрд╣рд░реВ рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реЗрдХрд╛ рдЫреМрдВред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рднрд░реНрдЦрд░реИ MXNet рд░ рдЧрд╣рд┐рд░реЛ рд╢рд┐рдХреНрд╖рд╛рдХреЛ рд╕рд╛рде рд╕реБрд░реБ рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рд╕реНрдерд╛рдкрдирд╛ рдкреГрд╖реНрдардорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН MXNeрдкрд╣рд┐рд▓реЗ MXNet рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиред рд╣рд╛рдореА рджреГрдврддрд╛рдкреВрд░реНрд╡рдХ рд▓реЗрдЦ рдкрдвреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреМрдВ MXNet ремреж рдорд┐рдиреЗрдЯрдорд╛рд╕реБрд░реБ рдЧрд░реНрдиред

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ MXNet рдорд╛ рдХрд╛рдо рдЧрд░рд┐рд╕рдХреНрдиреБрднрдПрдХреЛ рдЫ рд░ Horovod рдорд╛рд░реНрдлрдд рд╡рд┐рддрд░рд┐рдд рд╕рд┐рдХрд╛рдЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН Horovod рд╕реНрдерд╛рдкрдирд╛ рдкреГрд╖реНрда, рдпрд╕рд▓рд╛рдИ MXNet рдмрд╛рдЯ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН рд░ рдЙрджрд╛рд╣рд░рдг рдкрдЫреНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН MNIST рд╡рд╛ IMAGEnet.

* рд▓рд╛рдЧрддрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдЧрдгрдирд╛ рдЧрд░рд┐рдиреНрдЫ рдкреНрд░рддрд┐ рдШрдгреНрдЯрд╛ рджрд░рд╣рд░реВ EC2 рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ AWS

рдкрд╛рдареНрдпрдХреНрд░рдо рдмрд╛рд░реЗ рдердк рдЬрд╛рдиреНрдиреБрд╣реЛрд╕реН "рдмрд┐рдЧ рдбрд╛рдЯрд╛рдорд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рдПрдордПрд▓"

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди