GenAIOps z przepływem monitów i usługą Azure DevOps
W miarę wzrostu zapotrzebowania na aplikacje z dodatkiem LLM organizacje potrzebują spójnych i usprawnionych procesów w celu zarządzania całym cyklem życia tych aplikacji. Generowanie operacji sztucznej inteligencji (GenAIOps), czasami nazywanych LLMOps, jest podstawą wydajnej inżynierii monitów i tworzenia i wdrażania aplikacji opartych na technologii LLM.
W tym artykule pokazano, w jaki sposób usługa Azure Machine Learning umożliwia integrację z usługą Azure DevOps w celu zautomatyzowania cyklu życia tworzenia aplikacji z wbudowanym modułem LLM przy użyciu przepływu monitów. Przepływ monitów zapewnia usprawnione i ustrukturyzowane podejście do tworzenia aplikacji z wbudowanymi rozwiązaniami LLM. Jego dobrze zdefiniowany proces i cykl życia prowadzą przez proces tworzenia, testowania, optymalizowania i wdrażania przepływów, co kończy się tworzeniem w pełni funkcjonalnych rozwiązań z obsługą funkcji LLM.
Funkcje przepływu monitów genAIOps
Metodyka GenAIOps z przepływem monitów korzysta z szablonu GenAIOps i wskazówek, aby ułatwić tworzenie aplikacji z obsługą interfejsu LLM za pomocą przepływu monitów. Metodyka GenAIOps z przepływem monitów ma możliwości dla prostych lub złożonych aplikacji z obsługą funkcji LLM i jest dostosowywana do potrzeb aplikacji.
Usługa GenAIOps z platformą przepływu monitów udostępnia następujące funkcje:
Scentralizowane hostowanie kodu. Repozytorium obsługuje hostowanie kodu dla wielu przepływów monitów, zapewniając jedno repozytorium dla wszystkich przepływów. To repozytorium jest jak biblioteka przepływów, co ułatwia znajdowanie, uzyskiwanie dostępu i współpracę nad różnymi projektami.
Zarządzanie cyklem życia. Każdy przepływ ma własny cykl życia, zapewniając bezproblemowe przejście od eksperymentów lokalnych do wdrożenia produkcyjnego.
Eksperymentowanie wariantów i hiperparametrów. Warianty i hiperparametry są jak składniki w przepisie. Platforma umożliwia eksperymentowanie z różnymi kombinacjami wariantów w wielu węzłach w przepływie. Możesz eksperymentować z wieloma wariantami i hiperparametrami, aby łatwo ocenić warianty przepływu.
Wiele obiektów docelowych wdrożenia. Platforma generuje obrazy platformy Docker wzbogacone przepływem i sesją obliczeniową na potrzeby wdrożenia do dowolnej platformy docelowej i systemu operacyjnego obsługującego platformę Docker. Przepływy można wdrażać w usługach aplikacja systemu Azure Services, Kubernetes i Zarządzanych obliczeniach platformy Azure oraz konfigurować je do skalowania zgodnie z potrzebami.
Wdrożenie A/B. Metodyka GenAIOps z przepływem monitów bezproblemowo implementuje wdrożenia A/B, umożliwiając łatwe porównywanie różnych wersji przepływu. Ta platforma ułatwia wdrażanie A/B na potrzeby przepływu monitów w taki sam sposób, jak w tradycyjnej witrynie internetowej A/B testing. Możesz łatwo porównać różne wersje przepływu w rzeczywistym ustawieniu, aby określić, która wersja działa najlepiej.
Wiele do wielu zestawów danych do przepływu relacji. Funkcja GenAIOps z przepływem monitów obsługuje wiele zestawów danych dla każdego przepływu standardu i oceny, umożliwiając wszechstronność testowania i oceny przepływu.
Dane warunkowe i rejestracja modelu. Platforma rejestruje nową wersję zestawu danych dla zasobu danych usługi Azure Machine Learning i przepływów w rejestrze modeli tylko wtedy, gdy nastąpiła zmiana w zestawie danych.
Kompleksowe raportowanie. Metodyka GenAIOps z przepływem monitów generuje szczegółowe raporty dla każdej konfiguracji wariantu, umożliwiając podejmowanie świadomych decyzji. Platforma udostępnia szczegółowe zbieranie metryk, eksperymenty i przebiegi zbiorcze wariantów dla wszystkich przebiegów i eksperymentów, umożliwiając podejmowanie decyzji opartych na danych zarówno dla plików CSV, jak i HTML.
Funkcja GenAIOps z przepływem monitów udostępnia następujące inne funkcje dostosowywania:
- Funkcja Bring-your-own-flows (BYOF) udostępnia pełną platformę do tworzenia wielu przypadków użycia związanych z aplikacjami z wbudowanymi rozwiązaniami LLM.
- Programowanie oparte na konfiguracji oznacza, że nie ma potrzeby pisania obszernego kodu kociołowego.
- Monitowanie eksperymentowania i oceny jest wykonywane lokalnie i w chmurze.
- Notesy na potrzeby oceny monitów lokalnych udostępniają bibliotekę funkcji do eksperymentowania lokalnego.
- Testowanie punktu końcowego w potoku po wdrożeniu sprawdza dostępność i gotowość punktu końcowego.
- Opcjonalna pętla human-in-loop weryfikuje metryki monitu przed wdrożeniem.
Etapy GenAIOps
Cykl życia GenAIOps składa się z czterech odrębnych etapów:
Inicjowanie. Jasno zdefiniuj cel biznesowy, zbierz odpowiednie próbki danych, ustanów podstawową strukturę monitów i utwórz przepływ zwiększający jego możliwości.
Eksperymentowanie. Zastosuj przepływ do przykładowych danych, oceń wydajność monitu i dostosuj przepływ zgodnie z potrzebami. Stale iteruj, aż wyniki będą zadowalające.
Ocena i uściślenie. Przeprowadź test porównawczy wydajności przepływu przy użyciu większego zestawu danych, oceń skuteczność monitu i odpowiednio uściślij. Przejdź do następnego etapu, jeśli wyniki spełniają żądane standardy.
Wdrożenie. Zoptymalizuj przepływ pod kątem wydajności i skuteczności, wdróż go w środowisku produkcyjnym, w tym wdrożenie A/B, monitoruj jego wydajność, zbieraj opinie użytkowników i korzystaj z tych informacji, aby jeszcze bardziej ulepszyć przepływ.
Stosując się do tej metodologii ustrukturyzowanej, przepływ monitów umożliwia niezawodne opracowywanie, rygorystyczne testowanie, dostosowywanie i wdrażanie przepływów, co prowadzi do tworzenia niezawodnych i zaawansowanych aplikacji sztucznej inteligencji.
Szablon Przepływu monitów GenAIOps formalizuje tę metodologię ustrukturyzowaną przy użyciu podejścia opartego na kodzie i ułatwia tworzenie aplikacji z obsługą przepływów llM przy użyciu narzędzi przepływu monitów i procesów oraz funkcji przepływu monitów GenAIOps. Ten szablon jest dostępny w witrynie GenAIOps z szablonem przepływu monitów.
Przepływ procesu GenAIOps
- Na etapie inicjowania tworzysz przepływy, przygotowujesz i curate dane oraz aktualizujesz powiązane pliki konfiguracji GenAIOps.
- Po utworzeniu lokalnego przy użyciu programu Visual Studio Code z rozszerzeniem Prompt Flow należy zgłosić żądanie ściągnięcia z gałęzi funkcji do gałęzi programowania, która wykonuje potok weryfikacji kompilacji i przepływy eksperymentowania.
- Żądanie ściągnięcia jest zatwierdzane ręcznie, a kod jest scalony z gałęzią programowania.
- Po scaleniu żądania ściągnięcia z gałęzią programowania potok ciągłej integracji (CI) dla środowiska deweloperskiego jest wykonywany. Potok ciągłej integracji wykonuje zarówno przepływy eksperymentowania, jak i oceny w sekwencji i rejestruje przepływy w rejestrze usługi Azure Machine Learning oprócz innych kroków w potoku.
- Po zakończeniu wykonywania potoku ciągłego wdrażania wyzwalacz ciągłego wdrażania wykonuje potok ciągłego wdrażania, który wdraża standardowy przepływ z usługi Azure Machine Learning Registry jako punkt końcowy online usługi Azure Machine Learning. Następnie potok uruchamia testy integracji i kompilacji w wdrożonym przepływie.
- Gałąź wydania jest tworzona z gałęzi programowania lub żądanie ściągnięcia jest wywoływane z gałęzi programowania do gałęzi wydania.
- Żądanie ściągnięcia jest zatwierdzane ręcznie, a kod jest scalony z gałęzią wydania. Po scaleniu żądania ściągnięcia z gałęzią wydania potok ciągłej integracji dla środowiska produkcyjnego zostanie wykonany. Potok wykonuje zarówno przepływy eksperymentowania, jak i oceny w sekwencji oraz rejestruje przepływy w usłudze Azure Machine Learning Registry poza innymi krokami w potoku.
- Po zakończeniu wykonywania potoku ciągłej integracji wyzwalacz ciągłego wdrażania wykonuje potok ciągłego wdrażania, który wdraża standardowy przepływ z usługi Azure Machine Learning Registry jako punkt końcowy online usługi Azure Machine Learning. Następnie potok uruchamia testy integracji i kompilacji w wdrożonym przepływie.
Tworzenie przepływu monitu genAIOps
W pozostałej części tego artykułu pokazano, jak używać metody GenAIOps z przepływem monitów, korzystając z kompleksowego przykładu w repozytorium szablonów przepływu monitów genAIOps, które ułatwia tworzenie aplikacji z zestawem LLM przy użyciu przepływu monitów i usługi Azure DevOps. Podstawowym celem jest zapewnienie pomocy w tworzeniu tych aplikacji przy użyciu możliwości przepływu monitów i metodyki GenAIOps.
Wymagania wstępne
- Subskrypcja platformy Azure z bezpłatną lub płatną wersją usługi Azure Machine Learning.
- Obszar roboczy usługi Azure Machine Learning.
- Usługa Git w wersji 2.27 lub nowszej działa na komputerze lokalnym.
- Organizacja usługi Azure DevOps, w której masz możliwość tworzenia projektu, repozytorium kontroli źródła usługi Azure Repos i potoków usługi Azure Pipelines. Organizacja usługi Azure DevOps ułatwia współpracę, planowanie i śledzenie pracy, kodu i problemów oraz konfigurowanie ciągłej integracji i ciągłego wdrażania.
- Znajomość sposobu integrowania metody GenAIOps z przepływem monitów.
Uwaga
Jeśli używasz usług Azure DevOps i Terraform do uruchamiania infrastruktury, musisz zainstalować rozszerzenie Terraform dla usługi Azure DevOps .
Konfigurowanie połączenia przepływu monitu
Przepływ monitowania używa zasobu połączenia do nawiązywania połączenia z punktami końcowymi usługi Azure OpenAI, OpenAI lub Azure AI Search. Połączenie można utworzyć za pomocą interfejsu użytkownika portalu przepływu monitów lub przy użyciu interfejsu API REST. Aby uzyskać więcej informacji, zobacz Połączenia w przepływie monitów.
Aby utworzyć połączenie, postępuj zgodnie z instrukcjami w temacie Konfigurowanie połączeń dla przepływu monitów. Przykładowe przepływy używają połączenia o nazwie aoai
, więc nadaj temu połączeniu nazwę.
Konfigurowanie sesji obliczeniowej
Przepływ monitu używa sesji obliczeniowej do wykonania przepływu. Utwórz i uruchom sesję obliczeniową przed wykonaniem przepływu monitu.
Konfigurowanie repozytorium usługi Azure Repos
Aby utworzyć rozwidlenie repozytorium w organizacji usługi Azure DevOps, postępuj zgodnie z instrukcjami w temacie Konfigurowanie repozytorium GitHub. To repozytorium używa dwóch gałęzi i main
development
, do promocji kodu i wykonywania potoku.
Aby utworzyć nowe repozytorium lokalne, postępuj zgodnie z instrukcjami w temacie Klonowanie repozytorium. Ten klon pomaga utworzyć nową gałąź funkcji z gałęzi programowania i uwzględnić zmiany.
Konfigurowanie jednostki usługi platformy Azure
Jednostka usługi platformy Azure to tożsamość zabezpieczeń używana przez aplikacje, usługi i narzędzia automatyzacji do uzyskiwania dostępu do zasobów platformy Azure. Aplikacja lub usługa uwierzytelnia się na platformie Azure, aby uzyskać dostęp do zasobów w Twoim imieniu.
Utwórz jednostkę usługi, postępując zgodnie z instrukcjami w temacie Tworzenie jednostki usługi platformy Azure. Ta jednostka usługi służy do konfigurowania połączenia usług Azure DevOps Services i umożliwienia usłudze Azure DevOps Services uwierzytelniania i nawiązywania połączenia z usługami platformy Azure. Zadania eksperymentu i oceny przepływu monitu są uruchamiane w ramach tożsamości jednostki usługi.
Konfiguracja zapewnia jednostce usługi uprawnienia właściciela , dzięki czemu potok ciągłego wdrażania może automatycznie zapewnić nowo aprowizowany punkt końcowy usługi Azure Machine Learning z dostępem do obszaru roboczego usługi Azure Machine Learning na potrzeby odczytywania informacji o połączeniu. Potok dodaje również punkt końcowy do zasad magazynu kluczy skojarzonych z obszarem roboczym usługi Azure Machine Learning z uprawnieniami tajnymiget
.list
Możesz zmienić uprawnienia właściciela do uprawnień na poziomie współautora , zmieniając kod YAML potoku, aby usunąć krok związany z uprawnieniami.
Tworzenie nowego projektu usługi Azure DevOps
Aby utworzyć nowy projekt w interfejsie użytkownika usługi Azure DevOps, postępuj zgodnie z instrukcjami w temacie Create a new Azure DevOps project (Tworzenie nowego projektu usługi Azure DevOps).
Konfigurowanie uwierzytelniania między usługą Azure DevOps i platformą Azure
Ten krok umożliwia skonfigurowanie nowego połączenia usługi Azure DevOps, które przechowuje informacje o jednostce usługi. Potoki projektu mogą odczytywać informacje o połączeniu przy użyciu nazwy połączenia do automatycznego nawiązywania połączenia z platformą Azure. Aby użyć utworzonej jednostki usługi w celu skonfigurowania uwierzytelniania między usługami Azure DevOps i Azure, postępuj zgodnie z instrukcjami w temacie Konfigurowanie uwierzytelniania za pomocą platformy Azure i usługi Azure DevOps.
Tworzenie grupy zmiennych usługi Azure DevOps
Aby utworzyć nową grupę zmiennych i dodać zmienną powiązaną z połączeniem usługi Azure DevOps, postępuj zgodnie z instrukcjami w temacie Create an Azure DevOps variable group (Tworzenie grupy zmiennych usługi Azure DevOps). Nazwa główna usługi jest następnie dostępna automatycznie dla potoków jako zmienna środowiskowa.
Konfigurowanie usług Azure Repos i Azure Pipelines
Przykładowe repozytorium używa dwóch gałęzi i main
development
, na potrzeby promocji kodu i wykonywania potoku. Aby skonfigurować własne repozytoria lokalne i zdalne do używania kodu z przykładowego repozytorium, postępuj zgodnie z instrukcjami w temacie Konfigurowanie repozytoriów lokalnych i zdalnych usługi Azure DevOps.
Sklonujesz main
gałęzie i development
z przykładowego repozytorium i skojarzysz kod, aby odwoływać się do nowego repozytorium usługi Azure Repos. Zarówno potoki żądania ściągnięcia, jak i potoki programistyczne są konfigurowane do automatycznego wykonywania na podstawie wyzwalaczy tworzenia i scalania żądań ściągnięcia.
Zasady gałęzi dla development
gałęzi są skonfigurowane do wykonywania potoku żądania ściągnięcia dla dowolnego żądania ściągnięcia zgłoszonego w gałęzi programowania z gałęzi funkcji. Potok dev
jest wykonywany, gdy żądanie ściągnięcia scala się z gałęzią programowania i składa się zarówno z faz ciągłej integracji, jak i ciągłego wdrażania.
Człowiek w pętli jest również implementowany w potokach. Po zakończeniu fazy ciągłej integracji w potoku faza ciągłego dev
wdrażania następuje po ręcznym zatwierdzeniu w interfejsie użytkownika wykonywania kompilacji usługi Azure Pipelines.
Domyślny czas oczekiwania na zatwierdzenie wynosi 60 minut, po którym potok jest odrzucany, a faza ciągłego wdrażania nie jest wykonywana. Ręczne zatwierdzanie wykonania wykonuje kroki ciągłego wdrażania potoku.
Ręczne zatwierdzanie w przykładowym potoku jest skonfigurowane do wysyłania powiadomień do usługi replace@youremail.com
. Zastąp symbol zastępczy odpowiednim adresem e-mail.
Testowanie potoku
Aby przetestować potoki, postępuj zgodnie z instrukcjami w temacie Testowanie potoków. Pełny proces obejmuje następujące kroki:
- Żądanie ściągnięcia jest wywoływane z gałęzi funkcji do gałęzi programowania.
- Potok żądania ściągnięcia jest wykonywany automatycznie z powodu konfiguracji zasad gałęzi.
- Żądanie ściągnięcia jest scalane z gałęzią programowania.
- Skojarzony
dev
potok jest wykonywany, co powoduje pełne wykonanie ciągłej integracji i ciągłego wdrażania oraz aprowizowanie lub aktualizowanie punktów końcowych usługi Azure Machine Learning.
Dane wyjściowe powinny wyglądać podobnie do przykładów w przykładowym scenariuszu uruchamiania, oceny i wdrażania.
Korzystanie z wykonywania lokalnego
Aby użyć funkcji wykonywania lokalnego, wykonaj następujące kroki.
Sklonuj repozytorium w następujący sposób:
git clone https://github.com/microsoft/genaiops-promptflow-template.git
Utwórz plik env na najwyższym poziomie folderu. Dodaj wiersze dla każdego połączenia, aktualizując wartości symboli zastępczych. Przykłady w przykładowym repozytorium używają połączenia AzureOpenAI o nazwie
aoai
i wersji2024-02-01
interfejsu API .aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"} <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
Przygotuj lokalne środowisko conda lub środowisko wirtualne, aby zainstalować zależności.
python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
Wprowadzanie lub zapisywanie przepływów w szablonie na podstawie instrukcji w temacie Jak dołączyć nowe przepływy.
Napisz skrypty języka Python w folderze local_execution podobnym do podanych przykładów.