Apache MXNet рдЖрдгрд┐ Horovod рд╕рд╣ рд╡рд┐рддрд░рд┐рдд рд╢рд┐рдХреНрд╖рдг

рд▓реЗрдЦрд╛рдЪрд╛ рдЕрдиреБрд╡рд╛рдж рдЕрднреНрдпрд╛рд╕рдХреНрд░рдо рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрджрд▓реНрдпрд╛ рджрд┐рд╡рд╢реА рддрдпрд╛рд░ рдХреЗрд▓рд╛ рд╣реЛрддрд╛ "рдмрд┐рдЧ рдбреЗрдЯрд╛рд╡рд░ рдФрджреНрдпреЛрдЧрд┐рдХ рдПрдордПрд▓"

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

рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдкрдг рдУрдкрди рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдпрдмреНрд░рд░реА Apache MXNet рдЖрдгрд┐ Horovod рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреБрдЯреЗрдб рд▓рд░реНрдирд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рдкрд░реВрди рд╢рд┐рдХреНрд╖рдг рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЬрд▓рдж рдЖрдгрд┐ рд╕реЛрдкреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рдмрджреНрджрд▓ рдмреЛрд▓реВ. рдЖрдореНрд╣реА Horovod рдлреНрд░реЗрдорд╡рд░реНрдХрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдлрд╛рдпрджреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВ рдЖрдгрд┐ MXNet рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╢реА рд▓рд┐рд╣рд╛рдпрдЪреА рддреЗ рджрд╛рдЦрд╡реВ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ Horovod рд╕рд╣ рд╡рд┐рддрд░рд┐рдд рдкрджреНрдзрддреАрдиреЗ рдХрд╛рд░реНрдп рдХрд░реЗрд▓.

Apache MXNet рдореНрд╣рдгрдЬреЗ рдХрд╛рдп

рдЕрдкрд╛рдЪреЗ рдПрдордПрдХреНрд╕рдиреЗрдЯ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдбреАрдк рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. MXNet рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЬрдЯрд┐рд▓рддрд╛ рд╕реЛрдбрд╡рддреЗ, рдЕрддреНрдпрдВрдд рдХрд╛рд░реНрдпрдХреНрд╖рдо рдЖрдгрд┐ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЖрд╣реЗ рдЖрдгрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдВрд╕рд╛рдареА API рдСрдлрд░ рдХрд░рддреЗ рдЬрд╕реЗ рдХреА python рд▓рд╛, C ++, рдХреНрд▓реЛрдЬрд░, рдЬрд╛рд╡рд╛, рдЬреБрд▓рд┐рдпрд╛, R, Scala рдЖрдгрд┐ рдЗрддрд░.

рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ MXNet рдордзреНрдпреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓реЗ

MXNet рдордзреНрдпреЗ рдорд╛рдирдХ рд╡рд┐рддрд░рд┐рдд рд╢рд┐рдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░ рджреГрд╖реНрдЯреАрдХреЛрди рд╡рд╛рдкрд░рддреЗ. рд╣реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдордЧрд╛рд░рд╛рдХрдбреВрди рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдЧреЛрд│рд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдПрдХрддреНрд░реАрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкреБрдвреАрд▓ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдкреБрдирд░рд╛рд╡реГрддреНрддреАрд╕рд╛рдареА рдЕрджреНрдпрддрдирд┐рдд рдЧреНрд░реЗрдбрд┐рдпрдВрдЯреНрд╕ рдкрд░рдд рдХрд╛рдордЧрд╛рд░рд╛рдВрдирд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рд╕рдВрдЪ рд╡рд╛рдкрд░рддреЗ. рдХрд╛рдордЧрд╛рд░ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рдЪреЗ рдпреЛрдЧреНрдп рдЧреБрдгреЛрддреНрддрд░ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рд╣реА рдкреНрд░рднрд╛рд╡реА рд╕реНрдХреЗрд▓рд┐рдВрдЧрдЪреА рдЧреБрд░реБрдХрд┐рд▓реНрд▓реА рдЖрд╣реЗ. рдлрдХреНрдд рдПрдХрдЪ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЛ рдЧрдгрдиреЗрдордзреНрдпреЗ рдЕрдбрдерд│рд╛ рдард░реВ рд╢рдХрддреЛ. рдпрд╛рдЙрд▓рдЯ, рдЦреВрдк рдЬрд╛рд╕реНрдд рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╕, рдЕрдиреЗрдХ-рддреЗ-рдЕрдиреЗрдХ рд╕рдВрдкреНрд░реЗрд╖рдгреЗ рд╕рд░реНрд╡ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реВ рд╢рдХрддрд╛рдд.

Horovod рдХрд╛рдп рдЖрд╣реЗ

Horovod рдЙрдмреЗрд░ рдпреЗрдереЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реА рдЦреБрд▓реА рд╡рд┐рддрд░рд┐рдд рдЦреЛрд▓ рд╢рд┐рдХреНрд╖рдг рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрд╣реЗ. рд╣реЗ рд╡реНрд╣реЛрд░реЗрдХреНрд╕рдордзреНрдпреЗ рдореЙрдбреЗрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреЗ рд╡рд┐рддрд░рдг рдЖрдгрд┐ рдПрдХрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА NVIDIA рдХрд▓реЗрдХреНрдЯрд┐рд╡реНрд╣ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рдиреНрд╕ рд▓рд╛рдпрдмреНрд░рд░реА (NCCL) рдЖрдгрд┐ рдореЗрд╕реЗрдЬ рдкрд╛рд╕рд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ (MPI) рд╕рд╛рд░рдЦреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдХреНрд░реЙрд╕-GPU рдЖрдгрд┐ рдХреНрд░реЙрд╕-рдиреЛрдб рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪрд╛ рд▓рд╛рдн рдШреЗрддреЗ. рд╣реЗ рдиреЗрдЯрд╡рд░реНрдХ рдмрдБрдбрд╡рд┐рдбреНрдердЪрд╛ рд╡рд╛рдкрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рддреЗ рдЖрдгрд┐ рдбреАрдк рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбреЗрд▓реНрд╕рд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдЪрд╛рдВрдЧрд▓реЗ рд╕реНрдХреЗрд▓ рдХрд░рддреЗ. рд╣реЗ рд╕рдзреНрдпрд╛ рдЕрдиреЗрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХрдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ, рдореНрд╣рдгрдЬреЗ рдПрдордПрдХреНрд╕ рдиреЗрдЯ, Tensorflow, Keras, рдЖрдгрд┐ PyTorch.

MXNet рдЖрдгрд┐ Horovod рдПрдХрддреНрд░реАрдХрд░рдг

MXNet Horovod рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ Distributed Learning 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 рдпреЗрдереВрди рдЖрдгрд┐ рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдореЕрдХрдмреБрдХ рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛:

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

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

Apache MXNet рдЖрдгрд┐ Horovod рд╕рд╣ рд╡рд┐рддрд░рд┐рдд рд╢рд┐рдХреНрд╖рдг
рдЖрдХреГрддреА 1. Horovod рдЖрдгрд┐ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ MXNet рд╡рд╛рдкрд░реВрди рд╡рд┐рддрд░рд┐рдд рд╢рд┐рдХреНрд╖рдгрд╛рдЪреА рддреБрд▓рдирд╛

рдЦрд╛рд▓реАрд▓ рддрдХреНрддреНрдпрд╛ 1 рдордзреНрдпреЗ, рдЖрдореНрд╣реА 64 GPU рд╡рд░ рдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рдкреНрд░рддрд┐ рдЙрджрд╛рд╣рд░рдг рдЕрдВрддрд┐рдо рдЦрд░реНрдЪрд╛рдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЛ. Horovod рд╕рд╣ MXNet рд╡рд╛рдкрд░рдгреЗ рд╕рд░реНрд╡рд╛рдд рдХрдореА рдХрд┐рдорддреАрдд рд╕рд░реНрд╡реЛрддреНрддрдо рдереНрд░реВрдкреБрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

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

рдкреБрдирд░реБрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдкрд╛рдпрд▒реНрдпрд╛

рдкреБрдвреАрд▓ рдЪрд░рдгрд╛рдВрдордзреНрдпреЗ, рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ MXNet рдЖрдгрд┐ Horovod рд╡рд╛рдкрд░реВрди рд╡рд┐рддрд░рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╕реЗ рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдХрд░рд╛рдпрдЪреЗ рддреЗ рджрд░реНрд╢рд╡реВ. MXNet рд╕рд╣ рд╡рд┐рддрд░рд┐рдд рд╢рд┐рдХреНрд╖рдгрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдЪрд╛ рд╣реЗ рдкреЛрд╕реНрдЯ.

1 рдкрд╛рдКрд▓

рд╡рд┐рддрд░рд┐рдд рд╢рд┐рдХреНрд╖рдг рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА MXNet рдЖрд╡реГрддреНрддреА 1.4.0 рдХрд┐рдВрд╡рд╛ рдЙрдЪреНрдЪ рдЖрдгрд┐ Horovod рдЖрд╡реГрддреНрддреА 0.16.0 рдХрд┐рдВрд╡рд╛ рдЙрдЪреНрдЪ рд╕рд╣ рдПрдХрд╕рдВрдз рдЙрджрд╛рд╣рд░рдгрд╛рдВрдЪрд╛ рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рд╛. рддреБрдореНрд╣рд╛рд▓рд╛ GPU рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд▓рд╛рдпрдмреНрд░рд░реА рджреЗрдЦреАрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓. рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╛рдареА, рдЖрдореНрд╣реА GPU рдбреНрд░рд╛рдпрд╡реНрд╣рд░ 16.04, CUDA 396.44, cuDNN 9.2 рд▓рд╛рдпрдмреНрд░рд░реА, NCCL 7.2.1 рдХрдореНрдпреБрдирд┐рдХреЗрдЯрд░ рдЖрдгрд┐ OpenMPI 2.2.13 рд╕рд╣ рдЙрдмрдВрдЯреВ 3.1.1 рд▓рд┐рдирдХреНрд╕ рдирд┐рд╡рдбрд▓реЗ. рддрд╕реЗрдЪ рддреБрдореНрд╣реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ Amazon Deep Learning AMI, рдЬрд┐рдереЗ рд╣реА рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдзреАрдкрд╛рд╕реВрди рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ.

2 рдкрд╛рдКрд▓

рддреБрдордЪреНрдпрд╛ MXNet рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ Horovod API рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╛. MXNet Gluon API рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЦрд╛рд▓реАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕рд╛рдзреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╕рд▓реНрдпрд╛рд╕ рдард│рдХ рдУрд│реА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд. Horovod рд╕рд╣ рд╢рд┐рдХрдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдпреЗрдереЗ рдХрд╛рд╣реА рдЧрдВрднреАрд░ рдмрджрд▓ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓:

  • рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреЛрдЧреНрдп рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛрд░рд╡рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдерд╛рдирд┐рдХ рд╣реЛрд░реЛрд╡реЛрдб рд░рдБрдХ (рдУрд│ 8) рдиреБрд╕рд╛рд░ рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░рд╛.
  • рд╕рд░реНрд╡ рдХрд╛рдордЧрд╛рд░ рд╕рдорд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛рдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛ рдХрд╛рдордЧрд╛рд░рд╛рдХрдбреВрди рд╕рд░реНрд╡ (рд▓рд╛рдЗрди 18) рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд░рд╛.
  • рдПрдХ Horovod рддрдпрд╛рд░ рдХрд░рд╛ DistributedOptimizer (рдУрд│ 25) рд╡рд┐рддрд░рд┐рдд рдкрджреНрдзрддреАрдиреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.

рд╕рдВрдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдХреГрдкрдпрд╛ Horovod-MXNet рдЙрджрд╛рд╣рд░рдгреЗ рдкрд╣рд╛ MNIST ╨╕ рдЗрдореЗрдЬрдиреЗрдЯ.

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 рд╕рд╣ рдЪрд╛рд░ рдШрдЯрдирд╛рдВрд╡рд░ рдЪрд╛рд▓рддреЗ. рд╕реНрдЯреЛрдХрд╛рд╕реНрдЯрд┐рдХ рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдбрд┐рд╕реЗрдВрдЯ (SGD) рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░ рдЦрд╛рд▓реАрд▓ рд╣рд╛рдпрдкрд░рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓:

  • рдорд┐рдиреА-рдмреЕрдЪ рдЖрдХрд╛рд░: 256
  • рд╢рд┐рдХрдгреНрдпрд╛рдЪрд╛ рджрд░: 0.1
  • рдЧрддреА: реж.реп
  • рд╡рдЬрди рдХреНрд╖рдп: 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 GPU рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд рдлреНрд▓реЛрдЯ64 рдЧрдгрдирд╛рдВрдирд╛ рдЧрддреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдлреЙрд░рд╡рд░реНрдб рдкрд╛рд╕рд╕рд╛рдареА 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 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЖрдореНрд╣реА рд▓реЗрдЦ рд╡рд╛рдЪрдгреНрдпрд╛рдЪреА рдЬреЛрд░рджрд╛рд░ рд╢рд┐рдлрд╛рд░рд╕ рджреЗрдЦреАрд▓ рдХрд░рддреЛ 60 рдорд┐рдирд┐рдЯрд╛рдВрдд MXNetрд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.

рдЬрд░ рддреБрдореНрд╣реА рдЖрдзреАрдЪ MXNet рд╡рд░ рдХрд╛рдо рдХреЗрд▓реЗ рдЕрд╕реЗрд▓ рдЖрдгрд┐ Horovod рд╕рд╣ рд╡рд┐рддрд░реАрдд рд╢рд┐рдХреНрд╖рдг рд╡рд╛рдкрд░реВрди рдкрд╣рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рдкрд╣рд╛ Horovod рдкреНрд░рддрд┐рд╖реНрдард╛рдкрди рдкреГрд╖реНрда, MXNet рд╡рд░реВрди рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛ MNIST рдХрд┐рдВрд╡рд╛ рдЗрдореЗрдЬрдиреЗрдЯ.

*рдЦрд░реНрдЪрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЧрдгрдирд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ рддрд╛рд╕рд╛рдЪреЗ рджрд░ EC2 рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╛рдареА AWS

рдХреЛрд░реНрд╕рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛ "рдмрд┐рдЧ рдбреЗрдЯрд╛рд╡рд░ рдФрджреНрдпреЛрдЧрд┐рдХ рдПрдордПрд▓"

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛