Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Компания располагаСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ on-premises инфраструктурой (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ сСрвСра Π±Π΅Π· использования ΠΎΠ±Π»Π°ΠΊΠ°) ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ процСссы MLOps. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ условия: Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с API S3, для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ обучСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ кластСр Apache Spark, основной язык Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ML β€” Python.

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкста, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅, Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ‚.Π΄.), ΠΈ ΡƒΠΆΠ΅ сСйчас Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ слоТности с эксплуатациСй ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. НСобходимо ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ MLOps, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ эти трудности ΠΈ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ:

  • Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ (deployment): Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ срСду, ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² прилоТСния.

  • ВСрсионированиС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…: ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ вСрсии ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ экспСримСнтов ΠΈ соотвСтствиС вСрсий Π΄Π°Π½Π½Ρ‹Ρ… вСрсиям ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

  • Π”ΠΎΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (retraining): Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π° Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ качСства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π΄Ρ€Π΅ΠΉΡ„Π΅ Π΄Π°Π½Π½Ρ‹Ρ…).

  • Автоматизация ML-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²: Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ (pipelines) для автоматичСского выполнСния всСх этапов ML – ΠΎΡ‚ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ дСплоя ΠΌΠΎΠ΄Π΅Π»ΠΈ.

  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, тСстированиС ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ качСства ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ: ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π΄Ρ€Π΅ΠΉΡ„ Π΄Π°Π½Π½Ρ‹Ρ…/ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ качСство Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ прСдсказаний.

  • Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с CI/CD: ΠΏΡ€ΠΈ нСобходимости Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ поставки ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ CI/CD, Ρ‡Ρ‚ΠΎΠ±Ρ‹ обновлСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· автоматичСскиС тСсты ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ.

Π”Π°Π»Π΅Π΅ прСдставлСн ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² MLOps для on-prem Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π°Π½Π°Π»ΠΈΠ· подходящих инструмСнтов (open-source ΠΈ enterprise), сравнСниС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² с рСкомСндациями, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ сводная Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

АрхитСктурныС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ MLOps для on-prem

ВыстраиваниС MLOps Π½Π° локальной инфраструктурС ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ особСнностями: ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ сСрвисы (SageMaker, Azure ML ΠΈ ΠΏΡ€.), Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ инструмСнтами ΠΈ срСдой. НиТС рассмотрСны ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подходят для on-prem MLOps:

  • Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ процСсс : БущСствуСт градация ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ зрСлости MLOps:

    • Level 0 – Ρ€ΡƒΡ‡Π½ΠΎΠΉ, нСсистСматизированный процСсс, Π³Π΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ±ΡƒΡ‡Π°Π΅Ρ‚ модСль ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‘ скриптами​. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌ Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ для Ρ€Π΅Π΄ΠΊΠΈΡ… Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ, ΠΌΠΎΠ΄Π΅Π»ΠΈ быстро Β«ΡΡ‚Π°Ρ€Π΅ΡŽΡ‚Β» ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ частого Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ обслуТивания​.

    • Level 1 – Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ML-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€: вмСсто Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ развёртывания ΠΌΠΎΠ΄Π΅Π»ΠΈ, разворачиваСтся Ρ†Π΅Π»Ρ‹ΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ обучСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ рСгулярно Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ для обновлСния модСли​.

    • Level 2 – CI/CD для ML: ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ доставки ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ автоматичСскоС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ (continuous training) ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Π° модСли​.

  • ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° vs. ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Β«ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡Β»: Π’ on-prem срСдС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ – ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ свою MLOps-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (open-source инструмСнтов) ΠΈΠ»ΠΈ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ enterprise-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. БобствСнная сборка Π΄Π°Ρ‘Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ², позволяя ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ инструмСнты ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ этап ML-процСсса. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия экспСртизы ΠΈ рСсурсов для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

    Готовая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° (Β«black boxΒ») сниТаСт Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ – ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ коммСрчСскиС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚ΠΈΠΏΠ° DataRobot, Domino Data Lab etc., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ on-prem​. Однако Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ кастомизации ΠΈ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½ΠΈΡ… Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ модули​. РСшСниС ΠΎΠ± Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ограничСния ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ: Π² нашСм случаС ΡƒΠΏΠΎΡ€ дСлаСтся Π½Π° open-source (для гибкости ΠΈ экономии), с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ enterprise-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ нСобходимости.

  • ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° для ML: Один ΠΈΠ· ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² – дСкомпозиция ML-систСмы Π½Π° микросСрвисы. Π’ частности, сами ML-ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ stateless-сСрвисы (каТдая модСль – Π² собствСнном Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСзависимо​. Π”Π°Π½Π½Ρ‹Π΅ для обучСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСрвисами/Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ: Π½ΠΎΠ²Ρ‹Π΅ вСрсии ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ сСрвис, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Ρ€Π΅ΠΉΠΊΡƒ ΠΈΠ»ΠΈ A/B тСстированиС, Π° pipeline ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ связанных сСрвисов. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½ΠΈΠΆΠ΅ сСрвисы Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… (FastAPI + Uvicorn + Nginx) ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ динамичСски ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

  • Π•Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π΄Π°Π½Π½Ρ‹Ρ… (Data Lake/Lakehouse): Для обСспСчСния вСрсионирования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌΠΎΠ³ΠΎ обучСния Π½Π° on-prem Π²Π°ΠΆΠ½ΠΎ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ S3-совмСстимоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ – фактичСски, это Data Lake. ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Lakehouse ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ уровня управлСния вСрсиями ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ… Data Lake. Open-source Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ – Delta Lake – Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° S3/HDFS с ACID-гарантиями ΠΈ запросами Ρ‚ΠΈΠΏΠ° Time Travel. Аналоги – Apache Hudi, Apache Iceberg. ИспользованиС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ датасСты с ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ вСрсий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, датасСт, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½Π° вСрсия ΠΌΠΎΠ΄Π΅Π»ΠΈ v1.2, сохраняСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ вСрсия Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹). Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ обучСния ΠΈ отслСТивания, Π½Π° ΠΊΠ°ΠΊΠΈΡ… ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° каТдая модСль.

  • Feature Store: Если компания ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ (features) ΠΌΠ΅ΠΆΠ΄Ρƒ модСлями ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒδΈ€Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈ инфСрСнсС, стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Feature Store. Π­Ρ‚ΠΎ спСциализированноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ рассчитанныС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ΠΊΠ°ΠΊ для ΠΎΡ„Π»Π°ΠΉΠ½-Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‚Π°ΠΊ ΠΈ для ΠΎΠ½Π»Π°ΠΉΠ½-инфСрСнса с Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ. Π’ on-prem условиях доступны open-source Feast ΠΈΠ»ΠΈ коммСрчСскиС Hopsworks. Feature Store вписываСтся Π² MLOps-процСсс: Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ, ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Π±Π΅Ρ€ΡƒΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ΠΈΠ· ΠΎΡ„Π»Π°ΠΉΠ½ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π° ΠΏΡ€ΠΈ обслуТивании – ΠΈΠ· ΠΎΠ½Π»Π°ΠΉΠ½ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, обСспСчивая отсутствиС рассинхрона. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ особСнно Π²Π°ΠΆΠ΅Π½ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с real-time модСлями (Ρ€Π΅ΠΊΠΎΠΌΠΌΠ΅Π½Π΄Π΅Ρ€Ρ‹, Π°Π½Ρ‚ΠΈΡ„Ρ€ΠΎΠ΄ ΠΈ Ρ‚.ΠΏ.), Π½ΠΎ ΠΈ для пСриодичСского обучСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ расчёт ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²).

  • ΠžΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈ автоматизация ML-процСссов: ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ MLOps – построСниС оркСстратора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ вСсь pipeline ML. ВмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ запуска скриптов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСма, которая ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ событии выполняСт шаги: сбор/ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, распрСдСлённо Π½Π° Spark), ΠΎΡ†Π΅Π½ΠΊΠ° качСства, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ рСгистрация ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Ρ‚.Π΄. Π’ on-prem срСдС ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами: ΠΎΡ‚ Unix cron ΠΈ скриптов Bash Π΄ΠΎ спСциализированных workflow-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ². Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΎΠΌ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ стали инструмСнты Ρ‚ΠΈΠΏΠ° Apache Airflow (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Π΅ Prefect, Dagster) для Π·Π°Π΄Π°Ρ‡ планирования batch-Π·Π°Π΄Π°Ρ‡, Π° Ρ‚Π°ΠΊΠΆΠ΅ Kubernetes-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Kubeflow Pipelines ΠΈΠ»ΠΈ Apache Argo для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ML-процСссов. ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ оркСстрации позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ автоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ pipeline обучСния Ρ€Π°Π· Π² нСдСлю ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ поступлСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ….

  • CI/CD для ML (Continuous Integration/Continuous Delivery): Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с DevOps-процСссами – Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½. Код ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² хранится Π² систСмах контроля вСрсий (Git); ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ тСсты (Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ обучСния ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° нСбольшом ΠΎΠ±Ρ€Π°Π·Ρ†Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ). БистСма CI (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Jenkins, GitLab CI) ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с модСлью – ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² CD систСму. Continuous Delivery для ML ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии сСрвиса с модСлью ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, CI/CD для ML часто комбинируСтся с pipeline-оркСстрациСй: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ с ΠΊΠΎΠ΄ΠΎΠΌ ML-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΈΡ‚ Jenkins-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт workflow Π² Airflow/Kubeflow для обучСния ΠΈ Π·Π°Ρ‚Π΅ΠΌ автоматичСски Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΡƒΡŽΡΡ модСль. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ достигаСтся нСпрСрывная поставка ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½.

Подводя ΠΈΡ‚ΠΎΠ³, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для on-prem MLOps Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ этих ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ². ВСрсионированиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, автоматизация обучСния, микросСрвисноС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, постоянный ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ обратная связь – всС эти элСмСнты Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

ΠžΠ±Π·ΠΎΡ€ инструмСнтов MLOps (open-source ΠΈ enterprise)

Π‘ ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², рассмотрим ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ инструмСнты ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² on-prem инфраструктурС. Π‘ΡƒΠ΄ΡƒΡ‚ ΠΎΡ…Π²Π°Ρ‡Π΅Π½Ρ‹ open-source Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ экономичныС) ΠΈ упомянуты enterprise-Π°Π½Π°Π»ΠΎΠ³ΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это умСстно. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ сгруппированы ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ MLOps.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ экспСримСнтами ΠΈ рСгистрация ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

MLflow – популярная open-source ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для управлСния экспСримСнтами ΠΈ модСлями ΠΎΡ‚ Databricks. MLflow позволяСт Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ экспСримСнтов, ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ) ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ эти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π±-интСрфСйс. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Model Registry – Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ рССстр ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с вСрсионированиСм, статусами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, β€œStaging”, β€œProduction”) ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ними​. MLflow Π½Π΅ привязан ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ инфраструктурС – ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Python API ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π»ΡŽΠ±Ρ‹Ρ… срСдах (локально, Π½Π° кластСрС ΠΈ Ρ‚.Π΄.)​. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Π΄Π°Ρ‚Π°-сайСнтистов: достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько строк Π² ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ экспСримСнта. Π’ нашСм on-prem контСкстС MLflow Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ: Π΅Π³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ†Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ S3-Π±Π°ΠΊΠ΅Ρ‚ (совмСстим с S3) для сохранСния Ρ„Π°ΠΉΠ»ΠΎΠ², Π° сам Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³-сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PostgreSQL) для ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ»ΡŽΡΡ‹ MLflow: простота развёртывания, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ сообщСство, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со Spark (Π΅ΡΡ‚ΡŒ интСграция для автологирования ΠΈΠ· Spark MLlib) ΠΈ Π»ΡŽΠ±Ρ‹ΠΌΠΈ ML-фрСймворками​. ΠœΠΈΠ½ΡƒΡΡ‹: MLflow фокусируСтся Π½Π° отслСТивании ΠΈ рСгистрС; ΠΎΠ½ Π½Π΅ обСспСчиваСт ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… срСдств оркСстрации ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° – эти возмоТности Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π² области экспСримСнт-Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π°: Apache Atlas (для ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΠΎΠ»Π΅Π΅ слоТСн), Neptune.ai, Comet ML, Weights & Biases. ПослСдниС Π΄Π²Π° – ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ сСрвисы, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈ on-prem edition (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, W&B ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ локально). Однако, Ρƒ Π½ΠΈΡ… коммСрчСская модСль. Из ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ open-source Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ DVC Studio (интСрфСйс Π½Π°Π΄ DVC) ΠΈΠ»ΠΈ лСгковСсныС Aim, Sacred. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, MLflow Π² настоящСС врСмя Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ стандарт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ инструмСнтария для ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π°, поэтому рСкомСндация – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ MLflow ΠΊΠ°ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для вСрсионирования ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ хранСния ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ экспСримСнтов.

ВСрсионированиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Feature Store

ВСрсионированиС Π΄Π°Π½Π½Ρ‹Ρ… ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈ вСрсионированиС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Одно ΠΈΠ· простых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ – Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΠΈ датасСтов ΠΈΠ»ΠΈ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° нСизмСняСмыС ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² Data Lake. Но систСмный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ инструмСнтов:

DVC (Data Version Control) – это инструмСнт с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ Git для вСрсионирования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. DVC позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ большиС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сырыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, вСса ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ) Π±Π΅Π· хранСния ΠΈΡ… нСпосрСдствСнно Π² Git. Π€Π°ΠΉΠ»Ρ‹ хранятся Π²ΠΎ внСшнСм Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ – ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΏΠΊΠΈ, S3-Π±Π°ΠΊΠ΅Ρ‚Ρ‹, HDFS ΠΈ Ρ‚.Π΄. – Π° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ хранится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Π΅Ρˆ ΠΈ ссылка. DVC ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»Π΅Π½ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ интСгрируСтся с S3 (ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ remote-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ S3 совмСстимый сСрвис) ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ вСрсионированиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠ»ΡŽΡΡ‹ DVC: использованиС Π·Π½Π°ΠΊΠΎΠΌΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ Git, Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ экспСримСнтов (каТдая комбинация вСрсий ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… – ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ экспСримСнт), Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния ML-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Ρ‡Π΅Ρ€Π΅Π· DVC.yaml (Ρ…Ρ€Π°Π½ΠΈΡ‚ зависимости этапов) ΠΈ Π΄Π°ΠΆΠ΅ запуска экспСримСнтов Π½Π° CI. ΠœΠΈΠ½ΡƒΡΡ‹: трСбуСтся дисциплина Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, для ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ (Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°ΠΌΠΈ), Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ оркСстрации ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с спСциализированными workflow-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, DVC ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ простым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ этапа – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вСрсии датасСта Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DVC, Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² MLflow.

Delta Lake – ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, это Π΄Π²ΠΈΠΆΠΎΠΊ хранСния ΠΏΠΎΠ²Π΅Ρ€Ρ… Parquet-Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° S3/HDFS, Π΄Π°ΡŽΡ‰ΠΈΠΉ ACID-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ вСрсионированиС (Time Travel). Delta Lake особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со Spark: ΠΎΠ½ интСгрируСтся Π² экосистСму Spark SQL. Π’ on-prem сцСнарии, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ кластСр Spark, ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ датасСты обучСния ΠΊΠ°ΠΊ Delta-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² S3. Π­Ρ‚ΠΎ даст Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ вСрсии ΠΈΠ»ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ AWS, Delta Lake – ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ соврСмСнных data-lake Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ Π½Π° S3 ΠΈΠ»ΠΈ HDFS​. ΠŸΠ»ΡŽΡΡ‹: высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ (Π²Π°ΠΆΠ½Π° Ссли ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ΄Ρ‘Ρ‚ запись), ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ вСрсионированиС для Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ. ΠœΠΈΠ½ΡƒΡΡ‹: Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π°Π²Ρ‹ΠΊΠΈ Spark, для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π΅Π½, ΠΈ ΠΎΠ½ большС ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° batch-Π΄Π°Π½Π½Ρ‹Π΅ (Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Delta Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ слоТнСС).

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ DVC ΠΈ Delta Lake ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠ»ΠΎΠΆΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ: Ссли ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Spark для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, цСлСсообразно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ lakehouse-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (Delta/Hudi), вСрсионируя Π΄Π°Π½Π½Ρ‹Π΅ прямо Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Если ΠΆΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅ Spark, DVC + Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° S3 Ρ‚ΠΎΠΆΠ΅ Ρ€Π΅ΡˆΠΈΡ‚ Π·Π°Π΄Π°Ρ‡Ρƒ вСрсионирования. НС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΈ сочСтаниС: DVC для вСрсии сырого датасСта ΠΈ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ², Delta Π²Π½ΡƒΡ‚Ρ€ΠΈ Spark для ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΉ.

Feature Store: Когда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ срСди open-source являСтся Feast. Feast прСдоставляСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ рССстр ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², API для ΠΈΡ… получСния ΠΊΠ°ΠΊ Π² ΠΎΡ„Π»Π°ΠΉΠ½ (Batch), Ρ‚Π°ΠΊ ΠΈ Π² ΠΎΠ½Π»Π°ΠΉΠ½ (Stream/Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя). НапримСр, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Spark пСриодичСски Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ‚Ρ‹ ΠΈ Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Feast (Π² ΠΎΡ„Π»Π°ΠΉΠ½-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° S3 ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Redis, для ΠΎΠ½Π»Π°ΠΉΠ½-доступа). МодСль ΠΏΡ€ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· API Feast, Π° сСрвис ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ – Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ для Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, обСспСчивая Сдинство Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ Qwak ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Feast ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° feature management (ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌΠΈ) Π² составС стСков MLOps. ΠŸΠ»ΡŽΡΡ‹ Feast: Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ML, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ (S3, BigQuery, Redshift для ΠΎΡ„Π»Π°ΠΉΠ½; Redis, Cassandra для ΠΎΠ½Π»Π°ΠΉΠ½), интСграция с Python. ΠœΠΈΠ½ΡƒΡΡ‹: сам ΠΏΠΎ сСбС Feast – это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфраструктурный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сСрвис ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ DB), Π΅Π³ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ, Ссли Π΅ΡΡ‚ΡŒ мноТСство ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄. Enterprise-Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹: Hopsworks Feature Store (Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», Π½ΠΎ частично коммСрчСский), Tecton (ΠΎΠ±Π»Π°ΠΊΠΎ). Для Π½Π°Ρ‡Π°Π»Π° MLOps, ΠΊΠΎΠ³Π΄Π° число ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΎ, Feature Store ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ; ΠΎΠ΄Π½Π°ΠΊΠΎ, Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ появлСния Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.

ΠžΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡ ML-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² ΠΈ автоматизация обучСния

Apache Airflow – ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ оркСстратор Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ DAG (Directed Acyclic Graph) – ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python-ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρƒ. Π’ контСкстС MLOps Airflow ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс обновлСния ΠΌΠΎΠ΄Π΅Π»ΠΈ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DAG, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ шаги Β«Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· S3 β†’ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Spark-Π·Π°Π΄Π°Ρ‡Ρƒ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ„ΠΈΡ‡Π΅ΠΉ β†’ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ скрипт (Python) β†’ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ β†’ Ссли ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΎΠΊ, Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ модСль Π² MLflow β†’ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ…Β». Airflow Π½Π΅ привязан ΠΊ ΠΎΠ±Π»Π°ΠΊΡƒ ΠΈ прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ on-prem; ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с S3 (Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ boto3 ΠΈΠ»ΠΈ собствСнный S3Hook), Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Spark (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ SparkSubmitOperator для Yarn-кластСра Π»ΠΈΠ±ΠΎ DataprocHook для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ со Spark-кластСром). ΠŸΠ»ΡŽΡΡ‹ Airflow: провСрСнная Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ систСма, большоС число Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… систСм (S3, HDFS, Spark, SQL ΠΈ ΠΏΡ€.), Π²Π΅Π±-интСрфСйс для управлСния Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, расписаниС. ΠœΠΈΠ½ΡƒΡΡ‹: Airflow ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° batch-процСссы ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для рСагирования Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; настройка ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° кластСра Airflow Ρ‚ΠΎΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ усилий; для чисто ML-Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ спСциализированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅Ρ‚ встроСнного Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π° экспСримСнтов – Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с MLflow). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ автоматичСского обучСния Ρ€Π°Π· Π² N Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Airflow – ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€.

Kubeflow Pipelines – Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для оркСстрации ML, рассчитанноС Π½Π° Kubernetes-кластСры. Kubeflow – это Ρ†Π΅Π»Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для ML Π½Π° K8s: ΠΎΡ‚ запуска Jupyter Notebook Π΄ΠΎ сСрвисов для TFjobs/PyTorch jobs. Π’ частности, Pipelines ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ML-процСсс ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ (Pipeline DSL Π½Π° Python) ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ шаги ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π² Kubernetes. Kubeflow Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли компания ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Kubernetes для развСртывания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ – Ρ‚ΠΎΠ³Π΄Π° pipeline шаги (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅) Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Kubeflow Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Katib (автоматизация гипСрпарамСтричСского поиска) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с S3 (часто Ρ‡Π΅Ρ€Π΅Π· MinIO – open-source Π°Π½Π°Π»ΠΎΠ³ S3 – Π²Π½ΡƒΡ‚Ρ€ΠΈ кластСра). ΠŸΠ»ΡŽΡΡ‹ Kubeflow: прСдоставляСт сквозной ML-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ – ΠΎΡ‚ экспСримСнтирования Π΄ΠΎ дСплоя – Π² Ρ€Π°ΠΌΠΊΠ°Ρ… K8s. Он ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ вСрсии ΠΈ отслСТиваниС (Ρ‡Π΅Ρ€Π΅Π· Metadata), ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π΄Π°ΠΆΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ KFServing/KServe)​. ΠœΠΈΠ½ΡƒΡΡ‹: ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ внСдрСния – трСбуСтся Kubernetes, настройка ΠΌΠ½ΠΎΠ³ΠΈΡ… сСрвисов; ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… с K8s; ограничСнная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π²Π½Π΅ K8s. Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ ΠΎΠ±Π·ΠΎΡ€Ρ‹, Kubeflow ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ для ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… ML-систСм Π½Π° Kubernetes, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ MLflow Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ экспСримСнтов​. Π’ нашСм случаС, Ссли Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Kubernetes on-prem нСслоТно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· k8s-кластСр ΠΈΠ»ΠΈ OpenShift), Kubeflow ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ядром MLOps-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Но для Π½Π°Ρ‡Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±ΠΎΠ»Π΅Π΅ простыми Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ.

Prefect – соврСмСнный оркСстратор, ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ лСгковСсный ΠΈ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Ρ‹ΠΉ, Ρ‡Π΅ΠΌ Airflow. Prefect допускаСт ΠΊΠ°ΠΊ запуск локально (Prefect Orion, open-source)​, Ρ‚Π°ΠΊ ΠΈ управляСмый Cloud (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ). Prefect DAG (называСтся Flow) Ρ‚ΠΎΠΆΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π° Python, Π½ΠΎ синтаксис Π±ΠΎΠ»Π΅Π΅ β€œΠ½Π°ΡΡ‚Ρ€ΠΎΠ΅Π½β€ Π½Π° data pipelines. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Prefect использован Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· open-source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² on-prem MLOps (см. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½ΠΈΠΆΠ΅) для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ обучСния ΠΈ развёртывания​. ΠŸΠ»ΡŽΡΡ‹ Prefect: простота развСртывания (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Prefect server + agent Π½Π° сСрвСрС, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² Docker), Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ UI, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСски ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. ΠœΠΈΠ½ΡƒΡΡ‹: сообщСство мСньшС, Ρ‡Π΅ΠΌ Ρƒ Airflow, мСньшС Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² (Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Python ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ всё Ρ‚ΠΎ ΠΆΠ΅). Prefect ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ для ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Python-стСк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тяТСловСсный Airflow.

Π”Ρ€ΡƒΠ³ΠΈΠ΅: Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ open-source срСдства – Luigi (ΠΎΡ‚ Spotify, схоТ с Airflow, Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ популярный сСйчас), Dagster (Π½ΠΎΠ²Ρ‹ΠΉ оркСстратор, Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊΠΈ Π² data engineering). Π’ ΠΌΠΈΡ€Π΅ Big Data Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Apache Oozie ΠΈΠ»ΠΈ Azkaban для workflow, Π½ΠΎ ΠΎΠ½ΠΈ большС Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Ρ‹ ΠΏΠΎΠ΄ Hadoop ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для Python.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ оркСстратору: Если Π½Π΅Ρ‚ Kubernetes – Π½Π°Ρ‡Π°Ρ‚ΡŒ с Airflow ΠΈΠ»ΠΈ Prefect для пСриодичСских Π·Π°Π΄Π°Ρ‡ обучСния. Если Kubernetes ΡƒΠΆΠ΅ Π²Π½Π΅Π΄Ρ€Ρ‘Π½ ΠΈΠ»ΠΈ планируСтся – ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΈΠ½Π²Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Kubeflow Pipelines, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» ΠΊ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ML. Π’ любом случаС, оркСстратор Π΄ΠΎΠ»ΠΆΠ΅Π½ тСсно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π²Ρ‹ΡˆΠ΅: Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ обучСния (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅Ρ‚ Π² MLflow), Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° S3, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅.

Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ (Model Deployment)

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ модСль ΠΎΠ±ΡƒΡ‡Π΅Π½Π° ΠΈ зарСгистрирована, Π΅Ρ‘ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-срСды, Π³Π΄Π΅ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы (ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ batch-ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Ρ‹). Для on-prem рассмотрим Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ сСрвис (API) для ΠΎΠ½Π»Π°ΠΉΠ½-инфСрСнса ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ (batch scoring).

БСрвисноС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ (online): Π—Π΄Π΅ΡΡŒ модСль упаковываСтся Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-сСрвиса (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ REST API) Π»ΠΈΠ±ΠΎ с использованиСм спСциализированного сСрвСра. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

  • Seldon Core – open-source Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ… Kubernetes, для развёртывания ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ микросСрвисов. Seldon позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· CRD (Custom Resource) Π² Kubernetes: Π²Ρ‹ описываСтС, Π³Π΄Π΅ Π²Π·ΡΡ‚ΡŒ модСль (ΠΎΠ±Ρ€Π°Π· Docker ΠΈΠ»ΠΈ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ модСль Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅), ΠΈ Seldon Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, проксируСт Ρ‡Π΅Ρ€Π΅Π· собствСнный API-Π³ateway, ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ canary-Ρ€Π΅Π»ΠΈΠ·Ρ‹, A/B тСстированиС, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ слои ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ отслСТиваниС drift Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Alibi Detect). ΠŸΠ»ΡŽΡΡ‹: ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ML-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ (Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄ΠΈΠΊΡ‚ΠΎΡ€Ρ‹ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SKLearnServer, XGBoostServer ΠΈ Ρ‚.ΠΏ.), ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° K8s. ΠœΠΈΠ½ΡƒΡΡ‹: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Kubernetes; конфигурация Ρ‡Π΅Ρ€Π΅Π· Kubernetes-манифСсты ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТной; Π±Π΅Π· Kubernetes Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ. Для нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Seldon Core цСлСсообразСн Ссли Kubernetes-кластСр Π΅ΡΡ‚ΡŒ ΠΈΠ»ΠΈ планируСтся – ΠΎΠ½ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ потрСбности deployment/monitoring Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сСрвиса. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, схоТая ΠΏΠΎ ΠΈΠ΄Π΅Π΅ – KServe (KFServing), родствСнная Kubeflow, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° K8s ΠΈ фокусируСтся Π½Π° сСрвСрС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

  • BentoML – Π±ΠΎΠ»Π΅Π΅ β€œΡ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ-ориСнтированный” инструмСнт для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ BentoML Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ модСль (ΠΈΠ· PyTorch, TensorFlow, sklearn ΠΈ Ρ‚.Π΄.) ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ REST/gRPC сСрвис, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ BentoML автоматичСски сгСнСрируСт Docker Image с этим сСрвисом​. BentoML Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт собствСнный ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ рССстр ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со срСдствами оркСстрации (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Yatai – ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΎΡ‚ BentoML, ΠΈΠ»ΠΈ просто Kubernetes). ΠŸΠ»ΡŽΡΡ‹: прост Π² использовании (нСсколько Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΊΠΎΠ΄Π΅ – ΠΈ Ρƒ вас Π³ΠΎΡ‚ΠΎΠ² API для ΠΌΠΎΠ΄Π΅Π»ΠΈ), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сразу K8s – ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ локально ΠΈΠ»ΠΈ Π² Docker Compose. ΠœΠΈΠ½ΡƒΡΡ‹: BentoML – это скорСС срСдство создания сСрвиса, Π½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями сСрвисов остаётся Π½Π° вас (Ρ‚.Π΅. для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Kubernetes ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ оркСстратором ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²). Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ open-source инструмСнтов BentoML ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для инфСрСнс-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ API ΠΈ Docker-ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ этапы ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎ дСплоя​. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, BentoML ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² сцСнарии, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ быстро ΠΈ Π±Π΅Π· большого DevOps-ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄Π° ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ сСрвис с модСлью Π½Π° on-prem сСрвСрС.

  • TorchServe / TensorFlow Serving / ONNX Runtime – эти спСциализированныС модСль-сСрвСра ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… экосистСм. НапримСр, TorchServe (ΠΎΡ‚ PyTorch) ΠΈ TF Serving (ΠΎΡ‚ TensorFlow) – Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ C++ сСрвСры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ…ΠΎΡΡ‚ΠΈΡ‚ΡŒ on-prem ΠΈ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ для развСртывания. Они ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ быстрый инфСрСнс, Π½ΠΎ Π½Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ (ΠΈΡ… всё Ρ€Π°Π²Π½ΠΎ Π½Π°Π΄ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ слуТбу). ONNX Runtime Server – для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ONNX. Π­Ρ‚ΠΈ инструмСнты Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΠΈΠ΅; ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (всС Π½Π° PyTorch, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) ΠΈ Π²Π°ΠΆΠ½Π° максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Но Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ (Seldon, Bento) ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅.

  • Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ β€œΠ²Ρ€ΡƒΡ‡Π½ΡƒΡŽβ€ (FastAPI/Flask) – самый прямой ΠΏΡƒΡ‚ΡŒ: ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ модСль Π² Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° FastAPI ΠΈΠ»ΠΈ Flask, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ сСрвис (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Gunicorn + Nginx). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ понятСн, Π½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ придётся Π΄Π΅Π»Π°Ρ‚ΡŒ самим (Ρ‡Π΅Ρ€Π΅Π· docker/k8s). По сути, BentoML Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ этот процСсс (Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ FastAPI сСрвСр Π·Π° вас). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, Π² open-source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ (см. Π½ΠΈΠΆΠ΅) для сСрвиса ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ FastAPI + Uvicorn + Gunicorn + Nginx Π² Docker​. ΠŸΠ»ΡŽΡΡ‹: ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ, ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ – просто Python сСрвис. ΠœΠΈΠ½ΡƒΡΡ‹: Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ β€œΠ·ΠΎΠΎΠΏΠ°Ρ€ΠΊβ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСрвисов, Π½Π΅Ρ‚ стандартного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° для AB-тСстов ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° – Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ.

Batch-инфСрСнс: НСкоторыС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ„Π»Π°ΠΉΠ½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π· Π² дСнь ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Ρ‹ ΠΏΠΎ всСму датасСту. Для этого Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ достаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Spark ΠΈΠ»ΠΈ Python скрипты, оркСстратор ΠΈ SQL-Π±Π°Π·Ρƒ/Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… инструмСнтов для batch-scoring мСньшС, Ρ‚.ΠΊ. ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ оркСстратор (Airflow job ΠΈΠ»ΠΈ Spark job). Однако, стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Apache Spark MLlib – Ссли ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½Ρ‹ Π² Spark, Ρ‚ΠΎ ΠΈ инфСрСнс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ распрСдСлённо Π½Π° Spark, сохраняя Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π° S3. Π›ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½Ρ‘Π½Π½ΡƒΡŽ модСль (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PMML, ONNX ΠΈΠ»ΠΈ Spark’s PipelineModel) прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ Spark job. ΠžΡ†Π΅Π½ΠΊΠ°: batch-процСсс Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого сСрвиса, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ вСрсионности – Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ модСлью ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Ρ‹ (Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· запись ID вСрсии ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹).

Enterprise-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для deployment: Если Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ коммСрчСскиС, Ρ‚ΠΎ: IBM Watson Machine Learning / OpenScale – ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Cloud Pak for Data on-prem). Cloudera CML – Ссли Ρƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Cloudera, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ°ΠΊ REST API прямо ΠΈΠ· Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСды. DataRobot MLOps – Π΄Π°Ρ‘Ρ‚ инструмСнты для дСплоя сторонних ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ (ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ on-prem). Π’ ΠΎΠ±Π·ΠΎΡ€Π°Ρ… отмСчаСтся, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° DataRobot ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚Π° on-prem ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ turnkey Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ MLOps (Π½ΠΎ Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ)​. Π’ нашСм случаС, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ставка Π½Π° open-source, поэтому enterprise инструмСнты ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли понадобится ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ участок (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π·ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒ инфСрСнса Π½Π° GPU).

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ deployment: Для гибкости ΠΈ совмСстимости с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π° on-prem стоит ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠžΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² MLflow Registry), Π·Π°Ρ‚Π΅ΠΌ pipeline дСплоя Π±Π΅Ρ€Ρ‘Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‘ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΠ±ΠΎ BentoML, Π»ΠΈΠ±ΠΎ собствСнного Dockerfile) ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚. Если Π΅ΡΡ‚ΡŒ Kubernetes – Ρ‚ΠΎ использованиС Seldon Core ΠΈΠ»ΠΈ KServe Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ Тизнь, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ кластСра. Если Kubernetes Π½Π΅Ρ‚ – ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Docker Compose ΠΈΠ»ΠΈ Nomad для оркСстрации ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π΄Π΅Ρ€ΠΆΠ° нСсколько экзСмпляров сСрвиса Π·Π° балансировщиком (Ρ‚ΠΎΡ‚ ΠΆΠ΅ Nginx). Π’Π°ΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ blue-green ΠΈΠ»ΠΈ canary Π΄Π΅ΠΏΠ»ΠΎΠΉ: Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ сразу ΡΡ‚Π°Ρ€ΡƒΡŽ модСль, Π° ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ тСсты ΠΈΠ»ΠΈ нСбольшой ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ запросов, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, тСстированиС ΠΈ качСство ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ модСль Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° Π½Π΅ΠΉ – это Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ: ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ тСхничСских ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ (Π°ΠΏΡ‚Π°ΠΉΠΌ, латСнси, ошибки), ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ качСства (распрСдСлСния Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ, фактичСскиС ΠΌΠ΅Ρ‚ΠΊΠΈ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ), Π° Ρ‚Π°ΠΊΠΆΠ΅ пСриодичСскоС тСстированиС (Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ модСль Π½Π° свСТих Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Unit/Integration тСсты ΠΊΠ°ΠΊ для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ПО).

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (APM): Для on-prem стСк классичСский: Prometheus + Grafana для ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, ELK/EFK (ElasticSearch + Kibana + Fluentd) для логирования. НапримСр, Ссли модСль Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· Seldon Core, ΠΎΠ½ автоматичСски экспортиуСт ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (количСство запросов, латСнси, ошибки) Π² Prometheus Ρ„ΠΎΡ€ΠΌΠ°Ρ‚; Grafana Π΄Π°ΡˆΠ±ΠΎΡ€Π΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ своСврСмСнно Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° сбои. ΠŸΠ»ΡŽΡΡ‹: эти инструмСнты ΡƒΠΆΠ΅ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Ρ‹, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ Π½Π΅ зависят ΠΎΡ‚ ΠΎΠ±Π»Π°ΠΊΠ°. ΠœΠΈΠ½ΡƒΡΡ‹: сами ΠΏΠΎ сСбС ΠΎΠ½ΠΈ β€œΠ½Π΅ Π·Π½Π°ΡŽΡ‚β€ контСкст ML, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Grafana ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ошибка выросла, Π½ΠΎ Π½Π΅ скаТСт, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Π΄Ρ€Π΅ΠΉΡ„Π΅ Π΄Π°Π½Π½Ρ‹Ρ… – для этого Π½ΡƒΠΆΠ½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ: Π—Π΄Π΅ΡΡŒ Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² ΠΈΠ³Ρ€Ρƒ Π±ΠΎΠ»Π΅Π΅ спСцифичныС инструмСнты. Open-source Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Evidently AI позволяСт Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ качСства Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ прямо Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅ ΠΈΠ»ΠΈ Π² jupyter, гСнСрируя ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ ΠΎ Π΄Ρ€Π΅ΠΉΡ„Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (Data Drift), Π΄Ρ€Π΅ΠΉΡ„Π΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, качСствС ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΈ Π΄Ρ€. Evidently ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ„Π»Π°ΠΉΠ½ (Ρ€Π°Π· Π² сутки Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ vs ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ) ΠΈΠ»ΠΈ Π² ΠΏΠΎΠ»Ρƒ-ΠΎΠ½Π»Π°ΠΉΠ½ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Streamlit/dashboard). Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Qwak Evidently упоминаСтся ΠΊΠ°ΠΊ инструмСнт для monitoring (Ρ€Π΅altime) модСлСй​. Π”Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ – Seldon Alibi (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‚ Seldon): Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для обнаруТСния выбросов, Π΄Ρ€Π΅ΠΉΡ„Π°, ΠΎΠ±ΡŠΡΡΠ½ΠΈΠΌΠΎΡΡ‚ΠΈ. Он интСгрируСтся с Seldon Core: ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с модСлью Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π° Π΄Ρ€Π΅ΠΉΡ„Π°, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ распрСдСлСния запросов. Prometheus custom metrics: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ – Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄ сСрвиса ΠΌΠΎΠ΄Π΅Π»ΠΈ вычислСниС простых статистик (срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°, доля пустых ΠΈ Ρ‚.Π΄.) ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Prometheus. Π­Ρ‚ΠΎ даст ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅, Π½ΠΎ быстроС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π΅ ΡƒΡˆΠ»ΠΈ Π»ΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π°Π»Π΅ΠΊΠΎ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ….

Анализ качСства ΠΈ Π°Π»Π΅Ρ€Ρ‚Ρ‹: ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° – ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ feedback loop: ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ (с ΠΎΠ±Π΅Π·Π»ΠΈΡ‡ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, Ссли Π½ΡƒΠΆΠ½ΠΎ) Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π° ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ истинный ΠΎΡ‚Π²Π΅Ρ‚ (ground truth), Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ качСство (accuracy, RMSE ΠΈ Ρ‚.ΠΏ.). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Airflow-Π΄ΠΆΠΎΠ±ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ Π±Π΅Ρ€Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, считаСт ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ сравниваСт с ΠΏΠΎΡ€ΠΎΠ³ΠΎΠΌ. Если ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° просСла – ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅ΠΏΠ»Π°Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. Для этой Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ подходят DeepChecks (open-source Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ). Π’ упомянутом open-source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ связка: сСрвис ΠΌΠΎΠ΄Π΅Π»ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π² Postgres, Π° Evidently ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ этим Π»ΠΎΠ³Π°ΠΌ ΠΈ строит ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΄Ρ€Π΅ΠΉΡ„Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Grafana​.

ВСстированиС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ: ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ модСль, Π΅Ρ‘ стоит ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ стандартных unit-тСстов Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ test-driven data science ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° нСбольшом ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅, Ρ‡Ρ‚ΠΎ новая модСль Π½Π΅ Ρ…ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ PyTest ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² CI. Π’Π°ΠΊΠΆΠ΅, Great Expectations – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… – ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° стадии ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…: ΠΎΠ½Π° провСряСт, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ оТиданиям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Π±ΠΎΠ»Π΅Π΅ X% пропусков, распрСдСлСниС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° Π½Π΅ ΡΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΎΡΡŒ). Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ скармливаниС ΠΌΠΎΠ΄Π΅Π»ΠΈ нСкачСствСнных Π΄Π°Π½Π½Ρ‹Ρ…. Great Expectations Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π° S3 ΠΈΠ»ΠΈ ΠΊ Spark DataFrame ΠΈ запускаСт Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… тСстов (Π½Π°Π±ΠΎΡ€ экспСктаций).

Enterprise Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅: Π•ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ SaaS/enterprise Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Evidently ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°Ρ‡Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Fiddler AI, WhyLabs – ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ML, IBM OpenScale – ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (отслСТиваСт bias, Π΄Ρ€Π΅ΠΉΡ„). Но open-source ΠΏΡ€ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ настройкС способСн ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ эти Π½ΡƒΠΆΠ΄Ρ‹, особСнно Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… этапах.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ: ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Prometheus (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, число ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ², срСдний скоринг-врСмя, ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ошибок). Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ pipeline сбора Π΄Π°Π½Π½Ρ‹Ρ…: всС Π²Ρ…ΠΎΠ΄Ρ‹/прСдсказания ΠΌΠΎΠ΄Π΅Π»ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‚ΡΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π±Π°Π·Ρƒ), пСриодичСски Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Evidently ΠΈΠ»ΠΈ собствСнной Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° Python. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½ΠΈΠΆΠ΅ Evidently упомянут ΠΊΠ°ΠΊ инструмСнт для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ обнаруТСния Π΄Ρ€Π΅ΠΉΡ„Π°, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π² on-prem окруТСниС​. ΠŸΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ – Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ retraining. Π’ дальнСйшСм, ΠΏΡ€ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠΈ ΠΎΠΏΡ‹Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ (Continuous Training) ΠΏΡ€ΠΈ срабатывании ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² (Π½ΠΎ это достаточно Π·Ρ€Π΅Π»Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ MLOps).

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с CI/CD

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² CI/CD обСспСчиваСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ шаги для нашСй on-prem ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ:

  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий ΠΊΠΎΠ΄Π°: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Git (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GitLab ΠΈΠ»ΠΈ GitHub Enterprise сСрвСр on-prem). Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ хранится Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ для развСртывания, pipeline-скрипты, тСсты. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ – ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π½Π° модСль.

  • CI – автоматичСскоС тСстированиС ΠΈ сборка: Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ CI-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ (Jenkins, TeamCity, GitLab CI) для ML-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π¨Π°Π³ΠΈ CI ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ: запуск unit-тСстов (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСпроцСссинга, ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ), запуск нСбольшого Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ задания Π½Π° тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ модСль Π½Π° 1% Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ учится ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° > ΠΏΠΎΡ€ΠΎΠ³Π°), статичСский Π°Π½Π°Π»ΠΈΠ· (ΠΊΠΎΠ΄-стайл, Ρ‚ΠΈΠΏΡ‹). Π’Π°ΠΊΠΆΠ΅ Π½Π° стадии CI ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Docker-ΠΎΠ±Ρ€Π°Π· с ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ для обучСния ΠΈΠ»ΠΈ инфСрСнса.

  • CD – доставка ΠΌΠΎΠ΄Π΅Π»ΠΈ: послС прохоТдСния тСстов, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап – доставка. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ автоматичСский Π΄Π΅ΠΏΠ»ΠΎΠΉ (Ссли модСль обновляСтся ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈ процСсс Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ), Π»ΠΈΠ±ΠΎ полуавтоматичСский (CI Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ модСль Π² рСгистр ΠΈ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π°Π΅Ρ‚, Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΏΡ€ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ML-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€). Π’ on-prem ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ CD ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· Jenkins Pipeline, Ansible скрипты ΠΈΠ»ΠΈ Argo CD (Ссли Kubernetes). ЦСль – ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΡƒΡ‡Π½Ρ‹Π΅ шаги: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Π³ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² MLflow Registry ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΆΠΎΠ± дСплоя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π΅Ρ€Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π· ΠΈ раскатываСт Π΅Π³ΠΎ.

  • Бвязь с оркСстратором: Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ взаимодСйствиС CI/CD систСм с ML-оркСстратором. НапримСр, ΠΏΡ€ΠΈ ΠΌΠ΅Ρ€ΠΆΠ΅ Π² main ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΈΡ‚ΡŒ запуск Airflow DAG, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ модСль Π½Π° ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (модСль + ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ) ΠΏΠΎΡ‚ΠΎΠΌ Π»ΠΈΠ±ΠΎ автоматичСски дСплоится, Π»ΠΈΠ±ΠΎ хотя Π±Ρ‹ сохранится для Π°Π½Π°Π»ΠΈΠ·Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, классичСскиС CI/CD инструмСнты (Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ ΠΊΠΎΠ΄) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΏΠ°Ρ€Π΅ с ML-спСцифичными (Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€ экспСримСнтов, оркСстратор).

  • Π’Π΅Ρ€ΡΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· CI: CI ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ зафикс

  • Π’Π΅Ρ€ΡΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ: CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ фиксируСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ зависимости (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Docker-ΠΎΠ±Ρ€Π°Π· ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π· Conda для окруТСния), Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… срСдах. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° on-prem позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ собствСнный Registry для Docker-ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ модСль ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ», Π½ΠΎ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ срСду Π΅Ρ‘ выполнСния.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, интСграция с CI/CD Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ экспСримСнтированиСм ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ эксплуатациСй. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ становится управляСмым процСссом: ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° с ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ – Π΄ΠΎ автоматичСского тСстирования, обучСния ΠΈ развСртывания с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

Open-source vs Enterprise: РассмотрСнныС open-source инструмСнты ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ прСимущСством гибкости ΠΈ отсутствия Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚, Ρ‡Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ Π² on-prem срСдС (Π³Π΄Π΅ нСльзя просто ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ сСрвис). ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… условиях Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ open-source ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, дополняя Π΅Π³ΠΎ ΠΏΠΎΠΊΡƒΠΏΠΊΠΎΠΉ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Ρ… enterprise-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ нСобходимости. Open-source стСк Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… усилий Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ, Π·Π°Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ свои процСссы. Enterprise-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Β«ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡Β» (Domino, DataRobot, Cloudera CML, Hopsworks ΠΈ Π΄Ρ€.) ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ – ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Π΄Π°ΡŽΡ‚ интСрфСйсы для Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° – ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Π² кастомизации ΠΈ Π²Π΅Π΄ΡƒΡ‚ ΠΊ привязкС ΠΊ Π²Π΅Π½Π΄ΠΎΡ€Ρƒ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΡƒΡŽ инфраструктуру.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ: Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ рСсурсов, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС – ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ТизнСспособный MLOps стСк ΠΈΠ· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… инструмСнтов (см. Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½ΠΈΠΆΠ΅), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: отслСТиваниС экспСримСнтов (MLflow), автоматизация обучСния (оркСстратор – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Airflow/Prefect), вСрсионированиС Π΄Π°Π½Π½Ρ‹Ρ… (DVC/Delta Lake), Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (Docker +, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BentoML ΠΈΠ»ΠΈ простой REST сСрвис) ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (Prometheus + Evidently). Π’Π°ΠΊΠΎΠΉ стСк, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½, ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с доставкой ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. По ΠΌΠ΅Ρ€Π΅ взрослСния процСссов, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ: Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° Kubernetes (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Kubeflow + KServe + Seldon для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ числа ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ), Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Feature Store (Feast) для управлСния ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌΠΈ, ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ CI/CD (Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ автоматичСского дСплоя ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…).

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ совмСстимы с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ инфраструктурой ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ: практичСски всС инструмСнты ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ язык Python ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ ΠΈ Spark. НапримСр, MLflow Π»Π΅Π³ΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π° S3 ΠΈ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ компаниями для вСрсионирования Spark ML модСлС​й; Kubeflow ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ разрабатывался для Kubernetes, Π½ΠΎ Π½Π΅ привязан ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±Π»Π°ΠΊΡƒ – Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ on-prem, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ S3 ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ рСсурса​. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Spark ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ вписываСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ pipeline’ов: Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ (Ρ‡Π΅Ρ€Π΅Π· Airflow), Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ шаг Kubeflow Pipeline (Ρ‡Π΅Ρ€Π΅Π· Spark Operator), обСспСчивая Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², наш Π²Ρ‹Π±ΠΎΡ€ находится Π² руслС соврСмСнных ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ MLOps. Как отмСчаСтся Π² ΠΎΠ±Π·ΠΎΡ€Π°Ρ…, для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ end-to-end Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ: инструмСнт управлСния ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌΠΈ (Feature Store) Π²Ρ€ΠΎΠ΄Π΅ Feast, инструмСнт Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π° экспСримСнтов/ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (MLflow), срСдство дСплоя ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (Seldon Core ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³), ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (Evidently), Π° Ρ‚Π°ΠΊΠΆΠ΅ оркСстрация ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² (Kubeflow ΠΈΠ»ΠΈ Airflow​. ИмСнно сочСтаниС этих элСмСнтов ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ всС Ρ†Π΅Π»ΠΈ MLOps, заявлСнныС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ, Π² on-prem срСдС. Если ΠΆΠ΅ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΎΠ±Π»Π°ΠΊΠΎΠΌ, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ стСк Π½Π΅ станСт прСпятствиСм: Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ open-source инструмСнтов ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… Kubernetes, ΠΈ с ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ.

Enterprise-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹: Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ enterprise-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π΅ стоит, особСнно Ссли ΠΊΠΎΠΌΠ°Π½Π΄Π° нСбольшая. НапримСр, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° DataRobot ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚Π° on-prem ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€: Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, автоматичСскоС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ мноТСства ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹ – всё Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс. Π’Π°ΠΊΠΎΠΉ Β«ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»Β» MLOps ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»Π΅Π½ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ внСдрСни​я. Но Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π½Ρƒ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ограничСния (DataRobot – закрытая систСма, Π½Π΅ всС тонкости ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ). Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – Hopsworks, которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Feature Store, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π΄Π°ΠΆΠ΅ GUI для оркСстрации; ΠΎΠ½Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ интСгрируСтся со Spark ΠΈ Kubernetes, Π½ΠΎ ΠΏΠΎΠ»Π½Ρ‹Π΅ возмоТности Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ коммСрчСской Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ. РСкомСндуСтся ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π± Π·Π°Π΄Π°Ρ‡: Ссли ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ дСсятки ΠΈ каТдая ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ enterprise-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ для стандартизации. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, open-source стСк с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ потрСбности Π±Π΅Π· сущСствСнных Π·Π°Ρ‚Ρ€Π°Ρ‚.

Подводя ΠΈΡ‚ΠΎΠ³ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ: Π½Π°Ρ‡Π°Ρ‚ΡŒ с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° open-source инструмСнтов, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Python/S3/Spark (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MLflow + Airflow + DVC + Docker, см. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½ΠΈΠΆΠ΅), ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ процСссы контроля вСрсий, дСплоя ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. Π—Π°Ρ‚Π΅ΠΌ – ΠΏΡ€ΠΈ нСобходимости ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ – Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ (Kubernetes, Kubeflow, Seldon, Feast). Π’Π°ΠΊΠΎΠΉ поэтапный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ MLOps-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Π½Π΅ завися ΠΎΡ‚ ΠΎΠ±Π»Π°ΠΊΠ° ΠΈ сохраняя ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ инфраструктурой.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ MLOps: Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠ»ΡŽΡΡ‹/минусы, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΠ°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π·Π°Π΄Π°Ρ‡ΠΈ)ΠŸΠ»ΡŽΡΡ‹ΠœΠΈΠ½ΡƒΡΡ‹PythonS3Spark
MLflow (open-source)Π’Ρ€Π΅ΠΊΠ΅Ρ€ экспСримСнтов; рССстр ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (Lifecycle mgmt).ΠŸΡ€ΠΎΡΡ‚ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ; язык-Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ (REST API); ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΈΡ… фрСймворко​в Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с вСрсиям​иНС управляСт ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ; Π½Π΅Ρ‚ встроСнного ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°; Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏ. сСрвисы (DB, storage).Π”Π° (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° Python)Π”Π° (Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ Π² S3​dzone.com】Да (Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Spark​valohai.com】
Kubeflow (open-source)ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ML Π½Π° Kubernetes: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ°ΠΌΠΈ, запуск Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³-Π·Π°Π΄Π°Ρ‡, оркСстрация ML-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.End-to-end ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ Π½Π° K8s; ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ (on-prem ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΠΊΠΎ); Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Pipelines, Katib (AutoML), KFServin​Высокая ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ развёртывания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ; Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π°Π²Ρ‹ΠΊΠΈ Kubernetes; Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° TensorFlo​wΠ”Π° (pipeline DSL Π½Π° Python; ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TF/PyTorch jobs)Π”Π° (Ρ‡Π΅Ρ€Π΅Π· MinIO gateway ΠΈΠ»ΠΈ прямоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅)Π”Π° (Ρ‡Π΅Ρ€Π΅Π· Spark Operator ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ со Spark)
Apache Airflow (open-source)ΠžΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ workflows (DAG) для Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ML: автоматизация ETL, Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³Π°, скoring.Π—Ρ€Π΅Π»Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, большоС сообщСство; мноТСство Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ (S3, Hadoop, Spark, SQL ΠΈ Π΄Ρ€.​; Π²Π΅Π±-интСрфСйс для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π·Π°Π΄Π°Ρ‡.ΠžΡ€iented Π½Π° batch-процСссы (Π½Π΅ realtime); Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр/кластСр; Π½Π΅Ρ‚ спСцифичных ML-Ρ„ΠΈΡ‡ (Π½ΡƒΠΆΠ½Π° интСграция с Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³-систСмой).Π”Π° (DAG задаётся Π½Π° Python)Π”Π° (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹/Hooks для S3)Π”Π° (Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Spark Submit, интСграция со Spark-кластСрами)
DVC (open-source)ВСрсионированиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ; ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ датасСтами ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ΠΎΠΌ (Ρ‡Π΅Ρ€Π΅Π· Git).ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Π°Ρ привязка Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ/ΠΌΠΎΠ΄Π΅Π»ΠΈ; ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ (S3, SSH ΠΈ Π΄Ρ€.); ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ экспСримСнтов.Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° (CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, Π½Π΅Ρ‚ Π²Π΅Π± UI ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ); для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ½Π° дисциплина (pull/push Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ).Π”Π° (CLI ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° + Python API)Π”Π° (S3 remote для хранСния вСрсий)НС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ (Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Ρ‹/Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ Spark Π·Π°Π΄Π°Ρ‡).
Feast (open-source)Feature Store: Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π΄Π°Ρ‡Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ML-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ; синхронизация ΠΎΡ„Π»Π°ΠΉΠ½/ΠΎΠ½Π»Π°ΠΉΠ½ Π΄Π°Π½Π½Ρ‹Ρ….Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ расчСт ΠΈ доступ ΠΊ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌ; обСспСчиваСт Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ΠΎΠΌ; ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ (Redis, PostgreSQL, file/S3 ΠΈ ΠΏΡ€.).Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ; Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ настройки инфраструктуры (Π‘Π” для ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для ΠΎΡ„Π»Π°ΠΉΠ½ Π΄Π°Π½Π½Ρ‹Ρ…); кривая обучСния для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.Π”Π° (Python SDK/API)Π”Π° (ΠΎΡ„Π»Π°ΠΉΠ½-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° S3, file)Π”Π° (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ со Spark для расчСта ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²).
Seldon Core (open-source)ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° оркСстрации ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π° Kubernetes (microservices): Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ запросов, AB-тСсты, canary-Ρ€Π΅Π»ΠΈΠ·Ρ‹.Нативно для K8s: ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, автопСрСзапуск; ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° мноТСства ML-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² (Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄ΠΈΠΊΡ‚ΠΎΡ€ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ); интСграция с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ (Prometheus) ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Π΄Ρ€Π΅ΠΉΡ„Π° (Alibi).ВрСбуСтся Kubernetes-кластСр; конфигурация Ρ‡Π΅Ρ€Π΅Π· CRD (yaml-манифСсты) – ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТной; для ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏ. ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Istio ingress, Prometheus).Π”Π° (ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° Python)Π”Π° (ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ модСль ΠΈΠ· S3 ΠΏΡ€ΠΈ стартС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°)НСт (Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для дСплоя Spark, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сСрвисов ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ).
BentoML (open-source)Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ML-ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² сСрвис (REST/gRPC API) ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€; ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ deployment.ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°: auto-гСнСрация Docker ΠΎΠ±Ρ€Π°Π·Π° с AP​I ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² (Sklearn, PyTorch, TF, XGBoost ΠΈ Π΄Ρ€.); Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ локального развСртывания ΠΈΠ»ΠΈ Π² Kubernetes.НС Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ мноТСством сСрвисов (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°); собствСнная модСльная инфраструктура (Yatai) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏ. усилий, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.Π”Π° (Bentofile ΠΈ API Π½Π° Python)Π”Π° (ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² S3, Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ стартС)НСт (ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° сСрвисы для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ; Spark-ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ послС экспорта).
Great Expectations (open-source)Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ качСства Π΄Π°Π½Π½Ρ‹Ρ…: Β«expectationΒ» – Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»/тСстов для Π΄Π°Π½Π½Ρ‹Ρ….ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² модСль нСкачСствСнных Π΄Π°Π½Π½Ρ‹Ρ… (Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ схСмы, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹, распрСдСлСния); Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ понятныС ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹; интСгрируСтся с ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°ΠΌΠΈ (Airflow, Prefect).Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ написания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»; ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ; ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ.Π”Π° (конфигурируСтся Π½Π° Python/YAML)Π”Π° (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ S3 ΠΊΠ°ΠΊ Datasource ΠΈ для хранСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²)Π”Π° (ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Spark DataFrame Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ).
Evidently (open-source)ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ: вычислСниС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Π΄Ρ€Π΅ΠΉΡ„Π°, качСства, гСнСрация ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² (HTML ΠΈΠ»ΠΈ JSON).Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для ML: дСсятки Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ (drift, performance, fairness); Π»Π΅Π³ΠΊΠΎ интСгрируСтся (pip-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°); ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈβ€‹ΡŽΠΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π°Π½Π°Π»ΠΈΠ· batch-Π΄Π°Π½Π½Ρ‹Ρ… постфактум); для постоянного ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π·ΠΎΠ²; ограничСнная визуализация Π±Π΅Π· Π΄ΠΎΠΏ. инструмСнтов.Π”Π° (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python)Π”Π° (ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ· S3 ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹)ΠžΠΏΠΎΡΡ€Π΅Π΄ΠΎΠ²Π°Π½Π½ΠΎ (Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π½Π° pandas DataFrames, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Spark Π½Π°Π΄ΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ).
DataRobot MLOps (enterprise)ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠ°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для Π°Π²Ρ‚ΠΎML ΠΈ MLOps: автоматичСскоС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ on-prem).БыстроС Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ML-процСсса β€œΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡β€; ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π΅Π±-интСрфСйс; ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, Π°Π»Π΅Ρ€Ρ‚ΠΈΠ½Π³, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями – ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ.Высокая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ; vendor lock-in (Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠΎΠ΄); ΠΌΠ΅Π½Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ для кастомных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ нСстандартных Π΄Π°Π½Π½Ρ‹Ρ…/ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.Частично (Π΅ΡΡ‚ΡŒ Python API ΠΈ SDK, Π½ΠΎ основной сцСнарий – UI)Π”Π° (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· S3 поддСрТиваСтся)ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎ (фокус Π½Π° собствСнных срСдствах, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° интСграция Ρ‡Π΅Ρ€Π΅Π· Spark connectors, Π½ΠΎ Π½Π΅Ρ‚ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Spark job’ов).