15 minut Czytania

Czym jest MLOps?

Czym jest MLOps?

Rozwinięciem skrótu MLOps (lub ML Ops) jest Machine Learning Operations. Jest to zbiór zasad i praktyk, które określają sposób pracy nad projektem uczenia maszynowego wdrażanym do produkcji. Celem MLOps jest stworzenie projektu, który będzie w pełni zautomatyzowany, łatwy w modyfikacji, wydajny i niezawodny. Wiele projektów uczenia maszynowego nie posiadało wymienionych cech, przez co wdrożenie ich na produkcję bardzo często było niemożliwe.

MLOps można rozumieć również jako metodę, która łączy uczenie maszynowe (Machine Learning) z rozwojem oprogramowania (DevOps) i inżynierią danych (Data Engineering). Jest to fuzja trzech dziedzin, dzięki której możliwe jest tworzenie zautomatyzowanych, niezawodnych i wydajnych systemów uczenia maszynowego:

grafika przedstawiająca trzy komponenty MLOps: Machine Learning, DevOps, Data Engineering.

W ostatnich 10 latach uczenie maszynowe znacznie zyskało na popularności. Oprogramowanie komputerowe i mobline – używane przez nas codziennie – coraz częściej wykorzystuje sztuczną inteligencję (w tym uczenie maszynowe), czego przykładem mogą być autonomiczne samochody oraz wirtualni asystenci (Siri, Asystent Google, Alexa).

Moglibyśmy zebrać najlepszych specjalistów od uczenia maszynowego, inżynierii danych oraz rozwoju oprogramowania, jednak bez odpowiedniej organizacji pracy nie byliby oni w stanie stworzyć niezawodnego i wydajnego systemu uczenia maszynowego. Rozwiązaniem tego problemu jest MLOps, dzięki któremu sposób pracy nad projektem jest z góry określony, każdy zna swoją rolę, a system uczenia maszynowego przechodzi przez kilka etapów sprawdzających i ulepszających jego jakość. Jak wygląda organizacja pracy według reguł MLOps? Jakie są etapy podczas tworzenia projektu uczenia maszynowego? Zapraszam do przeczytania dalszej części artykułu, w której znajdziesz odpowiedź na wspomniane pytania.

Modele rozwoju oprogramowania

Żeby zrozumieć istotę MLOps, warto zapoznać się z ewolucją modeli rozwoju oprogramowania. Wspomniane modele – podobnie jak MLOps – są zbiorem zasad i praktyk, które pomagają w tworzeniu niezawodnych, wydajnych i zautomatyzowanych aplikacji. MLOps jest również takim modelem, jednak wyróżnia się tym, że zostało stworzone z myślą o systemach uczenia maszynowego. Jeżeli mówimy o modelach rozwoju oprogramowania, to wyróżniamy trzy następujące:

Modele rozwoju oprogramowania MLOps - od lewej Waterfall, Agile i DevOps.

Model Waterfall znajdował szerokie zastosowanie w latach 90. XX wieku. Jest to sposób rozwoju oprogramowania składający się z kilku etapów, które są wykonywane jeden po drugim. Do głównych etapów należą: ustalenie wymagań oprogramowania, zaprogramowanie, testowanie, wydanie oprogramowania. Model Waterfall dobrze sprawdza się w przypadku mniejszych projektów z dokładnie określonymi wymaganiami, które nie zmieniają się w czasie. Dokonywanie zmian w projektach stworzonych według modelu Waterfall jest znacznie utrudnione, przez co omawiany model nie jest już szeroko wykorzystywany.

Rozwój technologii i zmiana wymagań klientów przyczyniły się do powstania nowego modelu rozwoju oprogramowania – Agile. Model Agile składa się z kilku etapów, takich jak: analiza, projektowanie, programowanie, testowanie, wydanie oprogramowania. W odróżnieniu od modelu Waterfall, model Agile podczas tworzenia oprogramowania umożliwia dokonywanie zmian we wcześniejszych etapach, a podczas etapu testowania może zaangażować użytkownika, po czym na podstawie jego uwag dokonać odpowiednich zmian. Istotne jest również to, że po wydaniu oprogramowania istnieje możliwość jego aktualizacji w celu poprawienia błędów lub poszerzenia funkcjonalności. Projekty tworzone zgodnie z modelem Agile często dzielą się na moduły, które odpowiadają za konkretne zadania, przez co edycja tworzonego oprogramowania staje się łatwiejsza. Jest to model, który wciąż znajduje szerokie zastosowanie.

DevOps jest rozwinięciem zasad i praktyk stosowanych w modelu Agile. W modelu DevOps oprogramowanie musi przejść przez fazę budowania, testowania, wydania oraz dostarczenia. Za każdą fazę odpowiadają niezależne zespoły, które współpracują ze sobą w celu tworzenia wydajnego i niezawodnego oprogramowania. Najważniejszą cechą modelu DevOps jest ciągła integracja (continous integration, CI) oraz ciągłe dostarczanie (continous delivery, CD). CI polega na ciągłym dostarczaniu nowego kodu do repozytorium deweloperskiego oraz uruchamianiu testów, dzięki czemu wiele potencjalnych błędów jest wychwytywanych od razu, co znacznie ułatwia proces naprawy. Gdy podczas testowania w repozytorium deweloperskim nie zostanie znaleziony żaden błąd, to kod jest automatycznie przekazywany na produkcję. Jest to bardzo efektywny i szeroko wykorzystywany model.

Geneza modelu MLOps

Modele Agile i DevOps pomagają organizacjom w tworzeniu i wydawaniu niezawodnego oprogramowania. DevOps umożliwia wprowadzanie zmian do środowiska produkcyjnego w krótkim odstępie czasu, jest wykorzystywany przez największe organizacje i można stwierdzić, że jest to w tej chwili najlepsze rozwiązanie dla rozwoju oprogramowania. Systemy uczenia maszynowego są również rodzajem oprogramowania, więc dlaczego nie możemy korzystać z metody DevOps do organizacji pracy nad projektami uczenia maszynowego? Pomiędzy typowym oprogramowaniem (aplikacjami mobilnymi, komputerowymi itp.), a systemem uczenia maszynowego jest jedna istotna różnica – sukces tradycyjnego oprogramowania zależy od samego kodu, a sukces systemu uczenia maszynowego od kodu oraz dodatkowo danych.

Symbole MLOps

Struktura danych pochodzących z różnych źródeł może się zmieniać w czasie, przez co konieczne jest nieustanne dostosowywanie kodu do tych zmian. W czasie ewoluuje również sam kod, dzięki czemu system uczenia maszynowego nabiera nowych funkcjonalności. Problemem jest fakt, że zmiany kodu i danych są od siebie niezależne, więc trzeba znaleźć rozwiązanie, które połączy ze sobą oba elementy.

Problem ten rozwiązuje model MLOps, dzięki któremu kod i dane przestają być od siebie niezależne. Oba elementy progresują w jednym kierunku i dążą do osiągnięcia wspólnego celu – stworzenia niezawodnego i utrzymywalnego systemu uczenia maszynowego.

MLOps wprowadza systematyczny i uproszczony sposób rozwoju, wdrażania i monitorowania systemu uczenia maszynowego. Dzięki niemu zespoły pracujące nad projektem są w stanie odpowiednio współpracować, podejmować prawidłowe decyzje i spełniać założenia biznesowe.

Założenia i organizacja pracy w modelu MLOps

Poniższa grafika przedstawia uogólniony sposób pracy nad projektem uczenia maszynowego według modelu MLOps. Jest to elastyczne uogólnienie modelu MLOps, które może zostać wykorzystane w każdym projekcie uczenia maszynowego – bez względu na branżę, której projekt dotyczy.

grafika przedstawia uogólniony sposób pracy nad projektem uczenia maszynowego według modelu MLOps

Prezentowany model składa się z dwóch warstw – z warstwy górnej i warstwy dolnej. Górna warstwa to potok MLOps (budowanie, wdrażanie i monitorowanie). Warstwa dolna to sterowniki/komponenty, które umożliwiają działanie warstwy górnej (dane, kod, artefakty, oprogramowanie pośrednie, infrastruktura). Korzystanie z prezentowanego potoku MLOps umożliwia szybkie i efektywne tworzenie, testowanie, zatwierdzanie i wdrażanie systemów uczenia maszynowego do produkcji.

Górna warstwa modelu MLOps

Górna warstwa w modelu MLOps składa się z trzech modułów, które są ze sobą zsynchronizowane – moduł budowania, moduł wdrażania i moduł monitorowania.

Moduł budowania

Moduł budowania odpowiada za tworzenie modelu uczenia maszynowego. W omawianym module odbywa się proces trenowania, testowania, pakowania i wersjonowania modelu uczenia maszynowego. Cały moduł jest potokiem uczenia maszynowego, w którym każdy z etapów następuje po kolejnym (od lewej do prawej):

Schemat przedstawiający moduł budowania w MLOps

Pierwszym etapem jest przyjęcie danych. Jest to początek potoku uczenia maszynowego, w którym dane pochodzące z różnych źródeł muszą zostać wprowadzone do modelu uczenia maszynowego. Proces przyjmowania danych można opisać w trzech krokach: wydobywanie, przetwarzanie, załadowanie (ETL – extract, transform, load). Dane pochodzące z dwóch różnych źródeł mogą charakteryzować się inną jakością i strukturą, przez co muszą zostać odpowiednio przetworzone zanim będą przekazane do modelu uczenia maszynowego. W tym etapie dane są również dzielone na dane treningowe i testowe. Gdy dane są odpowiednio przygotowane, możemy przejść do następnego etapu – trenowania modelu uczenia maszynowego.

Etap trenowania modelu uczenia maszynowego to etap, w którym odbywają się wszystkie podstawowe procedury związane z uczeniem maszynowym. Etap ten może być wykonywany ręcznie, jednak bardziej wydajnym rozwiązaniem jest zautomatyzowane podejście.

Gdy skończymy etap trenowania modelu, możemy przejść do etapu testowania. Na tym etapie sprawdzana jest dokładność stworzonego modelu uczenia maszynowego. Do przeprowadzenia testów wykorzystywane są dane, które zostały wydzielone specjalnie do tego celu na etapie przyjmowania danych. Jeżeli wyniki testów są zadowalające, to można przejść do następnego etapu.

Następnym etapem jest spakowanie modelu przy pomocy odpowiednich narzędzi (np. Dockera). Stworzony, stestowany oraz spakowany model uczenia maszynowego jest przekazywany do środowiska produkcyjnego.

Kolejnym istotnym etapem jest zarejestrowanie modelu. Spakowana wersja modelu uczenia maszynowego jest przechowywana w odpowiednim rejestrze, który uporządkowuje wszystkie wydane wersje modelu.

Moduł wdrażania

Jest to moduł, w którym wdrażamy stworzony model uczenia maszynowego do produkcji. W module wdrażania sprawdzana jest wydajność modelu oraz jego zachowanie w środowisku produkcyjnym. Określany jest stopień niezawodności oraz skalowalności modelu. Potok wdrażania złożony jest z dwóch elementów – testowania aplikacji oraz wydania na produkcję. Stosowane jest w nim podejście ciągłego integrowania (CI, continous integration) oraz ciągłego dostarczania (CD, continous delivery).

Grafika przedstawiająca moduł wdrażania.

Testowanie aplikacji jest etapem, w którym model uczenia maszynowego jest dokładnie sprawdzany pod kątem niezawodności i wydajności w środowisku przedprodukcyjnym, które symuluje środowisko produkcyjne. Wyniki testów są sprawdzane automatycznie lub manualnie przez specjalistę ds. jakości, po czym podejmowana jest decyzja czy model uczenia maszynowego może zostać wydany do środowiska produkcyjnego.

Następnym krokiem w module wdrażania jest wydanie na produkcję. Gdy model uczenia maszynowego przejdzie przez etap testowania i zostanie zaakceptowany, to może zostać wprowadzony do środowiska produkcyjnego. Jest to moment, w którym stworzony model uczenia maszynowego powinien rozwiązywać biznesowe problemy oraz generować zyski.

Moduł monitorowania

Moduł monitorowania odpowiada za kontrolowanie, analizowanie i zarządzanie aplikacją wdrożoną do produkcji. W module monitorowania kontrolowana i analizowana jest wydajność modelu uczenia maszynowego, po czym na podstawie wyników podejmowane są odpowiednie decyzje. Jest to moduł, dzięki któremu jakość dostarczanych produktów znacznie wzrasta.

schemat modułu monitorowania w MLOps

Etap kontrolowania odpowiada za przechwytywanie najważniejszych informacji dotyczących wydanej aplikacji. W tym etapie zbierane są dane dotyczące integralności danych, płynności oraz wydajności systemu. Wydajność systemu jest kontrolowana dzięki danym telemetrycznym, które zawierają informacje między innymi o: wilgotności, ciśnieniu, temperaturze, zmianach pola magnetycznego.

Dane, które są zbierane na etapie kontrolowania byłyby bezwartościowe, gdybyśmy pominęli etap analizy, który powinien zaprezentować nam osiągi zbudowanego systemu uczenia maszynowego. Na podstawie analizy należy wyciągnąć wnioski, dzięki którym stwierdzimy czy system uczenia maszynowego spełnia wymogi biznesowe. Jest to również etap, w którym uwidaczniają się aspekty, które mogłyby zostać poprawione lub ulepszone w przyszłych wersjach systemu uczenia maszynowego.

Następnym etapem jest zarządzanie. Na podstawie wyników analizy podejmowane są odpowiednie decyzje, które są przekazywane dalej. Określane są potencjalne problemy i słabości zbudowanego systemu uczenia maszynowego, które powinny zostać poprawione. Możliwa jest również sytuacja, w której dotychczasowe bardzo dobre wyniki systemu uczenia maszynowego zaczną się pogarszać ze względu na nieprzewidzianą sytuację. Uwagi są przekazywane do działu produkcji, model uczenia maszynowego jest poprawiany, a cały proces rozpoczyna się na nowo.

Dolna warstwa modelu MLOps

Dolna warstwa modelu MLOps opisuje kluczowe komponenty, które umożliwiają działanie całego potoku MLOps. Do wspomnianych komponentów zaliczamy: dane, kod, artefakty, oprogramowanie pośredniczące, infrastrukturę.

W pełni zautomatyzowany sposób pracy jest osiągalny poprzez rozsądną optymalizację oraz synergię wymienionych komponentów. Wdrożenie zautomatyzowanego modelu MLOps znacząco zwiększa wydajność zespołu IT, który poświęca mniej czasu na poprawianie błędów oraz wykonywanie powtarzalnych zadań. Redukuje to znacząco koszty produkcji, co z biznesowego punktu widzenia jest korzystne dla obu stron – klienta i organizacji świadczącej usługi.

Schemat dolnej warstwy modelu MLOps

Dane

Dane mogą obejmować wiele formatów: od danych tekstowych po zdjęcia. W tradycyjnych aplikacjach dane są najczęściej ustrukturyzowane, a w aplikacjach wykorzystujących uczenie maszynowe nie jest to reguła – dane są bardzo często nieustrukturyzowane. Dane w systemach uczenia maszynowego przechodzą przez procesy takie jak: pozyskiwanie danych, katalogowanie danych, przygotowywanie danych, sprawdzanie jakości danych, dzielenie danych, poszerzanie zbioru danych. Są to kroki, które różnią sposób tworzenia tradycyjnego oprogramowania oraz sposób tworzenia oprogramowania uczenia maszynowego – w przypadku tego pierwszego opisywane działania z reguły nie są podejmowane, a w przypadku drugiego jest to niezbędne.

Kod

Kod w potokole MLOps można podzielić na trzy podstawowe części: kod do trenowania modelu uczenia maszynowego, kod do testowania modelu uczenia maszynowego oraz kod aplikacji. Do zarządzania kodem wykorzystywane są odpowiednie systemy (np. Git), które są bardzo ważne podczas integrowania kodu zgodnie z zasadami CI, CD oraz z potokami danych. Systemy zarządzania kodem umożliwiają wersjonowanie kodu, dzięki czemu jest on łatwiejszy w edycji i bezpieczniejszy.

Artefakty

Są to wszystkie elementy potoku MLOps, które zostały wygenerowane w trakcie jego działania. Działający potok MLOps generuje elementy takie jak: dane, wersjonowane modele, logi systemu, wskaźniki testowe. Każdy ze wspomnianych elementów jest użyteczny i zapewnia możliwość śledzenia zmian, które zostały wprowadzone podczas rozwoju potoku MLOps. Zarządzanie artefaktami odbywa się przy pomocy oprogramowania pośredniczącego, które umożliwia tworzenie registru systemu oraz środowiska pracy, zapisywanie logów, zarządzanie kodem źródłowym, tworzenie baz danych itd.

Oprogramowanie pośredniczące

Jest to oprogramowanie, które oferuje deweloperom poszczególne usługi wspomagające i ułatwiające tworzenie aplikacji komputerowych (w naszym przypadku systemu uczenia maszynowego). Dzięki stosowaniu oprogoramowania pośredniczącego możemy korzystać z funkcji, które nie są dostępne w systemach operacyjnych naszych komputerów. Omawiane oprogramowania umożliwiają automatyzację oraz organizację procesów niezbędnych do działania potoku MLOps. Przykładami oprogramowania pośredniczącego mogą być:

Grafiki przedstawiające od lewej - Git, czyli zarządzanie kodem źródłowym, Docker czyli konkretyzowanie modeli, Kubernetes czyli automatyzacja procesu wdrażania aplikacji.

Infrastruktura

Do stworzenia dobrze działającego potoku MLOps niezbędna jest odpowiednia infrastruktura, czyli: zasoby do trenowania i testowania modelu, zasoby produkcyjne oraz pamięć centralna. W uproszczeniu jest to fizyczny sprzęt komputerowy (lub korzystanie z rozwiązań chmurowych), który umożliwia nam tworzenie oprogramowania. Przykład: w pamięci centralnej składowane są informacje dotyczące logów, artefaktów, trenowania, testowania i monitorowania; zasoby do trenowania i testowania to możliwości obliczeniowe komputera, które umożliwiają rozwój modelu uczenia maszynowego.

Narzędzia wykorzystywane w modelu MLOps

W pełni działający potok MLOps wymaga wykorzystania odpowiednich narzędzi. Podczas omawiania samego modelu wspomnieliśmy o pewnych narzędziach, jednak w rzeczywistości jest ich znacznie więcej. W tym rozdziale zaprezentowane zostaną przykładowe narzędzia, które są wykorzystywane do poszczególnych zadań.

Niezbędną częścią każdego modelu uczenia maszynowego jest kod tworzony w językach programowania. Najczęściej wykorzystywanymi językami programowania w uczeniu maszynowym są R oraz Python . Przy wykorzystaniu odpowiednich bibliotek dostępnych w obu językach tworzenie modelu uczenia maszynowego przebiega znacznie szybciej. Do przykładowych bibliotek należą: Scikit-learn (Python) oraz Caret (R).

Nieodłącznym elementem współczesnego uczenia maszynowego są chmury obliczeniowe. Do najpopularniejszych chmur wykorzystywanych przy tworzeniu potoków MLOps należą: AWS Services, Microsoft Azure oraz Google Cloud Platform. Wszystkie wspomniane chmury udostępniają odpowiednią infrastrukturę oraz dodatkowe narzędzia, dzięki którym uczenie maszynowe staje się prostsze. Kolejną zaletą chmur obliczeniowych jest fakt, że nie musimy samodzielnie tworzyć i utrzymywać superkomputerów obsługujących procesy uczenia maszynowego.

Grafiki przedstawiające przykładowej chmury obliczeniowe: AWS Services, Microsoft Azure oraz Google Cloud Platform

Możemy wyróżnić wiele rodzajów oprogramowania pośredniczącego, które ułatwia pracę nad systemem uczenia maszynowego, jednak skupimy się na najważniejszych. Fundamentem każdego modelu uczenia maszynowego jest system zarządzania kodem, czego przykładem jest Git, który umożliwia tworzenie przyjaznego środowiska pracy oraz dba o bezpieczeństwo naszych plików. Istotnym etapem w potoku MLOps jest pakowanie i konteneryzacja poszczególnych wersji modelu uczenia maszynowego, do czego wykorzystywany jest Docker. Ważnym elementem w potoku MLOps jest rejestrowanie stworzonych modeli, które są gotowe do testów w środowisku przedprodukcyjnym. Umożliwia to uporządkowanie dokonanych zmian oraz w przyszłości ułatwia orientację w ewolucji projektu. Jest to etap, w którym pomaga MLflow. Kluczowym etapem w potoku MLOps jest również automatyzacja wdrażania aplikacji na produkcję, do czego wykorzystywany jest Kubernetes.

Podsumowanie

MLOps można rozumieć jako model, który wprowadza poprawne zasady i praktyki do środowiska pracy. Dzięki niemu sposób pracy nad projektem uczenia maszynowego jest zorganizowany i zautomatyzowany, co sprawia, że wdrażanie modeli uczenia maszynowego na produkcję jest prostsze, a same modele są wydajne i niezawodne.

Modele uczenia maszynowego są coraz bardziej skomplikowane i coraz częściej wykorzystywane w biznesie. Rozwój uczenia maszynowego oraz wzrost popularności zaczął stwarzać pewne problemy z wdrażaniem budowanych systemów uczenia maszynowego do produkcji. Rozwiązaniem wspomnianych problemów jest model MLOps, dzięki któremu coraz więcej systemów uczenia maszynowego odnosi sukces.

Data Science i uczenie maszynowe przechodzi przez etap, przez który przechodził rozwój oprogramowania (Software Development) na początku XXI wieku. Data Science jest wciąż młodą dziedziną, która stale się rozwija, a wprowadzenie modelu MLOps jest dużym krokiem w kierunku dojrzałości.

Model MLOps składa się z dwóch warstw: warstwy górnej oraz warstwy dolnej. Warstwa górna podzielona jest na trzy zsynchronizowane ze sobą moduły. Pierwszy moduł odpowiada za budowanie modelu uczenia maszynowego, drugi moduł odpowiada za wdrażanie modułu do środowiska produkcyjnego, a trzeci moduł monitoruje osiągi oraz zachowanie systemu w środowisku produkcyjnym.

Warstwa dolna składa się ze sterowników/komponentów, które umożliwiają tworzenie potoku MLOps. Wyróżnia się 5 elementów warstwy dolnej: dane, kod, artefakty, oprogramowanie pośredniczące oraz infrastrukturę. Odpowiednie wykorzystanie wymienionych elementów oraz ich synergia umożliwia funkcjonowanie potoku MLOps.

schemat MLOps

Prawidłowe funkcjonowanie potoku MLOps wymaga wykorzystania odpowiednich narzędzi. Każde z narzędzi wprowadza odpowiednią funkcjonalność oraz odpowiada za konkretne zadanie, a odpowiednia współpraca wykorzystywanych narzędzi tworzy cały system uczenia maszynowego. Do wykorzystywanych narzędzi należą między innymi: Python, R, chmury obliczeniowe, Git, Docker, MLflow, Kubernetes.

Wykorzystanie modelu MLOps w swoim środowisku pracy niesie za sobą wiele korzyści. Zespół rozwijający system uczenia maszynowego poświęca mniej czasu na poprawianiu błędów oraz wykonywaniu powtarzalnych zadań, a samym projektem znacznie łatwiej jest zarządzać. Przekłada się to na niższe koszty produkcji, co jest bardzo wartościowe dla klienta i usługodawcy. MLOps zyskuje na znaczeniu, coraz więcej organizacji stosuje jego zasady i praktyki, więc z pewnością jest to rzecz, którą warto poznać lub wprowadzić do swojej organizacji. Zapraszam do zapoznania się z ofertą naszych szkoleń, podczas których poznasz narzędzia wykorzystywane do budowania potoku MLOps. Oferujemy również szkolenie, które dotyczy bezpośrednio modelu MLOps.

Powyższy artykuł powstał na podstawie książek:
– E. Raj: Engineering MLOps
– N. Gift, A. Deza: Practical MLOps