рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдирдорд╕реНрддреЗ! рдореИрдВ рд╕реАрдЖрд░рдУрд╕реА рдореЗрдВ рд╕реАрд╡реА рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рд╣рдо рдкрд┐рдЫрд▓реЗ рддреАрди рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╕реАрд╡реА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рджреМрд░рд╛рди рд╣рдордиреЗ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдХреАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╣рдордиреЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдкрд░ рдирдЬрд░ рд░рдЦреА рддрд╛рдХрд┐ рд╡реЗ рдЧрд╛рдбрд╝реА рдЪрд▓рд╛рддреЗ рд╕рдордп рд╢рд░рд╛рдм рди рдкреАрдПрдВ, рдзреВрдореНрд░рдкрд╛рди рди рдХрд░реЗрдВ, рдлреЛрди рдкрд░ рдмрд╛рдд рди рдХрд░реЗрдВ, рд╕рдбрд╝рдХ рдХреА рдУрд░ рди рджреЗрдЦреЗрдВ, рд╕рдкрдиреЛрдВ рдпрд╛ рдмрд╛рджрд▓реЛрдВ рдХреА рдУрд░ рди рджреЗрдЦреЗрдВред ; рд╣рдордиреЗ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЬреЛ рд╕рдорд░реНрдкрд┐рдд рд▓реЗрди рдореЗрдВ рдЧрд╛рдбрд╝реА рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рдкрд╛рд░реНрдХрд┐рдВрдЧ рд╕реНрдерд╛рди рдШреЗрд░рддреЗ рд╣реИрдВ; рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рд╢реНрд░рдорд┐рдХреЛрдВ рдиреЗ рд╣реЗрд▓рдореЗрдЯ, рджрд╕реНрддрд╛рдиреЗ рдЖрджрд┐ рдкрд╣рдиреЗ рд╣реЛрдВ; рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЧрдИ рдЬреЛ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ; рд╣рдордиреЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЧрд┐рдирд╛ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗред

рдореИрдВ рдпрд╣ рд╕рдм рдХрд┐рд╕ рд▓рд┐рдпреЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдиреЗрдХ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдХреБрдЫ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рдЖрдк рдпрд╛ рддреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗред

рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ

рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдпреБрд╡рд╛ рдХрдВрдкрдиреА "рдПрди" рдореЗрдВ рдиреМрдХрд░реА рдорд┐рд▓реА, рдЬрд┐рд╕рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдордПрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рд╣рдо рдПрдХ рдПрдордПрд▓ (рдбреАрдПрд▓, рд╕реАрд╡реА) рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдо рджреВрд╕рд░реА рдиреМрдХрд░реА рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдо рддреМрд░ рдкрд░ рдмреНрд░реЗрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдиреЗ рдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдиреНрдпреВрд░реЙрди рдкрд░ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВред

  1. рд╕рдЪреНрдЪрд╛рдИ рдХрд╛ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдк рдХрд╣рд╛рдБ рд░реБрдХреЗ рдереЗ, рдЖрдкрдиреЗ рдХреМрди рд╕реЗ рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдЬрд╝рдорд╛рдП рдереЗ рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдереЗред рд╕рднреА рд▓реЙрдиреНрдЪреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕рдиреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рд╣реЗрдб, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдиреЛрдЯрдкреИрдб рдореЗрдВ, рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВред рдореБрдЭреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓рд╛ рдЬрдм рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд▓реНрдкрдирд╛ рдХреА рдЙрдбрд╝рд╛рдиред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд▓реМрдЯреЗ рд╣реИрдВ, рдЬрд┐рд╕рдиреЗ рдХрдВрдкрдиреА рдЫреЛрдбрд╝ рджреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ model_1.pb рдирд╛рдордХ рдПрдХ рдХреЛрдб рдФрд░ рдореЙрдбрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЪрд┐рддреНрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рд╕рд╛рд░рд╛ рджрд░реНрдж рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рднреА рдПрдХ рд╢реБрд░реБрдЖрддреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВред
  2. рдЖрдЧреЗ рдмрдврд╝реЛред рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдгрд╡рд╢ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕реЗ рд╣рдорд╛рд░реА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ред рдпрд╣ рдПрдХ рдЧреИрд░-рдорд╛рдореВрд▓реА рдХрд╛рд░реНрдп рднреА рдмрди рд╕рдХрддрд╛ рд╣реИ. рдЖрдк рдЗрд╕ рдХрджрдо рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рд╣реИ рдирд╛?
  3. рд╣рдо рдПрдХ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рд░ рдбрд┐рдЯреЗрдХреНрдЯрд░)ред рд╣рдо рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдЪрд▓рд┐рдП рдЗрд╕реЗ car_detection_v1.pb рдХрд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдПрдХ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрддреЗ рд╣реИрдВ - car_detection_v2.pbред рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╣рдорд╛рд░реЗ рд╕рд╣рдХрд░реНрдореА рдпрд╛ рд╣рдо рд╕реНрд╡рдпрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢реНрд░рдорд╕рд╛рдзреНрдп рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ)ред
  4. рдареАрдХ рд╣реИ рдЕрдм рд╕рдм рдЦрд╝рддреНрдо рд╣реЛ рдЧрдпрд╛! рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбрд▓ рд╣реИ! рдХреНрдпрд╛ рд╣рдо рдЕрдЧрд▓реЗ рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рдЪрд╛рдп рдкреА рд╕рдХрддреЗ рд╣реИрдВ? рдФрд░ рдХреМрди рддреИрдирд╛рдд рдХрд░реЗрдЧрд╛?

рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛

рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╛ рдкреНрд░реЛрдбрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдХрдИ рд▓реЛрдЧреЛрдВ рдХрд╛ рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде, рд▓реЛрдЧ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╕реНрд╡рдпрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЪрдХреНрд░ рд╕реЗ (рдФрд░ рди рдХреЗрд╡рд▓) рдХреБрдЫ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдореЗрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рддрдХ рдШрдЯрд┐рдд рд╣реЛрдВрдЧреАред рдЗрди рд╕рдмрдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА, рднреНрд░рдо, рдШрдмрд░рд╛рд╣рдЯ, рд╕рдВрднрд╡рддрдГ рдЧреНрд░рд╛рд╣рдХ рдЕрд╕рдВрддреЛрд╖ рдФрд░ рдЕрдВрддрддрдГ рдкреИрд╕реЗ рдХреА рд╣рд╛рдирд┐ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо рд╕рднреА рдЖрдо рддреМрд░ рдкрд░ рдЙрд╕реА рдкреБрд░рд╛рдиреЗ рдврд░реНрд░реЗ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрди рдкрд▓реЛрдВ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдирд╣реАрдВ рдЬреАрдирд╛ рдЪрд╛рд╣рддрд╛ред

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд┐рдХрд╛рд╕ рдЪрдХреНрд░ рд╕реЗ рдЧреБрдЬрд╝рд░реЗ рд╣реИрдВ рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:

  • рдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛;
  • рдирдП рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ;
  • рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛;
  • рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ;
  • рдореЙрдбрд▓реЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ;
  • рдПрдХ рдореЙрдбрд▓ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдвреВрдВрдвреЗрдВ;
  • рдореЙрдбрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрд╛рджрди рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВред

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдПрдХ рдРрд╕реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛? рдЗрд╕ рдЕрднреНрдпрд╛рд╕ рдХреЛ рдПрдордПрд▓рдУрдкреАрдПрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдордПрд▓рдУрдкреНрд╕ рдпрд╛ рдбреЗрд╡рдСрдкреНрд╕, рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рдФрд░ рдЖрдИрдЯреА рдЯреАрдореЛрдВ рдХреЛ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛрд╕рддреНрдпрд╛рдкрди рдФрд░ рд╢рд╛рд╕рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рд╡рд┐рдХрд╛рд╕ рдФрд░ рддреИрдирд╛рддреА рдХреА рдЧрддрд┐ рдХреЛ рд╕рд╣рдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЖрджрд░Google рд╡рд╛рд▓реЗ рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рд▓реЗрдЦ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдордПрд▓рдУрдкреАрдПрд╕ рдХрд╛рдлреА рдмрдбрд╝реА рдЪреАрдЬрд╝ рд╣реИред

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдЖрдЧреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдордПрд▓рдлреНрд▓реЛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐... рдпрд╣ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдордПрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрдиреНрдп рдЯреВрд▓, рдЬреИрд╕реЗ рдХрд┐ рдХреНрдпреВрдмрдлреНрд▓реЛ, рд╕реЗрдЬрдореЗрдХрд░, рдЯреНрд░реЗрди рдЗрддреНрдпрд╛рджрд┐ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╡рддрдГ рд╡рд╣ рдЯреВрд▓ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛред

MLFlow рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдмрд┐рд▓реНрдбрд┐рдВрдЧ" MLOps

рдПрдордПрд▓рдлреНрд▓реЛ рдПрдордПрд▓ рдореЙрдбрд▓ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдордВрдЪ рд╣реИ (https://mlflow.org/).

рдПрдордПрд▓рдлрд╝реНрд▓реЛ рдореЗрдВ рдЪрд╛рд░ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдПрдордПрд▓рдлрд╝реНрд▓реЛ рдЯреНрд░реИрдХрд┐рдВрдЧ - рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдХрд╛рд░рдг рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдЖрдпрд╛;
  • рдПрдордПрд▓рдлрд╝реНрд▓реЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ - рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  • рдПрдордПрд▓рдлреНрд▓реЛ рдореЙрдбрд▓ - рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдореЙрдбрд▓ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░;
  • рдПрдордПрд▓рдлрд╝реНрд▓реЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА - рдЖрдкрдХреЛ рдореЙрдбрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рднрдВрдбрд╛рд░ рдореЗрдВ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдПрдордПрд▓рдлрд╝реНрд▓реЛ рджреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рд▓реЙрдиреНрдЪ рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЪрдХреНрд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ;
  • рдПрдХ рдкреНрд░рдпреЛрдЧ рдПрдХ "рд╡рд┐рд╖рдп" рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рднреА рдЪрд░рдг Ubuntu 18.04 рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

1. рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд░реЗрдВ

рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗред рдПрдордПрд▓рдлреНрд▓реЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреЗ рджреЛ рдореБрдЦреНрдп рдШрдЯрдХ рд╣реИрдВ:

  • рдмреИрдХрдПрдВрдб рд╕реНрдЯреЛрд░ - рдкрдВрдЬреАрдХреГрдд рдореЙрдбрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ (4 DBMS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: mysql, mssql, sqlite, рдФрд░ postgresql);
  • рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╕реНрдЯреЛрд░ - рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ (7 рднрдВрдбрд╛рд░рдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рдЕрдореЗрдЬрд╝реЕрди рдПрд╕ 3, рдПрдЬрд╝реНрдпреЛрд░ рдмреНрд▓реЙрдм рд╕реНрдЯреЛрд░реЗрдЬ, Google рдХреНрд▓рд╛рдЙрдб рд╕реНрдЯреЛрд░реЗрдЬ, рдПрдлрд╝рдЯреАрдкреА рд╕рд░реНрд╡рд░, рдПрд╕рдПрдлрдЯреАрдкреА рд╕рд░реНрд╡рд░, рдПрдирдПрдлрдПрд╕, рдПрдЪрдбреАрдПрдлрдПрд╕)ред

рдЬреИрд╕рд╛ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рджреБрдХрд╛рди рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ sftp рд╕рд░реНрд╡рд░ рд▓реЗрдВред

  • рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдПрдВ
    $ sudo groupadd sftpg
  • рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • рдХреБрдЫ рдПрдХреНрд╕реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • /etc/ssh/sshd_config рдореЗрдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • рд╕реЗрд╡рд╛ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
    $ sudo systemctl restart sshd

рдЬреИрд╕рд╛ рдмреИрдХрдПрдВрдб рд╕реНрдЯреЛрд░ рдЖрдЗрдП рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХреНрд▓ рд▓реЗрдВред

$ sudo apt update
$ sudo apt-get install -y postgresql postgresql-contrib postgresql-server-dev-all
$ sudo apt install gcc
$ pip install psycopg2
$ sudo -u postgres -i
# Create new user: mlflow_user
[postgres@user_name~]$ createuser --interactive -P
Enter name of role to add: mlflow_user
Enter password for new role: mlflow
Enter it again: mlflow
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
# Create database mlflow_bd owned by mlflow_user
$ createdb -O mlflow_user mlflow_db

рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ):

pip install mlflow
pip install pysftp

рдЖрдЗрдП рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ

$ mlflow server  
                 --backend-store-uri postgresql://mlflow_user:mlflow@localhost/mlflow_db 
                 --default-artifact-root sftp://mlflowsftp:mlflow@sftp_host/upload  
                --host server_host 
                --port server_port

2. рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ

рд╣рдорд╛рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдирд╖реНрдЯ рди рд╣реЛрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рднрд╛рд╡реА рдкреАрдврд╝рд┐рдпрд╛рдБ рдпрд╣ рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдФрд░ рдЖрдк рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░, рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬрдирд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмрдирд╛рдпрд╛ рдЬреАрдердм рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗрд░рд╕ рдкрд░ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рдЙрд╕реЗ рдЦрдВрдбрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП COCO рдбреЗрдЯрд╛рд╕реЗрдЯ. рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ mlflow_training.py рдмрдирд╛рдИред

рдпрд╣рд╛рдВ рд╡реЗ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдШрдЯрд┐рдд рд╣реЛрддреА рд╣реИрдВ:

def run(self, epochs, lr, experiment_name):
        # getting the id of the experiment, creating an experiment in its absence
        remote_experiment_id = self.remote_server.get_experiment_id(name=experiment_name)
        # creating a "run" and getting its id
        remote_run_id = self.remote_server.get_run_id(remote_experiment_id)

        # indicate that we want to save the results on a remote server
        mlflow.set_tracking_uri(self.tracking_uri)
        mlflow.set_experiment(experiment_name)

        with mlflow.start_run(run_id=remote_run_id, nested=False):
            mlflow.keras.autolog()
            self.train_pipeline.train(lr=lr, epochs=epochs)

        try:
            self.log_tags_and_params(remote_run_id)
        except mlflow.exceptions.RestException as e:
            print(e)

рдпрд╣рд╛рдВ self.remote_server mlflow.tracking рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЖрд╡рд░рдг рд╣реИред MlflowClient (рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ), рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдореИрдВ рдПрдХ рдкреНрд░рдпреЛрдЧ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЙрдиреНрдЪ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХрд╣рд╛рдВ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (mlflow.set_tracking_uri(self.tracking_uri))ред рдореИрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЙрдЧрд┐рдВрдЧ mlflow.keras.autolog() рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдБред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдордПрд▓рдлреНрд▓реЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ, рдХреЗрд░рд╛рд╕, рдЧреНрд▓реВрдСрди рдПрдХреНрд╕рдЬреАрдмреВрд╕реНрдЯ, рд▓рд╛рдЗрдЯрдЬреАрдмреАрдПрдо, рд╕реНрдкрд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдврд╛рдВрдЪрд╛ рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ. рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рдЯреИрдЧ рдФрд░ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред

рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рд╣рд░ рдХрд┐рд╕реА рдХреА рддрд░рд╣, рдЖрдкрдХреЗ рдкрд╛рд╕ рднреА рд╕рднреА рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред рдардВрдбрд╛?

3. рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ

рдЖрдЗрдП рдЕрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ MLproject рдФрд░ conda.yaml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред
рдПрдордПрд▓рдкреНрд░реЛрдЬреЗрдХреНрдЯ

name: flow_segmentation
conda_env: conda.yaml

entry_points:
  main:
    parameters:
        categories: {help: 'list of categories from coco dataset'}
        epochs: {type: int, help: 'number of epochs in training'}

        lr: {type: float, default: 0.001, help: 'learning rate'}
        batch_size: {type: int, default: 8}
        model_name: {type: str, default: 'Unet', help: 'Unet, PSPNet, Linknet, FPN'}
        backbone_name: {type: str, default: 'resnet18', help: 'exampe resnet18, resnet50, mobilenetv2 ...'}

        tracking_uri: {type: str, help: 'the server address'}
        experiment_name: {type: str, default: 'My_experiment', help: 'remote and local experiment name'}
    command: "python mlflow_training.py 
            --epochs={epochs}
            --categories={categories}
            --lr={lr}
            --tracking_uri={tracking_uri}
            --model_name={model_name}
            --backbone_name={backbone_name}
            --batch_size={batch_size}
            --experiment_name={experiment_name}"

рдПрдордПрд▓рдлрд╝реНрд▓реЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рдЧреБрдг рд╣реИрдВ:

  • рдирд╛рдо - рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо;
  • рдкрд░реНрдпрд╛рд╡рд░рдг - рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, conda_env рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдирд╛рдХреЛрдВрдбрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рд╡рд░рдг conda.yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ;
  • рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреМрди рд╕реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ)

conda.yaml

name: flow_segmentation
channels:
  - defaults
  - anaconda
dependencies:
  - python==3.7
  - pip:
    - mlflow==1.8.0
    - pysftp==0.2.9
    - Cython==0.29.19
    - numpy==1.18.4
    - pycocotools==2.0.0
    - requests==2.23.0
    - matplotlib==3.2.1
    - segmentation-models==1.0.1
    - Keras==2.3.1
    - imgaug==0.4.0
    - tqdm==4.46.0
    - tensorflow-gpu==1.14.0

рдЖрдк рдбреЙрдХрд░ рдХреЛ рдЕрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рдкреНрд░рд▓реЗрдЦрди.

4. рдЖрдЗрдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░реЗрдВ

рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:

git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/

рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

pip install mlflow
pip install pysftp

рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдВ conda_env рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдПрдирд╛рдХреЛрдВрдбрд╛ рдХреЛ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди рдЖрдк рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ рдФрд░ рд▓реЙрдиреНрдЪ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдХрд░ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рд╕рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдкреВрд░реЗ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рд╕реЗ:

$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .

рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдХреЙрдиреНрдбрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдпреБрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд░рд┐рдд рдХреА, рдЬрд┐рди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рд╣рдо рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЖрдк рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ) рдпрд╣рд╛рдВ) рдФрд░ рд╣рдорд╛рд░реЗ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ред
рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдПрдордПрд▓рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

5. рд╕реАрдЦрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдкрддреЗ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ http://server_host:server_port

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдпрд╣рд╛рдВ рд╣рдо рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рдКрдкрд░ рдмрд╛рдПрдВ), рд╕рд╛рде рд╣реА рд░рдиреЛрдВ (рдордзреНрдп) рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА (рдкреИрд░рд╛рдореАрдЯрд░, рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдкреНрд░рддреНрдпреЗрдХ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рд╡реЗред рдлрд┐рд▓рд╣рд╛рд▓ рд╣рдо "рдореИрдиреБрдЕрд▓" рдореЛрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдордПрд▓рдлрд╝реНрд▓реЛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рддреНрдпрд╛рдкрди рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

6. рдореЙрдбрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

рдЬрдм рд╣рдордиреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдпрд╣ рдпреБрджреНрдз рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрд╕ рд▓реЙрдиреНрдЪ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдиреАрдЪреЗ рдЬрд╛рдПрдВред

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдорд╛рди рдирд╛рдо рд╕реЗ рдХреЛрдИ рдЕрдиреНрдп рдореЙрдбрд▓ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреАрди рд░рд╛рдЬреНрдпреЛрдВ (рд╕реНрдЯреЗрдЬрд┐рдВрдЧ, рдЙрддреНрдкрд╛рджрди, рд╕рдВрдЧреНрд░рд╣реАрдд) рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдмрд╛рдж рдореЗрдВ, рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЗрди рд░рд╛рдЬреНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдореЙрдбрд▓реЛрдВ рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдВрдЪ рднреА рд╣реИ

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдг

рдПрдордПрд▓рдУрдкреАрдПрд╕ - рдХреБрдХ рдмреБрдХ, рдЕрдзреНрдпрд╛рдп 1

рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреА рддрд░рд╣, рд╕рднреА рдСрдкрд░реЗрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

7. рдореЙрдбрд▓ рддреИрдирд╛рдд рдХрд░реЗрдВ

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд (рдХреЗрд░рд╕) рдореЙрдбрд▓ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

class SegmentationModel:
    def __init__(self, tracking_uri, model_name):

        self.registry = RemoteRegistry(tracking_uri=tracking_uri)
        self.model_name = model_name
        self.model = self.build_model(model_name)

    def get_latest_model(self, model_name):
        registered_models = self.registry.get_registered_model(model_name)
        last_model = self.registry.get_last_model(registered_models)
        local_path = self.registry.download_artifact(last_model.run_id, 'model', './')
        return local_path

    def build_model(self, model_name):
        local_path = self.get_latest_model(model_name)

        return mlflow.keras.load_model(local_path)

    def predict(self, image):
        image = self.preprocess(image)
        result = self.model.predict(image)
        return self.postprocess(result)

    def preprocess(self, image):
        image = cv2.resize(image, (256, 256))
        image = image / 255.
        image = np.expand_dims(image, 0)
        return image

    def postprocess(self, result):
        return result

рдпрд╣рд╛рдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП self.registry рдлрд┐рд░ рд╕реЗ mlflow.tracking.MlflowClient рдХреЗ рдКрдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЖрд╡рд░рдг рд╣реИред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдФрд░ рдирд╡реАрдирддрдо рдЙрддреНрдкрд╛рджрди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ ./рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ mlflow.keras.load_model(local_path) рд╕реЗ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реВрдВред рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реАрд╡реА (рдПрдордПрд▓) рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ

рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:

  • рдПрдордПрд▓ рдореЙрдбрд▓, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдЧрддрд┐ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрдВрджреНрд░реАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ;
  • рдПрдХ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ;
  • рдореЙрдбрд▓реЛрдВ рдкрд░ рдХрд╛рд░реНрдп рдХреА рдкреНрд░рдЧрддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛;
  • рдореЙрдбрд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ;
  • рдкрд░рд┐рдгрд╛рдореА рдореЙрдбрд▓реЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЦрд┐рд▓реМрдирд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдФрд░ рдореЙрдбрд▓реЛрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг (рдХреНрд░рдорд╢рдГ рдЕрдВрдХ 5 рдФрд░ 6) рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдпрд╛ рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░? рдореИрдВ рдЬреЛ рдХрд╣рдирд╛ рдЪрд╛рд╣ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ MLOps рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, MLflow рдХреЗрд╡рд▓ рдЕрдВрдд рдХрд╛ рдПрдХ рд╕рд╛рдзрди рд╣реИред

рд▓рд┐рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛?
рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ?
рд╕рднреА рдпрд╛ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреМрди рд╕реЗ рдЙрдкрдХрд░рдг рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

рдкреБрдирд╢реНрдЪ рдореИрдВ рдХреБрдЫ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝реВрдВрдЧрд╛:
рдЬреАрдердм рдкрд░рд┐рдпреЛрдЬрдирд╛ - https://github.com/simbakot/mlflow_example
рдПрдордПрд▓рдлреНрд▓реЛ - https://mlflow.org/
рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдИрдореЗрд▓ - [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд]

рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рд╕рдордп-рд╕рдордп рдкрд░ рдЖрдИрдЯреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдпреЛрдЬрд┐рдд рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 8 рдЬреБрд▓рд╛рдИ рдХреЛ 19:00 рдорд╛рд╕реНрдХреЛ рд╕рдордп рдкрд░ рдСрдирд▓рд╛рдЗрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕реАрд╡реА рдореАрдЯрдЕрдк рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ .

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ