MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

Π—Π΄Ρ€Π°Π²ΠΎ Π½Π° ситС! Јас сум Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ Π½Π° CV Π²ΠΎ CROC. Π’Π΅ΡœΠ΅ 3 Π³ΠΎΠ΄ΠΈΠ½ΠΈ спровСдувамС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΎΠ΄ областа Π½Π° CV. Π—Π° Ρ‚ΠΎΠ° Π²Ρ€Π΅ΠΌΠ΅, Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π³ΠΈ слСдСвмС Π²ΠΎΠ·Π°Ρ‡ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π²ΠΎΠ·Π°Ρ‚ Ρ‚ΠΈΠ΅ Π½Π΅ ΠΏΠΈΠ΅Π»Π΅, Π½Π΅ ΠΏΡƒΡˆΠ΅Π»Π΅, Π½Π΅ Π·Π±ΠΎΡ€ΡƒΠ²Π°Π»Π΅ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, Π³Π»Π΅Π΄Π°Π»Π΅ Π²ΠΎ ΠΏΠ°Ρ‚ΠΎΡ‚, Π° Π½Π΅ Π²ΠΎ ΡΠΎΠ½ΠΈΡˆΡ‚Π°Ρ‚Π° ΠΈΠ»ΠΈ Π²ΠΎ ΠΎΠ±Π»Π°Ρ†ΠΈΡ‚Π΅. ; Π‘Π½ΠΈΠΌΠ°Π²ΠΌΠ΅ Π»ΡƒΡ“Π΅ ΠΊΠΎΠΈ Π²ΠΎΠ·Π°Ρ‚ ΠΏΠΎ посСбни Π»Π΅Π½Ρ‚ΠΈ ΠΈ Π·Π°Ρ„Π°ΡœΠ°Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠ°Ρ€ΠΊΠΈΠ½Π³ мСста; сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° носат шлСмови, Ρ€Π°ΠΊΠ°Π²ΠΈΡ†ΠΈ ΠΈΡ‚Π½.; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Π» Π²Ρ€Π°Π±ΠΎΡ‚Π΅Π½ кој сака Π΄Π° Π²Π»Π΅Π·Π΅ Π²ΠΎ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚; Π˜Π·Π±Ρ€ΠΎΠΈΠ²ΠΌΠ΅ сС ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅.

Π—Π° ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²Π°ΠΌ сСто ΠΎΠ²Π°?

Π’ΠΎ процСсот Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΡƒΠ΄Ρ€ΠΈΠ²ΠΌΠ΅ Π½Π΅Ρ€Π°ΠΌΠ½ΠΈΠ½ΠΈ, ΠΌΠ½ΠΎΠ³Ρƒ Π½Π΅Ρ€Π°ΠΌΠ½ΠΈΠ½ΠΈ, Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ со ΠΊΠΎΠΈ ΠΈΠ»ΠΈ стС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ΠΈ ΠΈΠ»ΠΈ ќС сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°.

АјдС Π΄Π° ја симулирамС ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°

Π”Π° замислимС Π΄Π΅ΠΊΠ° сС Π²Ρ€Π°Π±ΠΎΡ‚ΠΈΠ²ΠΌΠ΅ Π²ΠΎ Π΅Π΄Π½Π° ΠΌΠ»Π°Π΄Π° компанија β€žΠβ€œ, Ρ‡ΠΈΠΈ активности сС ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со ΠœΠ›. Π Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ML (DL, CV), ΠΏΠΎΡ‚ΠΎΠ° ΠΏΠΎΡ€Π°Π΄ΠΈ нСкоја ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π°ΠΌΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³Π° Ρ€Π°Π±ΠΎΡ‚Π°, Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ ΠΏΠ°ΡƒΠ·Π° ΠΈ сС Π²Ρ€Π°ΡœΠ°ΠΌΠ΅ Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΈΠ»ΠΈ Ρ‚ΡƒΡ“ Π½Π΅Π²Ρ€ΠΎΠ½.

  1. Π”ΠΎΠ°Ρ“Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° вистината, Ρ‚Ρ€Π΅Π±Π° Π½Π΅ΠΊΠ°ΠΊΠΎ Π΄Π° сС сСтитС ΠΊΠ°Π΄Π΅ стС застаналС, со ΠΊΠ°ΠΊΠ²ΠΈ Ρ…ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ стС ΠΏΡ€ΠΎΠ±Π°Π»Π΅ ΠΈ ΡˆΡ‚ΠΎ Π΅ најваТно, Π΄ΠΎ ΠΊΠ°ΠΊΠ²ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π΄ΠΎΠ²Π΅Π΄ΠΎΠ°. МоТС Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Ρ‚ΠΎΠ° кој складирал ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ситС Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ°: Π²ΠΎ Π³Π»Π°Π²Π°Ρ‚Π°, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π±Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ, Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½Π° срСдина Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚. Π‘Π»ΡƒΡ‡Π°Ρ˜Π½ΠΎ Π²ΠΈΠ΄ΠΎΠ² ΠΎΠΏΡ†ΠΈΡ˜Π° ΠΊΠΎΠ³Π° Ρ…ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π±Π΅Π° Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ Π»ΠΈΠ½ΠΈΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚, Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, Ρ„Π°Π½Ρ‚Π°Π·ΠΈΡ˜Π°Ρ‚Π°. Π‘Π΅Π³Π° замислСтС Π΄Π΅ΠΊΠ° Π½Π΅ стС сС Π²Ρ€Π°Ρ‚ΠΈΠ»Π΅ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΡƒΠΊΡƒ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π½Π° личност која ја Π½Π°ΠΏΡƒΡˆΡ‚ΠΈΠ»Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° ΠΈ стС наслСдилС ΠΊΠΎΠ΄ ΠΈ ΠΌΠΎΠ΄Π΅Π» Π½Π°Ρ€Π΅Ρ‡Π΅Π½ model_1.pb. Π—Π° Π΄Π° ја ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΠΌΠ΅ сликата ΠΈ Π΄Π° ја прСнСсСмС Ρ†Π΅Π»Π°Ρ‚Π° Π±ΠΎΠ»ΠΊΠ°, Π΄Π° замислимС Π΄Π΅ΠΊΠ° стС ΠΈ ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»ΠΈΡΡ‚.
  2. Π‘Π°ΠΌΠΎ Π½Π°ΠΏΡ€Π΅Π΄. Π—Π° Π΄Π° Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ ΠΊΠΎΠ΄ΠΎΡ‚, Π½ΠΈΠ΅ ΠΈ сСкој ΡˆΡ‚ΠΎ ќС Ρ€Π°Π±ΠΎΡ‚ΠΈ со Π½Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° создадСмС срСдина. ЧСсто сС случува ΠΏΠΎΡ€Π°Π΄ΠΈ нСкоја ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΄Π° Π½Π΅ Π³ΠΎ остават ΠΊΠ°ΠΊΠΎ наслСдство. Ова исто Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° станС Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΡ˜Π°Π»Π½Π° Π·Π°Π΄Π°Ρ‡Π°. НС сакатС Π΄Π° Π³ΡƒΠ±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° овој Ρ‡Π΅ΠΊΠΎΡ€, Π½Π΅Π»ΠΈ?
  3. НиС Ρ‚Ρ€Π΅Π½ΠΈΡ€Π°ΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π» (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»). Π‘Ρ‚ΠΈΠ³Π½ΡƒΠ²Π°ΠΌΠ΅ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ° ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ станува ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠ±Ρ€ΠΎ - Π²Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° Π³ΠΎ Π·Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚. Π”Π° Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌΠ΅ car_detection_v1.pb. ΠŸΠΎΡ‚ΠΎΠ° Ρ‚Ρ€Π΅Π½ΠΈΡ€Π°ΠΌΠ΅ ΡƒΡˆΡ‚Π΅ Π΅Π΄Π΅Π½ - car_detection_v2.pb. НСкоС Π²Ρ€Π΅ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΡ†Π½Π°, Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΈΠ»ΠΈ Π½ΠΈΠ΅ самитС ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ сС повСќС ΠΈ повСќС, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ. Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, сС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π΅Π½ ΠΊΡƒΠΏ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ΠΊΠΎΠΈ ΠΌΠΎΡ€Π° ΠΌΠ°ΠΊΠΎΡ‚Ρ€ΠΏΠ½ΠΎ Π΄Π° сС собСрат (Π½ΠΎ Ρ‚ΠΎΠ° ќС Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΡ†Π½Π°, бидСјќи засСга ΠΈΠΌΠ°ΠΌΠ΅ повСќС ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ).
  4. ОК сСга Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ! ИмамС ΠΌΠΎΠ΄Π΅Π»! МоТСмС Π»ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Ρ‚Ρ€Π΅Π½ΠΈΡ€Π°ΠΌΠ΅ слСдниот ΠΌΠΎΠ΄Π΅Π», Π΄Π° Ρ€Π°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π·Π° Π΄Π° Ρ€Π΅ΡˆΠΈΠΌΠ΅ Π½ΠΎΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΎΠ΄ΠΈΠΌΠ΅ Π΄Π° ΠΏΠΈΠ΅ΠΌΠ΅ Ρ‡Π°Ρ˜? И кој ќС распорСди?

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ

Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π΅ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ Π»ΡƒΡ“Π΅. И со Ρ‚Π΅ΠΊ Π½Π° Π²Ρ€Π΅ΠΌΠ΅ Π»ΡƒΡ“Π΅Ρ‚ΠΎ си Π·Π°ΠΌΠΈΠ½ΡƒΠ²Π°Π°Ρ‚ ΠΈ Π΄ΠΎΠ°Ρ“Π°Π°Ρ‚, ΠΈΠΌΠ° повСќС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π° самитС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ стануваат послоТСни. Π’Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΠ½Π°ΠΊΠ°, ситуациитС ΠΎΠ΄ циклусот опишан ΠΏΠΎΠ³ΠΎΡ€Π΅ (ΠΈ Π½Π΅ само) Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ќС сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚ ΠΎΠ΄ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΡšΠ΅ Π΄ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΡšΠ΅. Π‘Π΅Ρ‚ΠΎ ΠΎΠ²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π° со ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠ΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠ½Ρ„ΡƒΠ·ΠΈΡ˜Π°, Π½Π΅Ρ€Π²ΠΈ, Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ нСзадоволство Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΈ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚, ΠΈΠ·Π³ΡƒΠ±Π΅Π½ΠΈ ΠΏΠ°Ρ€ΠΈ. Иако ситС Π½ΠΈΠ΅ ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π³ΠΎ слСдимС истото старо Π³Ρ€Π΅Π±Π»ΠΎ, Π²Π΅Ρ€ΡƒΠ²Π°ΠΌ Π΄Π΅ΠΊΠ° никој Π½Π΅ сака Π΄Π° Π³ΠΈ ΠΏΡ€Π΅ΠΆΠΈΠ²ΡƒΠ²Π° ΠΎΠ²ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΠΎ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΠΎ.

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

Π—Π½Π°Ρ‡ΠΈ, ΠΏΠΎΠΌΠΈΠ½Π°Π²ΠΌΠ΅ Π΅Π΄Π΅Π½ циклус Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Ρ€Π΅ΡˆΠ°Ρ‚. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π° Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°:

  • ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°;
  • Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π³ΠΎ процСсот Π½Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ СдноставСн;
  • ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° процСсот Π½Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Ρ€Π°Π·Π²ΠΎΡ˜Π½Π° срСдина;
  • ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ процСсот Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚;
  • ΠΈΠΌΠ°Π°Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠΎΡ‚Π²Ρ€Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅;
  • Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ ΠΌΠΎΠ΄Π΅Π» Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со Π΄Ρ€ΠΆΠ°Π²Π°Ρ‚Π°;
  • Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π³ΠΈ доставитС ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π΄ΠΎ производство.

ΠžΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС смисли Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Ρ‚Π΅ΠΊ кој ќС Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ лСсно ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‚Π΅ со овој ΠΆΠΈΠ²ΠΎΡ‚Π΅Π½ циклус? Оваа ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° MLOps

MLOps, ΠΈΠ»ΠΈ DevOps Π·Π° машинско ΡƒΡ‡Π΅ΡšΠ΅, ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° Ρ‚ΠΈΠΌΠΎΠ²ΠΈΡ‚Π΅ Π·Π° Π½Π°ΡƒΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ ИВ Π΄Π° соработуваат ΠΈ Π΄Π° Π³ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠ°Ρ‚ Ρ‚Π΅ΠΌΠΏΠΎΡ‚ΠΎ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ ΠΈ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€Π΅ΠΊΡƒ слСдСњС, Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π° ΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π·Π° машинско ΡƒΡ‡Π΅ΡšΠ΅.

МоТСш ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Π¨Ρ‚ΠΎ мислат ΠΌΠΎΠΌΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Google Π·Π° сСто ΠΎΠ²Π°? Од написот Π΅ јасно Π΄Π΅ΠΊΠ° MLOps Π΅ доста ΠΎΠ±Π΅ΠΌΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

ΠŸΠΎΠ½Π°Ρ‚Π°ΠΌΡƒ Π²ΠΎ ΠΌΠΎΡ˜Π°Ρ‚Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС опишам само Π΄Π΅Π» ΠΎΠ΄ процСсот. Π—Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ќС ја користам Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° MLflow, бидСјќи ... Ова Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ ΠΌΠ°Π»Π° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΈΠΌΠ° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° со ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½ΠΈΡ‚Π΅ ΠΌΠ» Ρ€Π°ΠΌΠΊΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‚Π΅ Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Kubeflow, SageMaker, Trains ΠΈΡ‚Π½., Π° ΠΌΠΎΠΆΠ΅Π±ΠΈ ΠΈ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ нСкоја ΡˆΡ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ.

β€žΠ“Ρ€Π°Π΄Π΅ΡšΠ΅β€œ MLOps ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° MLFlow

MLFlow Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈΠΎΡ‚ циклус Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ ml (https://mlflow.org/).

MLflow Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ:

  • MLflow Tracking - Π³ΠΈ ΠΎΠΏΡ„Π°ΡœΠ° ΠΏΡ€Π°ΡˆΠ°ΡšΠ°Ρ‚Π° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΈ Π΄ΠΎΠ²Π΅Π΄ΠΎΠ° Π΄ΠΎ овој Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚;
  • MLflow Project - Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΏΠ°ΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π³ΠΎ Ρ€Π΅ΠΏΡ€ΠΎΠ΄ΡƒΡ†ΠΈΡ€Π°Ρ‚Π΅ Π½Π° која Π±ΠΈΠ»ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°;
  • MLflow Models - ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎ производство;
  • MLflow Registry - Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° складиратС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‚Π΅ со Π½ΠΈΠ²Π½Π°Ρ‚Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π²ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅.

MLflow Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π΄Π²Π° Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π°:

  • Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π΅ цСлосСн циклус Π½Π° ΠΎΠ±ΡƒΠΊΠ°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° со ΠΊΠΎΠΈ сакамС Π΄Π° сС рСгистрирамС;
  • ЕкспСримСнтот Π΅ β€žΡ‚Π΅ΠΌΠ°β€œ ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ.

Π‘ΠΈΡ‚Π΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм Ubuntu 18.04.

1. РаспорСдСтС Π³ΠΎ сСрвСрот

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ лСсно Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΠΌΠ΅ со Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π΄Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ќС распорСдимС сСрвСр. Π‘Π΅Ρ€Π²Π΅Ρ€ΠΎΡ‚ Π·Π° слСдСњС MLflow ΠΈΠΌΠ° Π΄Π²Π΅ Π³Π»Π°Π²Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ:

  • backend ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π° - ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° рСгистрирани ΠΌΠΎΠ΄Π΅Π»ΠΈ (ΠΏΠΎΠ΄Ρ€ΠΆΡƒΠ²Π° 4 DBMS: mysql, mssql, sqlite ΠΈ postgresql);
  • ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π° Π·Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ - ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ (ΠΏΠΎΠ΄Ρ€ΠΆΡƒΠ²Π° 7 ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP сСрвСр, SFTP Server, 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

Π—Π° Π΄Π° Π³ΠΎ стартуватС сСрвСрот, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ инсталиратС слСднитС python ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ посСбна Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° срСдина):

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. MlflowClient (Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² Π·Π° погодност), со Ρ‡ΠΈΡ˜Π° помош ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌ СкспСримСнт ΠΈ Π³ΠΎ стартувам Π½Π° сСрвСрот. Π‘Π»Π΅Π΄Π½ΠΎ, ΡƒΠΊΠ°ΠΆΡƒΠ²Π°ΠΌ ΠΊΠ°Π΄Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΡΠΏΠΎΡ˜Π°Ρ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ (mlflow.set_tracking_uri(self.tracking_uri)). ΠžΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΠΌ автоматско Π΅Π²ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ€Π°ΡšΠ΅ mlflow.keras.autolog(). Π’ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², MLflow Tracking ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° автоматско Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π·Π° 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}"

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ MLflow ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π°:

  • ИмС - ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚;
  • Π–ΠΈΠ²ΠΎΡ‚Π½Π° срСдина - Π²ΠΎ ΠΌΠΎΡ˜ΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, conda_env ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° Anaconda сС користи Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ ΠΈ описот Π½Π° зависност Π΅ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 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

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС docker ΠΊΠ°ΠΊΠΎ ΠΎΠΏΠΊΡ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅, Π·Π° повСќС Π΄Π΅Ρ‚Π°Π»ΠΈ Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°.

4. Π”Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ Π΄Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€Π°ΠΌΠ΅

Π“ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΈ ΠΎΠ΄ΠΈΠΌΠ΅ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚:

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 .

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС ја внСсСтС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, автоматски ќС сС создадС срСдина Π½Π° conda ΠΈ ќС Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΎΠ±ΡƒΠΊΠ°Ρ‚Π°.
Π’ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ΠΏΠΎΠ³ΠΎΡ€Π΅, Π³ΠΎ ΠΏΠΎΠΌΠΈΠ½Π°Π² Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π΅ΠΏΠΎΡ…ΠΈ Π·Π° ΠΎΠ±ΡƒΠΊΠ°, ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π²ΠΎ ΠΊΠΎΠΈ сакамС Π΄Π° сС сСгмСнтирамС (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја Π²ΠΈΠ΄ΠΈΡ‚Π΅ цСлосната листа Ρ‚ΡƒΠΊΠ°) ΠΈ адрСсата Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ далСчински сСрвСр.
ΠšΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π° листа Π½Π° ΠΌΠΎΠΆΠ½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС најдС Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° MLproject.

5. ΠžΡ†Π΅Π½Π΅Ρ‚Π΅ Π³ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΡƒΡ‡Π΅ΡšΠ΅Ρ‚ΠΎ

По Π·Π°Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ±ΡƒΠΊΠ°Ρ‚Π°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΎΠ΄ΠΈΠΌΠ΅ Π²ΠΎ прСлистувачот Π½Π° адрСсата Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ сСрвСр http://server_host:server_port

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

ОвдС Π³Π»Π΅Π΄Π°ΠΌΠ΅ список Π½Π° ситС СкспСримСнти (Π³ΠΎΡ€Π΅ Π»Π΅Π²ΠΎ), ΠΊΠ°ΠΊΠΎ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° бСгствата (срСдина). МоТСмС Π΄Π° Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°, Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΈ Π½Π΅ΠΊΠΎΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ) Π·Π° сСкоС Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅.

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

Π—Π° сСкоја ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја Π½Π°Π±Ρ™ΡƒΠ΄ΡƒΠ²Π°ΠΌΠ΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

ОниС. Π’ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π²ΠΎ β€žΡ€Π°Ρ‡Π΅Π½β€œ Ρ€Π΅ΠΆΠΈΠΌ, Π° исто Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС автоматска Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π° со помош Π½Π° MLflow API.

6. Π Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚

ΠžΡ‚ΠΊΠ°ΠΊΠΎ Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π²ΠΌΠ΅ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π» ΠΈ ΠΎΠ΄Π»ΡƒΡ‡ΠΈΠ²ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π·Π° Π±ΠΈΡ‚ΠΊΠ°, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π°ΠΌΠ΅ Π΄Π° Π³ΠΎ рСгистрирамС, Π·Π° ΠΎΠ²Π° Π³ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΡˆΡ‚ΠΎ Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° (ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ Π²ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΠΎΡ‚ пасус) ΠΈ слСзСмС.

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС ΠΌΡƒ Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΈΠΌΠ΅ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π», Ρ‚ΠΎΡ˜ ΠΈΠΌΠ° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. Ако Π·Π°Ρ‡ΡƒΠ²Π°Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ ΠΌΠΎΠ΄Π΅Π» со исто ΠΈΠΌΠ΅, Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° автоматски ќС сС Π½Π°Π΄Π³Ρ€Π°Π΄ΠΈ.

MLOps - Книга Π·Π° Π³ΠΎΡ‚Π²Π΅ΡšΠ΅, поглавјС 1

Π—Π° сСкој ΠΌΠΎΠ΄Π΅Π», ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ опис ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΠ΄ Ρ‚Ρ€ΠΈΡ‚Π΅ ΡΠΎΡΡ‚ΠΎΡ˜Π±ΠΈ (Staging, Production, Archived); послСдоватСлно, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ 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) лСсно ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ ΠΈ Π΄Π° ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°Π°Ρ‚ Π½ΠΎΠ²ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ.

Π’ΠΎ Π·Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚ΠΈΡ€Π°Π² систСм кој ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°:

  • Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ML ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€Π΅Π΄ΠΎΠΊΠΎΡ‚ Π²ΠΎ ΠΎΠ±ΡƒΠΊΠ°Ρ‚Π° ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅;
  • Π±Ρ€Π·ΠΎ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜Π½Π° срСдина;
  • Π³ΠΎ слСди ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° Π½Π°ΠΏΡ€Π΅Π΄ΠΎΠΊΠΎΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅;
  • ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° сС Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΈ Π΄Π° сС ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° со ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅;
  • ЛСсно Π΅ Π΄Π° сС распорСдат Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ ΠΈΠ³Ρ€Π°Ρ‡ΠΊΠ° ΠΈ слуТи ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡ‡Π΅Ρ‚Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ сопствСн систСм, кој ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΅Π²Π°Π»ΡƒΠ°Ρ†ΠΈΡ˜Π° Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ (Ρ‚ΠΎΡ‡ΠΊΠΈ 5 ΠΈ 6, соодвСтно) ΠΈΠ»ΠΈ ќС Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° сСтови Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ΡˆΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ? ΠŸΠΎΠ΅Π½Ρ‚Π°Ρ‚Π° ΡˆΡ‚ΠΎ сС ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° ја ΠΊΠ°ΠΆΠ°ΠΌ Π΅ Π΄Π΅ΠΊΠ° Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ MLOps ΠΊΠ°ΠΊΠΎ Ρ†Π΅Π»ΠΈΠ½Π°, MLflow Π΅ само срСдство Π·Π° ΠΏΠΎΡΡ‚ΠΈΠ³Π½ΡƒΠ²Π°ΡšΠ΅ Ρ†Π΅Π».

Напиши со ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π°ΠΈΠ΄ΠΎΠ²Ρ‚Π΅ ΡˆΡ‚ΠΎ Π½Π΅ Π³ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π²?
Π¨Ρ‚ΠΎ Π±ΠΈ Π΄ΠΎΠ΄Π°Π»Π΅ Π²ΠΎ систСмот Π·Π° Π΄Π° Π³ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ?
Кои Π°Π»Π°Ρ‚ΠΊΠΈ ΠΈ пристапи Π³ΠΈ користитС Π·Π° Π΄Π° Π³ΠΈ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ситС ΠΈΠ»ΠΈ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅?

П.Π‘ ќС оставам Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈ:
ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ github - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
ΠœΠΎΡ˜Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° Π΅-ΠΏΠΎΡˆΡ‚Π° Π·Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ° - [Π·Π°ΡˆΡ‚ΠΈΡ‚Π΅Π½Π° ΠΏΠΎ Π΅-ΠΏΠΎΡˆΡ‚Π°]

ΠΠ°ΡˆΠ°Ρ‚Π° компанија ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π΅ домаќин Π½Π° Ρ€Π°Π·Π½ΠΈ настани Π·Π° ИВ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»ΠΈΡΡ‚ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π½Π° 8 Ρ˜ΡƒΠ»ΠΈ Π²ΠΎ 19:00 часот ΠΏΠΎ московско Π²Ρ€Π΅ΠΌΠ΅ ќС ΠΈΠΌΠ° состанок Π·Π° CV Π²ΠΎ онлајн Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ стС заинтСрСсирани, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° учСствуватС, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° Ρ‚ΡƒΠΊΠ° .

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€