MLOps β€” Книга с Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, Π³Π»Π°Π²Π° 1

MLOps β€” Книга с Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, Π³Π»Π°Π²Π° 1

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички! Аз съм CV-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π² КРОК. Π’Π΅Ρ‡Π΅ Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² областта Π½Π° CV. ΠŸΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ смС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π»ΠΈ Π½Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: наблюдавали ΡˆΠΎΡ„ΡŒΠΎΡ€ΠΈ, Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡˆΠΎΡ„ΠΈΡ€Π°Π½Π΅ Π½Π΅ пият, Π½Π΅ ΠΏΡƒΡˆΠ°Ρ‚, Π½Π΅ говорят ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, Π° Π³Π»Π΅Π΄Π°Ρ‚ Π½Π° ΠΏΡŠΡ‚Ρ, Π° Π½Π΅ Π½Π° ΡΡŠΠ½ΠΈΡ‰Π°Ρ‚Π° ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°Ρ†ΠΈΡ‚Π΅; фиксирали смС Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈ Π½Π° ΡˆΠΎΡ„ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ спСциализирани Π»Π΅Π½Ρ‚ΠΈ ΠΈ Π·Π°Π΅ΠΌΠ°Ρ‰ΠΈ няколко мСста Π½Π° ΠΏΠ°Ρ€ΠΊΠΈΠ½Π³Π°; слСдСли смС Π·Π° Ρ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° носят каски, Ρ€ΡŠΠΊΠ°Π²ΠΈΡ†ΠΈ ΠΈ Ρ‚.Π½.; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π»ΠΈ смС слуТитСл, ΠΊΠΎΠΉΡ‚ΠΎ иска Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΠΎΠ±Π΅ΠΊΡ‚Π°; ΠΏΡ€Π΅Π±Ρ€ΠΎΠΈΠ»ΠΈ смС всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ възмоТно.

И Π·Π°Ρ‰ΠΎ Ρ‚ΠΎΠ²Π° ΠΊΠ°Π·Π²Π°ΠΌ?

Π’ процСса Π½Π° рСализация Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ…ΠΌΠ΅ ΠΎΠΏΠΈΡ‚, ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡ‚, с част ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π²ΠΈΠ΅ ΠΈΠ»ΠΈ стС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ, ΠΈΠ»ΠΈ Ρ‰Π΅ сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅.

ΠœΠΎΠ΄Π΅Π»ΠΈΡ€Π°ΠΌΠ΅ ситуация

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ смС Π² ΠΌΠ»Π°Π΄Π° компания "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 Π·Π° машинно ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, позволява Π½Π° Π΅ΠΊΠΈΠΏΠΈΡ‚Π΅ ΠΎΡ‚ спСциалисти ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ИВ спСциалисти Π΄Π° си ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡Π°Ρ‚, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Ρ‚Π΅ΠΌΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‡Ρ€Π΅Π· ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° машинно ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠ²ΠΎ мислят ΠΏΠΎ всичко Ρ‚ΠΎΠ²Π° Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΎΡ‚ Google. ΠžΡ‚ статията Π΅ ясно, Ρ‡Π΅ MLOps Π΅ доста ΠΎΠ±Π΅ΠΌΠ½Π° Ρ‚Π΅ΠΌΠ°.

MLOps β€” Книга с Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, Π³Π»Π°Π²Π° 1

Π’ слСдващата си статия Ρ‰Π΅ опиша само част ΠΎΡ‚ процСса. Π—Π° рСализацията Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ инструмСнта MLflow, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ open-source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠ°Π»ΠΊΠΎ количСство ΠΊΠΎΠ΄ ΠΈ ΠΈΠΌΠ° интСграция с популярни ml-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти, ΠΊΠ°Ρ‚ΠΎ 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 tracking server ΠΈΠΌΠ° Π΄Π²Π° основни ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

  • backend store β€” отговаря Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° информацията Π·Π° рСгистриранитС ΠΌΠΎΠ΄Π΅Π»ΠΈ (ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° 4 Π‘Π£Π‘Π”: mysql, mssql, sqlite ΠΈ postgresql);
  • artifact store β€” отговаря Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ (ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° 7 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP ΡΡŠΡ€Π²ΡŠΡ€, SFTP ΡΡŠΡ€Π²ΡŠΡ€, NFS, HDFS).

ΠšΠ°Ρ‚ΠΎ artifact store Π·Π° простота Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ 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

ΠšΠ°Ρ‚ΠΎ backend store Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ 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
# Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ² ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»: mlflow_user
[postgres@user_name~]$ createuser --interactive -P
Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ролята, която искатС Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅: mlflow_user
Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π·Π° Π½ΠΎΠ²Π°Ρ‚Π° роля: mlflow
Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ я ΠΎΡ‚Π½ΠΎΠ²ΠΎ: mlflow
Врябва Π»ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° роля Π΄Π° бъдС супСрпотрСбитСл? (y/n) n
Врябва Π»ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° роля Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° създава Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ? (y/n) n
Врябва Π»ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° роля Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° създава Π½ΠΎΠ²ΠΈ Ρ€ΠΎΠ»ΠΈ? (y/n) n
# Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ mlflow_bd, ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π°Π½Π° ΠΎΡ‚ 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 Π½Π° Keras Π·Π° сСгмСнтация Π½Π° всичко Π² COCO датасСт. Π—Π° добавянС Π½Π° слСдСнСто, ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ… Ρ„Π°ΠΉΠ» mlflow_training.py.

Π•Ρ‚ΠΎ Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅, Π² ΠΊΠΎΠΈΡ‚ΠΎ сС случва Π½Π°ΠΉ-интСрСсното:

def run(self, epochs, lr, experiment_name):
        # ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° id Π½Π° СкспСримСнта, създаванС Π½Π° СкспСримСнт Π² Π½Π΅Π³ΠΎΠ²ΠΎ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅
        remote_experiment_id = self.remote_server.get_experiment_id(name=experiment_name)
        # създаванС Π½Π° "run" ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ id
        remote_run_id = self.remote_server.get_run_id(remote_experiment_id)

        # ΡƒΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ искамС Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€
        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 Tracking ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π»ΠΎΠ³Π²Π°Π½Π΅ Π·Π° TensorFlow, Keras, Gluon XGBoost, LightGBM ΠΈ Spark. Ако Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ своя Ρ„Ρ€Π΅ΠΉΠΌΡƒΡŠΡ€ΠΊ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° Π»ΠΎΠ³Π²Π°Ρ‚Π΅ явно. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. РСгистрирамС Ρ‚Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° отдалСчСния ΡΡŠΡ€Π²ΡŠΡ€.

Няколко Ρ€Π΅Π΄Π° ΠΈ Π²ΠΈΠ΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ всички ΠΆΠ΅Π»Π°Π΅Ρ‰ΠΈ, ΠΈΠΌΠ°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ информация Π·Π° всички стартирания. Π―ΠΊΠΎ, Π½Π°Π»ΠΈ?

3. ΠžΡ„ΠΎΡ€ΠΌΡΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π‘Π΅Π³Π° Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ стартиранСто Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄Π° Π΅ ΠΏΠΎ-лСсно ΠΎΡ‚ всякога. Π—Π° Ρ†Π΅Π»Ρ‚Π° Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„Π°ΠΉΠ» MLproject ΠΈ conda.yaml Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
MLproject

name: flow_segmentation
conda_env: conda.yaml

entry_points:
  main:
    parameters:
        categories: {help: 'списък с ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΎΡ‚ coco dataset'}
        epochs: {type: int, help: 'Π±Ρ€ΠΎΠΉ Π΅ΠΏΠΎΡ…ΠΈ Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ'}

        lr: {type: float, default: 0.001, help: 'скорост Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅'}
        batch_size: {type: int, default: 8}
        model_name: {type: str, default: 'Unet', help: 'Unet, PSPNet, Linknet, FPN'}
        backbone_name: {type: str, default: 'resnet18', help: 'Π½Π°ΠΏΡ€. resnet18, resnet50, mobilenetv2 ...'}

        tracking_uri: {type: str, help: 'адрСса Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°'}
        experiment_name: {type: str, default: 'My_experiment', help: 'ΠΈΠΌΠ΅ Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΠΈ Π»ΠΎΠΊΠ°Π»Π΅Π½ СкспСримСнт'}
    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 Project ΠΈΠΌΠ° няколко свойства:

  • Name β€” ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° вашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚;
  • Environment β€” Π² моя случай conda_env ΡƒΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π·Π° стартиранС сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Anaconda ΠΈ описаниСто Π½Π° зависимоститС сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° във Ρ„Π°ΠΉΠ»Π° conda.yaml;
  • Entry Points β€” ΡƒΠΊΠ°Π·Π²Π° ΠΊΠΎΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ с ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стартирамС (всички ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС Π»ΠΎΠ³Π²Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ)

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. Π”Π΅ΠΏΠ»ΠΎΠΉΠ²Π°ΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»Π°

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π²Π΅Ρ‡Π΅ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ с ΠΎΠ±ΡƒΡ‡Π΅Π½ (keras) ΠΌΠΎΠ΄Π΅Π». ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅:

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 Π΅ просто срСдство Π·Π° постиганС Π½Π° Ρ†Π΅Π»Ρ‚Π°.

ΠΠ°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, с ΠΊΠΎΠΈΡ‚ΠΎ стС сС сблъсквали, Π½Π΅ съм ΠΎΡ‚Ρ€Π°Π·ΠΈΠ»?
Какво Π±ΠΈΡ…Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² систСмата, Π·Π° Π΄Π° ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‚Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ?
Какви инструмСнти ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, Π·Π° Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ всички ΠΈΠ»ΠΈ част ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅?

P.S. ΠžΡΡ‚Π°Π²ΡΠΌ няколко Π»ΠΈΠ½ΠΊΠ°:
github ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” https://github.com/simbakot/mlflow_example
MLflow β€” https://mlflow.org/
Моя Ρ€Π°Π±ΠΎΡ‚Π½Π° ΠΏΠΎΡ‰Π° Π·Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈ β€” ikryakin@croc.ru

Π’ Π½Π°ΡˆΠ°Ρ‚Π° компания ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ сС ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π·Π° ИВ спСциалисСти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π½Π° 8 юли Π² 19:00 ΠΏΠΎ московско Π²Ρ€Π΅ΠΌΠ΅ Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΌΠΈΡ‚Π°ΠΏ относно CV, Π°ΠΊΠΎ стС заинтСрСсувани, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° участватС, рСгистрацията Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π°. Ρ‚ΡƒΠΊ. .

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster