Metodologia MLOps na potrzeby modeli języka Python z zastosowaniem usługi Azure Machine Learning

Blob Storage
Container Registry
Azure DevOps
Usługa Machine Learning
Pipelines

Ta architektura referencyjna pokazuje, jak zaimplementować ciągłą integrację (CI), ciągłe dostarczanie (CD) i ponownie trenować potok dla aplikacji sztucznej inteligencji przy użyciu usług Azure DevOps i Azure Machine Learning. Rozwiązanie jest oparte na zestawie danych cukrzycy scikit-learn, ale można je łatwo dostosować do dowolnego scenariusza sztucznej inteligencji i innych popularnych systemów kompilacji, takich jak Jenkins lub Travis.

Implementacja referencyjna dla tej architektury jest dostępna w usłudze GitHub.

Architektura

Diagram architektury metodyki DevOps usługi Machine Learning.

Pobierz plik programu Visio z tą architekturą.

Przepływ pracy

Ta architektura składa się z następujących usług:

Azure Pipelines. Ten system kompilacji i testowania jest oparty na usłudze Azure DevOps i używany do potoków kompilacji i wydania. Usługa Azure Pipelines dzieli te potoki na kroki logiczne nazywane zadaniami. Na przykład zadanie interfejsu wiersza polecenia platformy Azure ułatwia pracę z zasobami platformy Azure.

Azure Machine Learning to usługa w chmurze służąca do trenowania, oceniania, wdrażania i zarządzania modelami uczenia maszynowego na dużą skalę. Ta architektura używa zestawu SDK języka Python usługi Azure Machine Learning do tworzenia obszaru roboczego, zasobów obliczeniowych, potoku uczenia maszynowego i obrazu oceniania. Obszar roboczy usługi Azure Machine Learning udostępnia przestrzeń, w której można eksperymentować, trenować i wdrażać modele uczenia maszynowego.

Usługa Azure Machine Learning Compute to klaster maszyn wirtualnych na żądanie z opcjami automatycznego skalowania i procesora GPU i węzła procesora CPU. Zadanie trenowania jest wykonywane w tym klastrze.

Potoki usługi Azure Machine Learning udostępniają przepływy pracy uczenia maszynowego wielokrotnego użytku, które mogą być ponownie używane w scenariuszach. Trenowanie, ewaluacja modelu, rejestracja modelu i tworzenie obrazu odbywa się w odrębnych krokach w ramach tych potoków dla tego przypadku użycia. Potok jest publikowany lub aktualizowany na końcu fazy kompilacji i jest wyzwalany po nadejściu nowych danych.

Azure Blob Storage. Kontenery obiektów blob są używane do przechowywania dzienników z usługi oceniania. W tym przypadku zbierane są zarówno dane wejściowe, jak i przewidywanie modelu. Po pewnym przekształceniu te dzienniki mogą służyć do ponownego trenowania modelu.

Azure Container Registry. Skrypt języka Python oceniania jest spakowany jako obraz platformy Docker i wersjonowany w rejestrze.

Azure Container Instances. W ramach potoku wydania środowisko kontroli jakości i środowiska przejściowego jest naśladowane przez wdrożenie obrazu usługi internetowej oceniania w celu Container Instances, co zapewnia łatwy, bezserwerowy sposób uruchamiania kontenera.

Azure Kubernetes Service. Gdy obraz oceniania usługi internetowej zostanie dokładnie przetestowany w środowisku KONTROLI jakości, zostanie wdrożony w środowisku produkcyjnym w zarządzanym klastrze Kubernetes.

aplikacja systemu Azure Insights. Ta usługa monitorowania służy do wykrywania anomalii wydajności.

Potok METODYki MLOps

To rozwiązanie demonstruje kompleksową automatyzację różnych etapów projektu sztucznej inteligencji przy użyciu narzędzi, które są już znane inżynierom oprogramowania. Problem z uczeniem maszynowym jest prosty, aby skupić się na potoku DevOps. Rozwiązanie korzysta z zestawu danych cukrzycy scikit-learn i tworzy model regresji liniowej grzbietu w celu przewidywania prawdopodobieństwa cukrzycy. Aby uzyskać szczegółowe informacje, zobacz Szkolenie modeli scikit-learn języka Python .

To rozwiązanie jest oparte na następujących trzech potokach:

  • Potok kompilacji. Kompiluje kod i uruchamia zestaw testów.
  • Ponowne trenowanie potoku. Ponownie szkoli model zgodnie z harmonogramem lub gdy nowe dane staną się dostępne.
  • Potok wydania. Operacjonalizuje obraz oceniania i promuje go bezpiecznie w różnych środowiskach.

W następnych sekcjach opisano każdy z tych potoków.

Potok kompilacji

Potok ciągłej integracji jest wyzwalany za każdym razem, gdy kod jest zaewidencjonowywany. Publikuje on zaktualizowany potok usługi Azure Machine Learning po skompilowaniu kodu i uruchomieniu pakietu testów. Potok kompilacji składa się z następujących zadań:

  • Jakość kodu. Testy te zapewniają zgodność kodu ze standardami zespołu.

  • Test jednostkowy. Te testy sprawdzają, czy kod działa, ma odpowiednie pokrycie kodu i jest stabilny.

  • Test danych. Te testy sprawdzają, czy próbki danych są zgodne z oczekiwanym schematem i dystrybucją. Dostosuj ten test pod kątem innych przypadków użycia i uruchom go jako oddzielny potok sanity danych, który jest wyzwalany w miarę nadejścia nowych danych. Na przykład przenieś zadanie testowania danych do potoku pozyskiwania danych , aby można je było przetestować wcześniej.

Uwaga

Należy rozważyć włączenie praktyk DevOps dla danych używanych do trenowania modeli uczenia maszynowego, ale nie zostało to omówione w tym artykule. Aby uzyskać więcej informacji na temat architektury i najlepszych rozwiązań dotyczących ciągłej integracji/ciągłego wdrażania potoku pozyskiwania danych, zobacz DevOps dla potoku pozyskiwania danych.

Podczas konfigurowania infrastruktury dla usługi Azure Machine Learning i zestawu SDK języka Python są wykonywane następujące jednorazowe zadania:

  • Utwórz obszar roboczy hostujący wszystkie zasoby związane z usługą Azure Machine Learning.
  • Utwórz zasoby obliczeniowe uruchamiające zadanie trenowania.
  • Utwórz potok uczenia maszynowego za pomocą zaktualizowanego skryptu trenowania.
  • Opublikuj potok uczenia maszynowego jako punkt końcowy REST, aby zorganizować przepływ pracy trenowania. W następnej sekcji opisano ten krok.

Ponowne trenowanie potoku

Potok uczenia maszynowego organizuje proces ponownego trenowania modelu w sposób asynchroniczny. Ponowne trenowanie może być wyzwalane według harmonogramu lub po udostępnieniu nowych danych przez wywołanie opublikowanego punktu końcowego REST potoku z poprzedniego kroku.

Ten potok obejmuje następujące kroki:

  • Trenowanie modelu. Skrypt trenowania języka Python jest wykonywany na zasobie obliczeniowym usługi Azure Machine Learning, aby uzyskać nowy plik modelu , który jest przechowywany w historii uruchamiania. Ponieważ szkolenie jest najbardziej wymagającym obliczeń zadaniem w projekcie sztucznej inteligencji, rozwiązanie korzysta z usługi Azure Machine Learning Compute.

  • Ocena modelu. Prosty test oceny porównuje nowy model z istniejącym modelem. Tylko wtedy, gdy nowy model jest lepszy, jest promowany. W przeciwnym razie model nie jest zarejestrowany i potok zostanie anulowany.

  • Zarejestruj model. Model ponownie trenowany jest rejestrowany w rejestrze modeli usługi Azure ML. Ta usługa zapewnia kontrolę wersji modeli wraz z tagami metadanych, dzięki czemu można je łatwo odtworzyć.

Potok wydania

Ten potok pokazuje, jak operacjonalizować obraz oceniania i bezpiecznie promować go w różnych środowiskach. Ten potok jest podzielony na dwa środowiska: QA i production:

Środowisko kontroli jakości

  • Wyzwalacz artefaktu modelu. Potoki wydania są wyzwalane za każdym razem, gdy jest dostępny nowy artefakt. Nowy model zarejestrowany w usłudze Azure Machine Learning Model Management jest traktowany jako artefakt wydania. W takim przypadku potok jest wyzwalany dla każdego nowego modelu jest rejestrowany.

  • Utwórz obraz oceniania. Zarejestrowany model jest spakowany wraz ze skryptem oceniania i zależnościami języka Python (plik COnda YAML) do obrazu platformy Docker operacjonalizacji. Obraz jest automatycznie wersjonowany za pomocą usługi Azure Container Registry.

  • Wdróż w Container Instances. Ta usługa służy do tworzenia środowiska nieprodukcyjnego. Obraz oceniania jest również wdrażany w tym miejscu i jest używany głównie do testowania. Container Instances zapewnia łatwy i szybki sposób testowania obrazu platformy Docker.

  • Testowanie usługi internetowej. Prosty test interfejsu API zapewnia pomyślne wdrożenie obrazu.

Środowisko produkcyjne

  • Wdróż w Azure Kubernetes Service. Ta usługa służy do wdrażania obrazu oceniania jako usługi internetowej na dużą skalę w środowisku produkcyjnym.

  • Testowanie usługi internetowej. Prosty test interfejsu API zapewnia pomyślne wdrożenie obrazu.

Zagadnienia do rozważenia

Te zagadnienia implementują filary platformy Azure Well-Architected Framework, która jest zestawem podstawowych zestawów, które mogą służyć do poprawy jakości obciążenia. Aby uzyskać więcej informacji, zobacz Microsoft Azure Well-Architected Framework.

Skalowalność

Potok kompilacji w usłudze Azure DevOps można skalować pod kątem aplikacji o dowolnym rozmiarze. Potoki kompilacji mają maksymalny limit czasu, który różni się w zależności od agenta, na którego są uruchamiane. Kompilacje mogą działać na zawsze na własnych agentach (agenci prywatni). W przypadku Microsoft hostowanych agentów dla projektu publicznego kompilacje mogą działać przez sześć godzin. W przypadku projektów prywatnych limit wynosi 30 minut.

Aby użyć maksymalnego limitu czasu, ustaw następującą właściwość w pliku YAML usługi Azure Pipelines :

jobs:
- job: <job_name>
  timeoutInMinutes: 0

Najlepiej jest szybko zakończyć potok kompilacji i wykonać tylko testy jednostkowe i podzbiór innych testów. Dzięki temu można szybko zweryfikować zmiany i rozwiązać je, jeśli wystąpią problemy. Uruchamianie długotrwałych testów poza godzinami pracy.

Potok wydania publikuje usługę internetową oceniania w czasie rzeczywistym. Wydanie środowiska QA jest wykonywane przy użyciu Container Instances dla wygody, ale można użyć innego klastra Kubernetes działającego w środowisku qa/staging.

Skaluj środowisko produkcyjne zgodnie z rozmiarem klastra Azure Kubernetes Service. Rozmiar klastra zależy od oczekiwanego obciążenia wdrożonej usługi internetowej oceniania. W przypadku architektur oceniania w czasie rzeczywistym przepływność jest kluczową metryką optymalizacji. W przypadku scenariuszy nienależących do uczenia głębokiego procesor CPU powinien być wystarczający do obsługi obciążenia; jednak w przypadku obciążeń uczenia głębokiego, gdy szybkość jest wąskim gardłem, procesory GPU ogólnie zapewniają lepszą wydajność w porównaniu z procesorami CPU. Azure Kubernetes Service obsługuje zarówno typy węzłów procesora CPU, jak i procesora GPU, dlatego to rozwiązanie używa go do wdrożenia obrazu. Aby uzyskać więcej informacji, zobacz Procesory GPU a procesory CPU w celu wdrożenia modeli uczenia głębokiego.

Skaluj potok ponownego trenowania w górę i w dół w zależności od liczby węzłów w zasobie obliczeniowym usługi Azure Machine Learning i użyj opcji skalowania automatycznego do zarządzania klastrem. Ta architektura używa procesorów CPU. W przypadku obciążeń uczenia głębokiego procesory GPU są lepszym wyborem i są obsługiwane przez usługę Azure Machine Learning Compute.

Zarządzanie

  • Monitorowanie zadania ponownego trenowania. Potoki uczenia maszynowego organizują ponowne trenowanie w klastrze maszyn i zapewniają łatwy sposób ich monitorowania. Użyj interfejsu użytkownika usługi Azure Machine Learning i zapoznaj się z sekcją potoków dla dzienników. Alternatywnie te dzienniki są również zapisywane w obiekcie blob i mogą być odczytywane z tego obszaru, a także przy użyciu narzędzi, takich jak Eksplorator usługi Azure Storage.

  • Rejestrowania. Usługa Azure Machine Learning umożliwia łatwe rejestrowanie w każdym kroku cyklu życia uczenia maszynowego. Dzienniki są przechowywane w kontenerze obiektów blob. Aby uzyskać więcej informacji, zobacz Włączanie rejestrowania w usłudze Azure Machine Learning. Aby uzyskać bardziej zaawansowane monitorowanie, skonfiguruj usługę Application Insights do korzystania z dzienników.

  • Zabezpieczenia. Wszystkie wpisy tajne i poświadczenia są przechowywane w usłudze Azure Key Vault i dostępne w usłudze Azure Pipelines przy użyciu grup zmiennych.

Optymalizacja kosztów

Optymalizacja kosztów dotyczy sposobów zmniejszenia niepotrzebnych wydatków i poprawy wydajności operacyjnej. Aby uzyskać więcej informacji, zobacz Omówienie filaru optymalizacji kosztów.

Usługa Azure DevOps jest bezpłatna dla projektów open source i małych projektów z maksymalnie pięcioma użytkownikami. W przypadku większych zespołów kup plan na podstawie liczby użytkowników.

Obliczenia są największym czynnikiem kosztu w tej architekturze, a jego koszt różni się w zależności od przypadku użycia. Ta architektura korzysta z usługi Azure Machine Learning Compute, ale dostępne są inne opcje . Usługa Azure Machine Learning nie dodaje żadnych dodatkowych opłat na podstawie kosztów maszyn wirtualnych opartych na klastrze obliczeniowym. Skonfiguruj klaster obliczeniowy, aby miał co najmniej 0 węzłów, dzięki czemu w przypadku braku użycia można skalować w dół do 0 węzłów i nie ponosić żadnych kosztów. Koszt obliczeniowy zależy od typu węzła, liczby węzłów i trybu aprowizacji (niski priorytet lub dedykowany). Koszt usługi Machine Learning i innych usług można oszacować przy użyciu kalkulatora cen platformy Azure.

Wdrażanie tego scenariusza

Aby wdrożyć tę architekturę referencyjną, wykonaj kroki opisane w przewodniku Wprowadzenie w repozytorium GitHub.

Współautorzy

Ten artykuł jest obsługiwany przez Microsoft. Pierwotnie został napisany przez następujących współautorów.

Główny autor:

Aby wyświetlić niepubliowe profile usługi LinkedIn, zaloguj się do serwisu LinkedIn.

Następne kroki