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

Azure Blob Storage
Azure Container Registry
Azure DevOps
Azure Machine Learning
Azure Pipelines

Ta architektura referencyjna pokazuje, jak zaimplementować ciągłą integrację (CI), ciągłe dostarczanie (CD) i potok ponownego trenowania dla aplikacji sztucznej inteligencji przy użyciu usług Azure DevOps i Azure Machine Edukacja. 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 usługi Machine Edukacja DevOps.

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 Edukacja 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 AZURE Machine Edukacja Python SDK do tworzenia obszaru roboczego, zasobów obliczeniowych, potoku uczenia maszynowego i obrazu oceniania. Obszar roboczy usługi Azure Machine Edukacja zapewnia przestrzeń, w której można eksperymentować, trenować i wdrażać modele uczenia maszynowego.

Usługa Azure Machine Edukacja 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 Edukacja zapewniają przepływy pracy uczenia maszynowego wielokrotnego użytku, które mogą być ponownie używane w różnych 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żą do przechowywania dzienników z usługi oceniania. W takim 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 usłudze 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 QA, zostanie wdrożony w środowisku produkcyjnym w zarządzanym klastrze Kubernetes.

aplikacja systemu Azure Szczegółowe informacje. Ta usługa monitorowania służy do wykrywania anomalii wydajności.

Potok 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 używa zestawu danych scikit-learn diabetes i tworzy model regresji liniowej grzbietu w celu przewidywania prawdopodobieństwa cukrzycy.

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

  • Potok kompilacji. Kompiluje kod i uruchamia zestaw testów.
  • Ponowne trenowanie potoku. Ponownie wytrenuje 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. Te testy zapewniają, że kod jest zgodny ze standardami zespołu.

  • Test jednostkowy. Te testy umożliwiają upewnienie się, że 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 zostanie wyzwolony po nadejściu 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 Edukacja 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 Edukacja.
  • Utwórz zasoby obliczeniowe, które uruchamiają 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 usługi Azure Machine Edukacja Compute, aby uzyskać nowy plik modelu przechowywany w historii uruchamiania. Ponieważ szkolenie jest najbardziej wymagającym obliczeń zadaniem w projekcie sztucznej inteligencji, rozwiązanie korzysta z usługi Azure Machine Edukacja 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 zarejestrowany w rejestrze usługi Azure Machine Edukacja Model. Ta usługa zapewnia kontrolę wersji dla modeli wraz z tagami metadanych, dzięki czemu można je łatwo odtworzyć.

Potok wydania

W tym potoku pokazano, 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 Edukacja 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 pakowany wraz ze skryptem oceniania i zależnościami języka Python (plik YAML Conda) do obrazu platformy Docker operacjonalizacji. Obraz jest automatycznie wersjonowany za pomocą usługi Azure Container Registry.

  • Wdrażanie w usłudze 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. Usługa 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

  • Wdrażanie w usłudze 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.

Kwestie wymagające rozważenia

Te zagadnienia implementują filary struktury Azure Well-Architected Framework, która jest zestawem wytycznych, 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 przeskalować dla aplikacji o dowolnym rozmiarze. Potoki kompilacji mają maksymalny limit czasu, który różni się w zależności od uruchomionego agenta. Kompilacje mogą działać na zawsze na własnych agentach (agenci prywatni). W przypadku agentów hostowanych przez firmę Microsoft dla projektu publicznego kompilacje mogą być uruchamiane 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, aby potok kompilacji zakończył się szybko i wykonywał tylko testy jednostkowe i podzbiór innych testów. Dzięki temu można szybko zweryfikować zmiany i rozwiązać je w przypadku wystąpienia problemów. Uruchamianie długotrwałych testów poza godzinami pracy.

Potok wydania publikuje usługę internetową oceniania w czasie rzeczywistym. Wydanie środowiska QA odbywa się z użyciem usługi Container Instances dla wygody, ale możesz użyć innego klastra Kubernetes działającego w środowisku QA/przejściowym.

Skaluj środowisko produkcyjne zgodnie z rozmiarem klastra usługi 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 uczenia innego niż głębokie 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 zwykle zapewniają lepszą wydajność w porównaniu z procesorami CPU. Usługa 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 wdrażania obrazów. Aby uzyskać więcej informacji, zobacz Procesory GPU i procesory CPU na potrzeby wdrażania 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 usługi Azure Machine Edukacja Compute i użyj opcji skalowania automatycznego do zarządzania klastrem. Ta architektura korzysta z procesorów CPU. W przypadku obciążeń uczenia głębokiego procesory GPU są lepszym wyborem i są obsługiwane przez usługę Azure Machine Edukacja 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 Edukacja 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 miejsca, a także przy użyciu narzędzi, takich jak Eksplorator usługi Azure Storage.

  • Rejestrowanie. Usługa Azure Machine Edukacja umożliwia łatwe logowanie się na każdym etapie 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 Edukacja. Aby uzyskać bardziej zaawansowane monitorowanie, skonfiguruj Szczegółowe informacje aplikacji 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 kosztowym 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 Edukacja Compute, ale są dostępne inne opcje. Usługa Azure Machine Edukacja nie dodaje żadnych dodatkowych opłat na podstawie kosztów maszyn wirtualnych, które są obsługiwane przez klaster obliczeniowy. Skonfiguruj klaster obliczeniowy tak, aby miał co najmniej 0 węzłów, aby w przypadku braku użycia można było 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 (o niskim priorytcie lub dedykowanym). Koszt usługi Machine Edukacja 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 firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.

Główny autor:

  • Praneet Singh Solanki | Starszy inżynier oprogramowania

Następne kroki