MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░! рдореА CROC рдордзреНрдпреЗ 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 Registry - рддреБрдореНрд╣рд╛рд▓рд╛ рдореЙрдбреЗрд▓реНрд╕ рд╕реНрдЯреЛрдЕрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╕реНрдерд┐рддреА рдХреЗрдВрджреНрд░реАрдХреГрдд рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

MLflow рджреЛрди рд╕рдВрд╕реНрдерд╛рдВрд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ:

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

рдЙрджрд╛рд╣рд░рдгрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдкрд╛рдпрд▒реНрдпрд╛ рдЙрдмрдВрдЯреВ 18.04 рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд.

1. рд╕рд░реНрд╡реНрд╣рд░ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛

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

  • рдмреЕрдХрдПрдВрдб рд╕реНрдЯреЛрдЕрд░ - рдиреЛрдВрджрдгреАрдХреГрдд рдореЙрдбреЗрд▓реНрд╕рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ (4 DBMS рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ: mysql, mssql, sqlite, рдЖрдгрд┐ postgresql);
  • рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯ рд╕реНрдЯреЛрдЕрд░ - рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯреНрд╕ рд╕реНрдЯреЛрдЕрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ (7 рд╕реНрдЯреЛрд░реЗрдЬ рдкрд░реНрдпрд╛рдпрд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP рд╕рд░реНрд╡реНрд╣рд░, SFTP рд╕рд░реНрд╡реНрд╣рд░, NFS, HDFS).

рдореНрд╣рдгреВрди рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯ рд╕реНрдЯреЛрдЕрд░ рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдПрдХ 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

рдореНрд╣рдгреВрди рдмреЕрдХрдПрдВрдб рд╕реНрдЯреЛрдЕрд░ рдЪрд▓рд╛ 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 рд╡рд░ рдкреНрд░рдХрд▓реНрдк рдЬреЗ рдХрд╛рд╣реА рдЖрд╣реЗ рддреЗ рд╡рд┐рднрд╛рдЧрдгреНрдпрд╛рд╕рд╛рдареА Keras рд╡рд░ 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 рдлрд╛рдИрд▓ рдЬреЛрдбрд╛.
рдПрдордПрд▓рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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 .

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

5. рд╢рд┐рдХрдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рд╛

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ рдЬрд╛рдК рд╢рдХрддреЛ http://server_host:server_port

MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

рдпреЗрдереЗ рдЖрдкрдг рд╕рд░реНрд╡ рдкреНрд░рдпреЛрдЧрд╛рдВрдЪреА рд╕реВрдЪреА (рд╡рд░ рдбрд╛рд╡реАрдХрдбреЗ), рддрд╕реЗрдЪ рдзрд╛рд╡рд╛рдВрдЪреА рдорд╛рд╣рд┐рддреА (рдордзреНрдпрднрд╛рдЧреА) рдкрд╛рд╣рддреЛ. рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд╖реЗрдкрдгрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдорд╛рд╣рд┐рддреА (рдорд╛рдкрджрдВрдб, рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдХрд▓рд╛рдХреГрддреА рдЖрдгрд┐ рдХрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА) рдкрд╛рд╣реВ рд╢рдХрддреЛ.

MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

рдкреНрд░рддреНрдпреЗрдХ рдореЗрдЯреНрд░рд┐рдХрд╕рд╛рдареА рдЖрдкрдг рдмрджрд▓рд╛рдВрдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдкрд╛рд╣реВ рд╢рдХрддреЛ

MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

рддреНрдпрд╛. рдпрд╛рдХреНрд╖рдгреА, рдЖрдореНрд╣реА "рдореЕрдиреНрдпреБрдЕрд▓" рдореЛрдбрдордзреНрдпреЗ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреБрдореНрд╣реА MLflow API рд╡рд╛рдкрд░реВрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рджреЗрдЦреАрд▓ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛.

6. рдореЙрдбреЗрд▓рдЪреА рдиреЛрдВрджрдгреА рдХрд░рд╛

рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдореЙрдбреЗрд▓рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рддреЗ рдпреБрджреНрдзрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдард░рд╡рд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рддреЗ рдиреЛрдВрджрдгреА рдХрд░рдгреНрдпрд╛рд╕ рдкреБрдвреЗ рдЬрд╛рдК, рдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдирд┐рд╡рдбрддреЛ (рдорд╛рдЧреАрд▓ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рдд рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ) рдЖрдгрд┐ рдЦрд╛рд▓реА рдЬрд╛рддреЛ.

MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

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

MLOps - рдХреБрдХ рдмреБрдХ, рдзрдбрд╛ 1

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

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) рдбреЗрд╡реНрд╣рд▓рдкрд░ рд╕рд╣рдЬрдкрдгреЗ рдореЙрдбреЗрд▓ рд╕реБрдзрд╛рд░реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдирд╡реАрди рдЖрд╡реГрддреНрддреНрдпрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд.

рд╢реЗрд╡рдЯреА

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

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

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

рдореА рдкреНрд░рджрд░реНрд╢рд┐рдд рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдЖрд▓реНрдпрд╛ рддреЗ рд▓рд┐рд╣рд╛?
рддреБрдордЪреНрдпрд╛ рдЧрд░рдЬрд╛ рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдХрд╛рдп рдЬреЛрдбрд╛рд▓?
рд╕рд░реНрд╡ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдХреЛрдгрддреА рд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╡рд╛рдкрд░рддрд╛?

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

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

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

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