Każdy, kto próbował rozwoju uczenia maszynowego, rozumie, jakie to trudne. Oprócz standardowych problemów w tworzeniu oprogramowania, uczenie maszynowe (ML) wprowadza szereg dodatkowych przeszkód.
Dostępne są setki narzędzi typu open source, które pomagają na każdym etapie cyklu życia ML, od przygotowania danych po uczenie modeli.
W przeciwieństwie do tradycyjnego tworzenia oprogramowania, gdy zespoły wybierają jedno narzędzie dla każdego kroku, w przypadku ML zazwyczaj chcesz zbadać każde dostępne narzędzie (np. algorytm), aby sprawdzić, czy poprawia wyniki.
W rezultacie programiści ML muszą używać i tworzyć setki bibliotek.
Algorytmy uczenia maszynowego zawierają tysiące konfigurowalnych parametrów i trudno jest określić, które parametry, kod i dane zostały wykorzystane w każdym eksperymencie, aby wygenerować model, niezależnie od tego, czy pracujesz sam, czy w zespole.
Bez odpowiedniego monitorowania zespoły często mają trudności z przywróceniem działania tego samego kodu. Niezależnie od tego, czy jesteś naukowcem zajmującym się danymi przesyłającymi kod szkoleniowy do inżyniera w celu użycia w produkcji, czy też wracasz do poprzedniej pracy w celu zdiagnozowania problemu, cofanie kroków przepływu pracy ML ma kluczowe znaczenie.
Przeniesienie modelu do środowiska produkcyjnego może być trudne ze względu na liczne metody wdrażania i środowiska, których należy użyć (np. obsługa REST, wnioskowanie wsadowe lub aplikacje mobilne). Nie ma wspólnej metody przenoszenia modeli z dowolnej biblioteki do któregokolwiek z tych narzędzi, a zatem każde nowe wdrożenie wiąże się z ryzykiem.
Z powodu tych problemów oczywiste jest, że rozwój ML musi znacznie się poprawić, aby stać się tak stabilnym, przewidywalnym i szeroko stosowanym jak tradycyjne tworzenie oprogramowania.
Wyzwania ML
- Istnieje mnóstwo różnych narzędzi. Dostępne są setki rozwiązań programowych, które pomagają na każdym etapie cyklu życia uczenia maszynowego, od przygotowania danych po uczenie modeli. Ponadto, w przeciwieństwie do tradycyjnego tworzenia oprogramowania, gdy zespoły wybierają jedno narzędzie dla każdego kroku, w uczeniu maszynowym (ML) często chcesz zbadać każde dostępne narzędzie (np. algorytm), aby sprawdzić, czy poprawia wyniki. W rezultacie programiści ML muszą używać i tworzyć setki bibliotek.
- Trudno jest śledzić eksperymenty. Algorytmy uczenia maszynowego zawierają tysiące konfigurowalnych parametrów i trudno jest określić, które parametry, kod i dane zostały wykorzystane w każdym eksperymencie, aby wygenerować model, niezależnie od tego, czy pracujesz sam, czy w zespole.
- Wdrażanie uczenia maszynowego jest trudne. Przeniesienie modelu do środowiska produkcyjnego może być trudne ze względu na liczne metody wdrażania i środowiska, których należy użyć (np. obsługa REST, wnioskowanie wsadowe lub aplikacje mobilne). Nie ma wspólnej metody przenoszenia modeli z dowolnej biblioteki do któregokolwiek z tych narzędzi. Dlatego każde nowe wdrożenie niesie ze sobą ryzyko.
Co to jest MLflow?
MLflow to platforma typu open source dla cyklu życia uczenia maszynowego. Opiera się na koncepcji otwartego interfejsu, proponując wiele istotnych abstrakcji, które umożliwiają łatwą integrację obecnej infrastruktury i algorytmów uczenia maszynowego z systemem.
Oznacza to, że jeśli jesteś programistą, który chce korzystać z MLflow, ale korzysta z nieobsługiwanej struktury, projekt otwartego interfejsu sprawia, że stosunkowo łatwo jest zintegrować tę strukturę i rozpocząć pracę z platformą. W praktyce oznacza to, że MLflow ma działać z dowolnymi uczenie maszynowe biblioteka lub język.
Ponadto MLflow promuje powtarzalność, co oznacza, że ten sam kod uczenia maszynowego lub produkcyjnego uczenia maszynowego ma działać z tymi samymi wynikami niezależnie od środowiska, czy to w chmurze, na lokalnej stacji roboczej, czy w notebooku.
Wreszcie, MLflow jest zbudowany z myślą o skalowalności, dzięki czemu może być używany przez mały zespół naukowców zajmujących się danymi, a także dużą firmę z setkami praktyków uczenia maszynowego.
MLflow jest zgodny z dowolną biblioteką uczenia maszynowego, algorytmem, narzędziem wdrażania lub językiem. Ma również następujące zalety:
- Zaprojektowany do współpracy z dowolną usługą w chmurze.
- Skalowanie do ogromnych danych dzięki Apache Spark.
- MLflow jest kompatybilny z różnymi platformami uczenia maszynowego typu open source, w tym Apache Spark, TensorFlow, Nauka SciKit.
Jeśli masz już kod, MLflow może być z nim używany. Możesz nawet udostępniać swoje ramy i modele między przedsiębiorstwami, ponieważ jest to open-source.
Komponenty MLflow: jak działają?
MLflow to bezpłatna platforma typu open source do zarządzania cyklem życia ML, która obejmuje eksperymentowanie, odtwarzalność, wdrażanie i rejestr jednego modelu. Obecnie MLflow składa się z czterech komponentów:
1. Śledzenie MLflow
Zacznę od śledzenia MLflow. MLflow obsługuje gromadzenie różnych podstawowych koncepcji powiązanych ze scentralizowanym repozytorium śledzenia metadanych szkoleniowych. Pierwszym pojęciem jest zbiór krytycznych hiperparametrów lub pokręteł konfiguracyjnych, które wpływają na wydajność modelu. Korzystanie z interfejsów API MLflow i scentralizowanej usługi śledzenia może zachować wszystkie te elementy.
Użytkownicy mogą również rejestrować dane dotyczące wydajności, aby uzyskać wgląd w sukces swoich modeli uczenia maszynowego. Ponadto, w celu zapewnienia powtarzalności, MLflow umożliwia użytkownikom rejestrowanie określonego kodu źródłowego, który został użyty do stworzenia modelu, a także jego wersji poprzez ścisłą integrację z Git, aby powiązać każdy model z określonym hashem zatwierdzenia.
MLflow może służyć do rejestrowania artefaktów, które są dowolnymi plikami, w tym szkoleniami, danymi testowymi i samymi modelami w celu zapewnienia odtwarzalności.
Oznacza to, że jeśli jestem programistą, który właśnie wytrenował model, mogę utrwalić go w scentralizowanej usłudze śledzenia, a jeden z moich kolegów może go później załadować i kontynuować szkolenie i eksperymentowanie lub produkcję tego modelu w celu spełnienia określonych potrzeb .
Podczas wykonywania kodu uczenia maszynowego, a następnie przeglądania wyników, śledzenie to interfejs API, który umożliwia rejestrowanie parametrów, wersji kodu, metryk i plików wyjściowych. Jest napisany między innymi w Pythonie, R i Javie. Jest również dostępny jako REST API, którego można używać do tworzenia aplikacji na jego bazie.
Podstawowe dane
- Wielu programistów używa MLflow na swoich lokalnych komputerach PC, gdzie zaplecze i pamięć artefaktów współdzielą katalog na dysku.
- Wielu użytkowników używa również SQLite, bazy danych zgodnej z SQLAlchemy, aby uruchamiać MLflow na swoich lokalnych komputerach.
- MLflow obsługuje również architektury rozproszone. Serwer śledzenia, magazyn zaplecza i magazyn artefaktów są hostowane na różnych serwerach.
- Jeśli uruchomienie zostało zainicjowane przez projekt MLflow, wykorzystano skrót git commit. Interfejsy API MLflow Python, R, Java i REST mogą służyć do rejestrowania danych do uruchomienia.
Więcej informacji można znaleźć w oficjalnym dokumentacja.
2. Projekty MLFlow
Po omówieniu komponentów śledzenia chciałbym opowiedzieć o projektach MLflow, które są powtarzalną strukturą pakowania dla sesji szkoleniowych modelu niezależnie od kontekstu wykonania.
Firmy korzystają z szerokiej gamy technologii szkoleniowych z zakresu uczenia maszynowego, ale korzystają również z tych narzędzi szkoleniowych w różnych kontekstach. Na przykład mogą wykonywać swój kod szkoleniowy w chmurze, na lokalnym komputerze PC lub w notebooku.
Prowadzi to do problemu, że wyniki uczenia maszynowego są trudne do odtworzenia. Często ten sam identyczny kod uczący nie wykonuje lub nie daje tych samych wyników w dwóch oddzielnych lokalizacjach.
Rozwiązanie dostarczane przez MLflow to samodzielna definicja projektu kodu szkoleniowego, która zawiera cały kod szkoleniowy uczenia maszynowego, a także jego zależności biblioteki wersji, ustawienia oraz dane szkoleniowe i testowe.
MLflow zapewnia powtarzalność w różnych kontekstach wykonania, wyraźnie opisując cały zestaw wymagań dotyczących procesu uczenia maszynowego. Osiąga to, instalując wszystkie te biblioteki i osiągając ten sam stan systemu, w którym działa kod.
Projekt MLflow to nic innego jak katalog. Jest to katalog, który zawiera kod szkoleniowy, definicję zależności biblioteki i inne dane potrzebne do sesji szkoleniowej, a także ten opcjonalny plik konfiguracyjny.
Te wymagania biblioteczne można definiować na wiele sposobów. Użytkownicy mogą na przykład dostarczyć specyfikację środowiska anakondy w formacie YAML, aby wymienić swoje wymagania dotyczące biblioteki kodu szkoleniowego. MLflow wykona kod szkolenia w kontenerze. W takim przypadku mogą również zawierać kontener Docker.
Wreszcie, MLflow ma interfejs wiersza poleceń (CLI) do uruchamiania tych projektów, a także interfejsy API Pythona i Java. Projekty te mogą być uruchamiane w lokalnym systemie użytkownika, a także w różnych zdalnych ustawieniach, takich jak harmonogram zadań Databricks i Kubernetes. Projekty MLflow umożliwiają pakowanie kodu data science w sposób powtarzalny i wielokrotnego użytku, w większości oparty na standardach.
Komponent projektów zawiera interfejs API oraz narzędzia wiersza polecenia do zarządzania projektami. Te możliwości gwarantują, że projekty mogą być połączone w łańcuchy, tworząc procesy uczenia maszynowego.
Podstawowe dane
- MLflow obsługuje środowiska projektowe, w tym środowisko kontenera Docker, środowisko Conda i środowisko systemowe.
- Dowolne repozytorium Git lub katalog lokalny można uznać za projekt MLflow; domyślnie; możesz użyć dowolnej powłoki lub Skrypt Pythona w katalogu jako punkt wejścia projektu.
- Zależności inne niż Python, takie jak biblioteki Java, można przechwytywać za pomocą kontenerów Docker.
- Możesz uzyskać większą kontrolę nad projektem MLflow, dodając plik projektu do katalogu głównego projektu, który jest plikiem tekstowym w składni YAML.
Więcej informacji można znaleźć w oficjalnym dokumentacja.
3. Modele MLflow
Teraz chciałbym omówić modele MLflow, format modelu ogólnego przeznaczenia, który obsługuje szeroki zakres kontekstów produkcyjnych. Powód modeli MLflow jest teraz dość podobny do tego w przypadku projektów.
Ponownie widzimy, że modele można generować przy użyciu szerokiej gamy narzędzi, ale można je również tworzyć lub wdrażać w wielu sytuacjach, w przeciwieństwie do środowisk szkoleniowych.
Ustawienia te obejmują narzędzia do obsługi w czasie rzeczywistym, takie jak Kubernetes lub Amazon SageMaker, a także strumieniowanie i ocenianie wsadowe, takie jak Spark. Ponadto niektóre firmy mogą zdecydować się na wdrożenie modeli jako usługi sieciowej RESTful działającej na wstępnie skonfigurowanej instancji w chmurze.
Model MLflow, podobnie jak projekt, jest strukturą katalogów. Zawiera plik konfiguracyjny i tym razem zserializowany artefakt modelu zamiast kodu szkoleniowego. Zawiera również ten zestaw zależności dla powtarzalności jako projektu. Tym razem przyjrzymy się zależnościom oceny w kontekście środowiska Conda.
Ponadto MLflow zawiera narzędzia do generowania modeli do serializacji modeli w formacie MLflow z szeregu popularnych platform. Wreszcie, MLflow dodaje wdrożenia, interfejsy API do produkcji i łączenia dowolnego modelu MLflow z szeregiem usług, a te interfejsy API są dostępne w języku Python, Java, R i formacie CLI.
Modele są komponentem o standardowej strukturze do pakowania modeli, które mogą być używane i rozumiane przez dalsze narzędzia, takie jak serwery wnioskowania lub Pamięci danych platforma wnioskowania wsadowego. Ten komponent oszczędza godziny kodu na zamówienie podczas pakowania modelu do produkcji.
Model MLflow to standard pakowania modeli uczenia maszynowego w różnych formach zwanych „smakami”. MLflow udostępnia wiele narzędzi, które pomogą Ci we wdrażaniu różnych typów modeli. Każdy model MLflow jest przechowywany jako katalog zawierający dowolne pliki, a także plik deskryptora modelu ML z listą smaków, w których może być używany.
Podstawowe dane
- Wszystkie wbudowane narzędzia wdrażania MLflow oferują wiele „standardowych” smaków, takich jak „funkcja Pythona”, która wyjaśnia, jak uruchomić model jako funkcję Pythona.
- Każdy model MLflow składa się z katalogu zawierającego dowolne pliki, a także z pliku modelu ML w katalogu głównym, który definiuje liczne odmiany modelu.
- Podczas przechowywania modelu MLflow umożliwia określenie parametru środowiska Conda, który zawiera zależności modelu. Jeśli nie określono środowiska Conda, tworzone jest środowisko domyślne oparte na smaku modelu. Następnie środowisko Conda jest przechowywane w conda.yaml.
Więcej informacji można znaleźć w oficjalnym dokumentacja.
4. Rejestr modeli MLflow
Rejestr modeli to repozytorium wyuczonych modeli uczenia maszynowego (ML). Rejestr modeli składa się z interfejsów API i aplikacji internetowej, która służy do utrzymywania modeli w różnych fazach jako zespół. Pochodzenie modelu, wersjonowanie modelu, łatwe przejście między etapami i adnotacja to tylko niektóre z możliwości dostępnych w Rejestrze modeli.
Rejestr modeli, oprócz samych modeli, zawiera informacje (metadane) o danych i zadaniach szkoleniowych użytych do budowy modelu. Bardzo ważne jest, aby śledzić te wymagane dane wejściowe, aby stworzyć rodowód modeli ML. Pod tym względem rejestr modelowy działa podobnie do tradycyjnego oprogramowania kontrola wersji systemy (np. Git, SVN) i repozytoria artefaktów (np. Artifactory, PyPI).
Rejestr modeli to platforma, która umożliwia analitykom danych i inżynierom uczenia maszynowego publikowanie, testowanie, monitorowanie, zarządzanie i dystrybucję swoich modeli w celu współpracy z innymi zespołami. Zasadniczo rejestr modeli jest używany, gdy zakończysz fazę testowania i będziesz gotowy do dzielenia się swoimi odkryciami z zespołem i interesariuszami.
Rejestr modeli MLflow zapewnia interfejs API i interfejs użytkownika do zarządzania modelami i ich żywotnością z centralnej lokalizacji. Pochodzenie modelu, wersjonowanie modelu, adnotacje i przejścia między etapami są dostępne za pośrednictwem rejestru.
W MLflow zarejestrowany model to taki, który ma unikalną nazwę i metadane, wersje modeli, fazy przejściowe i rodowód modelu. W zarejestrowanym modelu można znaleźć jedną lub więcej wersji modelu. Nowy model jest uważany za wersję 1, gdy jest zarejestrowany w rejestrze. Do każdego nowego modelu o tej samej nazwie dodawana jest następująca wersja.
W dowolnym momencie możesz przypisać jeden krok do dowolnej wersji modelu. Jednak etapy muszą być przypisane w ramach faz MLflow, które zostały formalnie określone, takie jak przygotowanie, produkcja i archiwizacja. Wersję modelu można przenosić z jednego etapu na drugi.
MLflow umożliwia używanie przecen do opisywania zarówno modelu najwyższego poziomu, jak i każdej konkretnej wersji. Możesz dołączyć opisy, a także inne istotne informacje, takie jak wyjaśnienia algorytmów, metodologia i używane zestawy danych.
Podstawowe dane
- Aby uzyskać dostęp do rejestru modeli za pośrednictwem interfejsu użytkownika lub interfejsu API podczas hostowania własnego serwera MLflow, musisz użyć magazynu zaplecza opartego na bazie danych.
- Dostęp do Rejestru modeli można również uzyskać za pośrednictwem wersji modelu MLflow lub interfejsu MLflow Client Tracking API. Możesz na przykład zarejestrować model podczas trwania eksperymentu MLflow lub po każdym uruchomieniu eksperymentu.
- Nie każdy zacznie trenować swoje modele za pomocą MLflow. W rezultacie niektóre modele mogą zostać przeszkolone przed użyciem MLflow. Zamiast ponownie trenować modele, po prostu chcesz zarejestrować swoje przechowywane modele w Rejestrze modeli.
Więcej informacji można znaleźć w oficjalnym dokumentacja.
Wnioski
MLflow to doskonałe i stale rozwijające się narzędzie cyklu życia ML. Możesz go używać wraz z obecnymi narzędziami i platformami.
Obsługuje kilka języków programowania, w tym Python, Java i R. Możesz także szybko śledzić, zapisywać i porównywać różne wersje modeli dzięki przyjaznej dla użytkownika konstrukcji.
Wypróbuj MLflow i daj nam znać o swoich doświadczeniach!
Dodaj komentarz