MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рдирдорд╕реНрддреЗ рд╕рдмреИ! рдо CROC рдорд╛ CV рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рд╣реБрдБред рд╣рд╛рдореАрд▓реЗ CV рдХреЛ рдХреНрд╖реЗрддреНрд░рдорд╛ 3 рд╡рд░реНрд╖рджреЗрдЦрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджреИ рдЖрдПрдХрд╛ рдЫреМрдВред рдпрд╕ рдЕрд╡рдзрд┐рдорд╛, рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рдХреБрд░рд╛рд╣рд░реВ рдЧрд░реНрдпреМрдВ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐: рд╣рд╛рдореАрд▓реЗ рдбреНрд░рд╛рдЗрднрд░рд╣рд░реВрд▓рд╛рдИ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдпреМрдВ рддрд╛рдХрд┐ рдбреНрд░рд╛рдЗрднрд┐рдЩ рдЧрд░реНрджрд╛ рдЙрдиреАрд╣рд░реВрд▓реЗ рдкрд┐рдЙрдиреЗ, рдзреБрдореНрд░рдкрд╛рди рдирдЧрд░реНрдиреЗ, рдлреЛрдирдорд╛ рдХреБрд░рд╛ рдирдЧрд░реНрдиреЗ, рд╕рдбрдХрдорд╛ рд╣реЗрд░реЗ, рд░ рд╕рдкрдирд╛ рд╡рд╛ рдмрд╛рджрд▓рдорд╛ рд╣реЛрдЗрдиред ; рд╣рд╛рдореАрд▓реЗ рд╕рдорд░реНрдкрд┐рдд рд▓реЗрдирд╣рд░реВрдорд╛ рдбреНрд░рд╛рдЗрдн рдЧрд░реНрдиреЗ рд░ рдзреЗрд░реИ рдкрд╛рд░реНрдХрд┐рдЩ рдард╛рдЙрдБрд╣рд░реВ рд▓рд┐рдиреЗ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓рд╛рдИ рд░реЗрдХрд░реНрдб рдЧрд░реНрдпреМрдВред рдХрд╛рдорджрд╛рд░рд╣рд░реВрд▓реЗ рд╣реЗрд▓рдореЗрдЯ, рдкрдиреНрдЬрд╛ рдЖрджрд┐ рд▓рдЧрд╛рдПрдХрд╛ рдЫрдиреН рднрдиреНрдиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд; рд╕реБрд╡рд┐рдзрд╛рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрди рдЪрд╛рд╣рдиреЗ рдХрд░реНрдордЪрд╛рд░реАрд▓рд╛рдИ рдкрд╣рд┐рдЪрд╛рди рдЧрд░рд┐рдпреЛ; рд╣рд╛рдореАрд▓реЗ рд╕рдХреНрдиреЗ рд╕рдмреИ рдХреБрд░рд╛ рдЧрдгрдирд╛ рдЧрд░реНрдпреМрдВред

рдо рдпреЛ рд╕рдм рдХреЗ рдХреЛ рд▓рд╛рдЧреА рдЧрд░реНрджреИрдЫреБ?

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

рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдХреЛ рдЕрдиреБрдХрд░рдг рдЧрд░реМрдВ

рдХрд▓реНрдкрдирд╛ рдЧрд░реМрдВ рдХрд┐ рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдпреБрд╡рд╛ рдХрдореНрдкрдиреА "N" рдорд╛ рдЬрд╛рдЧрд┐рд░ рдкрд╛рдпреМрдВ, рдЬрд╕рдХрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВ ML рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫрдиреНред рд╣рд╛рдореА ML (DL, CV) рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫреМрдВ, рддреНрдпрд╕рдкрдЫрд┐ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдХрд╛рдордорд╛ рдЬрд╛рдиреНрдЫреМрдВ, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╡рд┐рд╢реНрд░рд╛рдо рд▓рд┐рдиреНрдЫреМрдВ, рд░ рдЖрдлреНрдиреИ рд╡рд╛ рдЕрд░реВ рдХрд╕реИрдХреЛ рдиреНрдпреВрд░реЛрдирдорд╛ рдлрд░реНрдХрдиреНрдЫреМрдВред

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

рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдкрд╣рд┐рдЪрд╛рди

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

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

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

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

рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдпреЛ рдПрдХ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рдХреЛ рд╕рд╛рде рдЖрдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдкрдорд╛ рдпреЛ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ? рдпреЛ рдЕрднреНрдпрд╛рд╕ MLOps рднрдирд┐рдиреНрдЫ

MLOps, рд╡рд╛ рдореЗрд╕рд┐рди рд▓рд░реНрдирд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ DevOps рд▓реЗ рдбреЗрдЯрд╛ рд╡рд┐рдЬреНрдЮрд╛рди рд░ IT рдЯреЛрд▓реАрд╣рд░реВрд▓рд╛рдИ рдореЗрд╕рд┐рди рд▓рд░реНрдирд┐рдЩ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рдЕрдиреБрдЧрдорди, рдкреНрд░рдорд╛рдгреАрдХрд░рдг, рд░ рд╢рд╛рд╕рдирдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рдореЛрдбреЗрд▓ рд╡рд┐рдХрд╛рд╕ рд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рдЧрддрд┐рд▓рд╛рдИ рд╕рд╣рдпреЛрдЧ рдЧрд░реНрди рд░ рдмрдврд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рддрд┐рдореА рд╕рдХреНрдЫреМ рдкрдвреНрдирдЧреБрдЧрд▓ рд╕рд╛рдереАрд╣рд░реВ рдпреЛ рд╕рдмреИрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗ рд╕реЛрдЪреНрдЫрдиреН? рд▓реЗрдЦрдмрд╛рдЯ рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ MLOps рдПрдХрджрдо рдареВрд▓реЛ рдХреБрд░рд╛ рд╣реЛред

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

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

MLFlow рдЙрдкрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ "рдирд┐рд░реНрдорд╛рдг" MLOps

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

MLflow рдорд╛ рдЪрд╛рд░ рдШрдЯрдХрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН:

  • MLflow рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ - рд░реЗрдХрд░реНрдбрд┐рдЩ рдирддрд┐рдЬрд╛ рд░ рдорд╛рдкрджрдгреНрдбрд╣рд░реВрдХреЛ рдореБрджреНрджрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдпреЛ рдкрд░рд┐рдгрд╛рдорд▓рд╛рдИ рдирд┐рдореНрддреНрдпрд╛рдпреЛ;
  • MLflow рдкрд░рд┐рдпреЛрдЬрдирд╛ - рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХреЛрдб рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рдХреБрдиреИ рдкрдирд┐ рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдкреБрди: рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ;
  • MLflow рдореЛрдбреЗрд▓рд╣рд░реВ - рдЙрддреНрдкрд╛рджрдирдорд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░;
  • MLflow рд░рдЬрд┐рд╕реНрдЯреНрд░реА - рддрдкрд╛рдИрдВрд▓рд╛рдИ рдореЛрдбреЗрд▓рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд░ рдХреЗрдиреНрджреНрд░реАрдХреГрдд рднрдгреНрдбрд╛рд░рдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд░рд╛рдЬреНрдп рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

MLflow рджреБрдИ рд╕рдВрд╕реНрдерд╛рд╣рд░реВрдорд╛ рд╕рдЮреНрдЪрд╛рд▓рди рд╣реБрдиреНрдЫ:

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

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ Ubuntu 18.04 рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордорд╛ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫред

1. рд╕рд░реНрднрд░ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореНрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд░ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╕рд░реНрднрд░ рддреИрдирд╛рде рдЧрд░реНрдиреЗрдЫреМрдВред MLflow рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рд╕рд░реНрднрд░рдорд╛ рджреБрдИ рдореБрдЦреНрдп рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдЫрдиреН:

  • рдмреНрдпрд╛рдХрдПрдиреНрдб рд╕реНрдЯреЛрд░ - рджрд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ (4 DBMSs рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ: mysql, mssql, sqlite, рд░ postgresql);
  • рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯ рд╕реНрдЯреЛрд░ - рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ (рен рднрдгреНрдбрд╛рд░рдг рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ: Amazon S7, Azure Blob Storage, Google Cloud Storage, FTP рд╕рд░реНрднрд░, SFTP рд╕рд░реНрднрд░, NFS, HDFS)ред

рдЧреБрдгрд╕реНрддрд░рдорд╛ рдХрд▓рд╛рдХреГрддрд┐ рд╕реНрдЯреЛрд░ рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рдПрд╕рдПрдлрдЯреАрдкреА рд╕рд░реНрднрд░ рд▓рд┐рдиреБрд╣реЛрд╕реНред

  • рдПрдЙрдЯрд╛ рд╕рдореВрд╣ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН
    $ 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

рдЧреБрдгрд╕реНрддрд░рдорд╛ рдмреНрдпрд╛рдХрдЗрдиреНрдб рд╕реНрдЯреЛрд░ postgresql рд▓рд┐рдФрдВред

$ 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. рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рдердкреНрдиреБрд╣реЛрд╕реН

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

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдВ github рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд░рд╛рдорд╛ рднрдПрдХрд╛ рд╕рдмреИ рдЪреАрдЬрд╣рд░реВ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ 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() рд╕рдХреНрд╖рдо рдЧрд░реНрдЫреБред рд╣рд╛рд▓ MLflow рдЯреНрд░реНрдпрд╛рдХрд┐рдЩрд▓реЗ TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark рдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓рдЧрд┐рдЩрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдврд╛рдБрдЪрд╛ рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрднрдПрди рднрдиреЗ, рддрдкрд╛рдИрдВ рд╕рдзреИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд▓рдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрд╛рд▓рд┐рдо рд╕реБрд░реБ рдЧрд░реНрджреИрдЫреМрдВ ред рд░рд┐рдореЛрдЯ рд╕рд░реНрднрд░рдорд╛ рдЯреНрдпрд╛рдЧ рд░ рдЗрдирдкреБрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдХреЗрд╣реА рд▓рд╛рдЗрдирд╣рд░реВ рд░ рддрдкрд╛рдИрдВ, рдЕрд░реВ рд╕рдмреИрдЬрд╕реНрддреИ, рд╕рдмреИ рд▓рдиреНрдЪрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реАрдорд╛ рдкрд╣реБрдБрдЪ рдЫред рд░рд╛рдореНрд░реЛ?

3. рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрд░реНрдЫреМрдВ

рдЕрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реНред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реВрдЯрдорд╛ MLproject рд░ conda.yaml рдлрд╛рдЗрд▓ рдердкреНрдиреБрд╣реЛрд╕реНред
ML рдкрд░рд┐рдпреЛрдЬрдирд╛

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}"

MLflow рдкрд░рд┐рдпреЛрдЬрдирд╛ рдзреЗрд░реИ рдЧреБрдгрд╣рд░реВ рдЫрдиреН:

  • рдирд╛рдо - рдЖрдлреНрдиреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдирд╛рдо;
  • рд╡рд╛рддрд╛рд╡рд░рдг - рдореЗрд░реЛ рдХреЗрд╕рдорд╛, 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

рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рд░реВрдкрдорд╛ рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдердк рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреГрдкрдпрд╛ рд╕рдиреНрджрд░реНрдн рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд╛рдЧрдЬрд╛рдд.

рек. рддрд╛рд▓рд┐рдо рд╕реБрд░реБ рдЧрд░реМрдВ

рд╣рд╛рдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрд▓реЛрди рдЧрд░реНрдЫреМрдВ рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЬрд╛рдиреНрдЫреМрдВ:

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

рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ

pip install mlflow
pip install pysftp

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

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

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

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

5. рд╕рд┐рдХрд╛рдЗ рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рд╣рд╛рдореНрд░реЛ рд╕рд░реНрднрд░рдХреЛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдЬрд╛рди рд╕рдХреНрдЫреМрдВ http://server_host:server_port

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рдпрд╣рд╛рдБ рд╣рд╛рдореА рд╕рдмреИ рдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╕реВрдЪреА (рд╢реАрд░реНрд╖ рдмрд╛рдпрд╛рдБ), рд╕рд╛рдереИ рд░рди (рдордзреНрдп) рдорд╛ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреНрдЫреМрдВред рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд╖реЗрдкрдгрдХреЛ рд▓рд╛рдЧрд┐ рдердк рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА (рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ, рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рд░ рдХреЗрд╣реА рдердк рдЬрд╛рдирдХрд╛рд░реА) рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВред

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рдкреНрд░рддреНрдпреЗрдХ рдореЗрдЯреНрд░рд┐рдХрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдЗрддрд┐рд╣рд╛рд╕ рдЕрд╡рд▓реЛрдХрди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рддреАред рдпрд╕ рд╕рдордпрдорд╛, рд╣рд╛рдореА "рдореНрдпрд╛рдиреБрдЕрд▓" рдореЛрдбрдорд╛ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рд░ рддрдкрд╛рдИрдВрд▓реЗ MLflow API рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрдирд┐ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

6. рдореЛрдбреЗрд▓ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

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

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдирд╛рдо рджрд┐рдПрдкрдЫрд┐, рдпрд╕рдХреЛ рдПрдЙрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЙрд╣реА рдирд╛рдордХреЛ рдЕрд░реНрдХреЛ рдореЛрдбреЗрд▓ рдмрдЪрдд рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рд╕рдВрд╕реНрдХрд░рдг рд╕реНрд╡рддрдГ рдЕрдкрдЧреНрд░реЗрдб рд╣реБрдиреЗрдЫред

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

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

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рд╣рд╛рдореАрд╕рдБрдЧ рд╕рдмреИ рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛ рд╕рдЬрд┐рд▓реЛ рдкрд╣реБрдБрдЪ рдкрдирд┐ рдЫ

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ

MLOps - рдХреБрдХ рдкреБрд╕реНрддрдХ, рдЕрдзреНрдпрд╛рдп 1

рдЕрдШрд┐рд▓реНрд▓реЛ рдЕрдиреБрдЪреНрдЫреЗрджрдорд╛ рдЬрд╕реНрддреИ, рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ API рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

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 рдорд╛ рдлреЗрд░рд┐ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рд░реНрдпрд╛рдкрд░ рд╣реЛред рдмрд┐рдиреНрджреБ рдпреЛ рд╣реЛ рдХрд┐ рдо рд░рд┐рдореЛрдЯ рд╕рд░реНрднрд░ рдкрд╣реБрдБрдЪ рдЧрд░реНрдЫреБ рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рд░ рдирд╡реАрдирддрдо рдЙрддреНрдкрд╛рджрди рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде рддреНрдпрд╣рд╛рдБ рдореЛрдбреЗрд▓ рдЦреЛрдЬреНрдЫреБред рдЕрд░реНрдХреЛ, рдо рдХрд▓рд╛рдХреГрддрд┐рд▓рд╛рдИ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ ./model рдлреЛрд▓реНрдбрд░рдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдЫреБ рд░ рдпрд╕ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА mlflow.keras.load_model(local_path) рдмрд╛рдЯ рдореЛрдбреЗрд▓ рдмрдирд╛рдЙрдБрдЫреБред рдЕрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред CV (ML) рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕рдЬрд┐рд▓реИ рдореЛрдбреЗрд▓ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рд░ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рдореИрд▓реЗ рдПрдЙрдЯрд╛ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╕реНрддреБрдд рдЧрд░реЗ рдЬрд╕рд▓реЗ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ:

  • рдХреЗрдиреНрджреНрд░реАрдп рд░реВрдкрдорд╛ ML рдореЛрдбреЗрд▓, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдЧрддрд┐ рд░ рдкрд░рд┐рдгрд╛рдо рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг;
  • рдЪрд╛рдБрдбреИ рдПрдХ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдирд╛рдд;
  • рдЕрдиреБрдЧрдорди рд░ рдореЛрдбреЗрд▓ рдорд╛ рдХрд╛рдо рдХреЛ рдкреНрд░рдЧрддрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг;
  • рдпреЛ рдореЛрдбреЗрд▓ рдХреЛ рд╕реНрдерд┐рддрд┐ рд╕рдВрд╕реНрдХрд░рдг рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ;
  • рдирддрд┐рдЬрд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред

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

рдореИрд▓реЗ рджреЗрдЦрд╛рдЙрди рдирдкрд╛рдПрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН?
рддрдкрд╛рдЗрдБрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрди рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдХреЗ рдердкреНрдиреБрд╣реБрдиреНрдЫ?
рд╕рдмреИ рд╡рд╛ рдЖрдВрд╢рд┐рдХ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рддрдкрд╛рдИрдВ рдХреБрди рдЙрдкрдХрд░рдг рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ?

PS рдо рдХреЗрд╣рд┐ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдЫреЛрдбреНрдиреЗрдЫреБ:
github рдкрд░рд┐рдпреЛрдЬрдирд╛ - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдореЗрд░реЛ рдХрд╛рдо рдЗрдореЗрд▓ - [рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд]

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

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

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