Udostępnij za pośrednictwem


Integrowanie przepływu monitów z opartą na usłudze LLM aplikacją DevOps

W tym artykule dowiesz się więcej na temat integracji przepływu monitów z opartą na usłudze LLM aplikacją DevOps w usłudze Azure Machine Learning. Przepływ monitów oferuje przyjazne dla deweloperów i łatwe w użyciu środowisko oparte na kodzie, które umożliwia tworzenie i iterowanie przepływu pracy tworzenia aplikacji opartych na usłudze LLM.

Udostępnia zestaw SDK przepływu monitów i interfejs wiersza polecenia, rozszerzenie programu VS Code oraz nowy interfejs użytkownika eksploratora folderów przepływu, aby ułatwić lokalne opracowywanie przepływów, lokalne wyzwalanie przebiegów przepływów i przebiegów oceny oraz przechodzenie przepływów z środowiska lokalnego na chmurę (obszar roboczy usługi Azure Machine Learning).

Ta dokumentacja koncentruje się na tym, jak skutecznie łączyć możliwości środowiska kodu przepływu monitów i metodyki DevOps w celu ulepszenia przepływów pracy tworzenia aplikacji opartych na usłudze LLM.

Diagram przedstawiający następujący przepływ: tworzenie przepływu, opracowywanie i testowanie przepływu, przechowywanie wersji w repozytorium kodu, przesyłanie przebiegów do chmury oraz debiutowanie i iterację.

Wprowadzenie środowiska code-first w przepływie monitów

Podczas tworzenia aplikacji korzystających z usługi LLM często występuje standardowy proces inżynierii aplikacji, który obejmuje repozytoria kodu i potoki ciągłej integracji/ciągłego wdrażania. Ta integracja umożliwia usprawniony proces programowania, kontrolę wersji i współpracę między członkami zespołu.

Dla deweloperów doświadczonych w tworzeniu kodu, którzy szukają bardziej wydajnego procesu iteracji GenAIOps (czasami nazywanego llMOps), następujące kluczowe funkcje i korzyści, które można uzyskać dzięki środowisku kodu przepływu monitów:

  • Przechowywanie wersji przepływu w repozytorium kodu. Możesz zdefiniować przepływ w formacie YAML, który może być zgodny z przywoływanymi plikami źródłowymi w strukturze folderów.
  • Integrowanie przebiegu przepływu z potokiem ciągłej integracji/ciągłego wdrażania. Przebiegi przepływu można wyzwalać przy użyciu interfejsu wiersza polecenia przepływu monitu lub zestawu SDK, który można bezproblemowo zintegrować z potokiem ciągłej integracji/ciągłego wdrażania i procesem dostarczania.
  • Bezproblemowe przejście z chmury lokalnej do chmury. Możesz łatwo wyeksportować folder przepływu do lokalnego lub repozytorium kodu na potrzeby kontroli wersji, lokalnego programowania i udostępniania. Podobnie folder przepływu można łatwo zaimportować z powrotem do chmury w celu dalszego tworzenia, testowania i wdrażania w zasobach w chmurze.

Uzyskiwanie dostępu do definicji kodu przepływu monitu

Każdy przepływ każdego przepływu monitu jest skojarzony ze strukturą folderów przepływu, która zawiera podstawowe pliki służące do definiowania przepływu w strukturze folderów kodu. Ta struktura folderów organizuje przepływ, ułatwiając bezproblemowe przejścia.

Usługa Azure Machine Learning oferuje udostępniony system plików dla wszystkich użytkowników obszaru roboczego. Po utworzeniu przepływu odpowiedni folder przepływu jest automatycznie generowany i przechowywany w nim znajdujący się w Users/<username>/promptflow katalogu.

Zrzut ekranu przedstawiający tworzenie przepływu standardowego z tworzeniem nowego przepływu.

Struktura folderów usługi Flow

Omówienie struktury folderów przepływu i plików kluczy, które zawiera:

  • flow.dag.yaml: ten podstawowy plik definicji przepływu w formacie YAML zawiera informacje o danych wejściowych, wyjściowych, węzłach, narzędziach i wariantach używanych w przepływie. Jest integralną częścią tworzenia i definiowania przepływu monitu.
  • Pliki kodu źródłowego (.py, .jinja2): Folder przepływu zawiera również pliki kodu źródłowego zarządzanego przez użytkownika, które są określane przez narzędzia/węzły w przepływie.
    • Do plików w formacie języka Python (.py) można odwoływać się za pomocą narzędzia języka Python do definiowania niestandardowej logiki języka Python.
    • Do plików w formacie Jinja 2 (.jinja2) można odwoływać się za pomocą narzędzia monitu lub narzędzia LLM do definiowania kontekstu monitu.
  • Pliki inne niż źródłowe: folder przepływu może również zawierać pliki nieźródle, takie jak pliki narzędziowe i pliki danych, które mogą być zawarte w plikach źródłowych.

Po utworzeniu przepływu możesz przejść do strony tworzenia przepływu, aby wyświetlić i obsługiwać pliki przepływu w prawym eksploratorze plików. Dzięki temu można wyświetlać, edytować i zarządzać plikami. Wszelkie modyfikacje wprowadzone w plikach są bezpośrednio odzwierciedlane w magazynie udziałów plików.

Zrzut ekranu przedstawiający standardowy przepływ z wyróżnionym eksploratorem plików.

Po włączeniu trybu nieprzetworzonego pliku można wyświetlać i edytować nieprzetworzone treści plików w edytorze plików, w tym plik flow.dag.yaml definicji przepływu i pliki źródłowe.

Zrzut ekranu przedstawiający tryb nieprzetworzonego pliku w standardowym przepływie.

Zrzut ekranu przedstawiający plik źródłowy przepływu w standardowym przepływie.

Alternatywnie możesz uzyskać dostęp do wszystkich folderów przepływu bezpośrednio w notesie usługi Azure Machine Learning.

Zrzut ekranu przedstawiający notesy w usłudze Azure Machine Learning w folderze przepływu monitu z plikami.

Przepływ monitu o wersje w repozytorium kodu

Aby zaewidencjonować przepływ do repozytorium kodu, możesz łatwo wyeksportować folder przepływu ze strony tworzenia przepływu do systemu lokalnego. Spowoduje to pobranie pakietu zawierającego wszystkie pliki z eksploratora do komputera lokalnego, który można następnie zaewidencjonować w repozytorium kodu.

Zrzut ekranu przedstawiający przycisk pobierania w Eksploratorze plików.

Aby uzyskać więcej informacji na temat integracji metodyki DevOps z usługą Azure Machine Learning, zobacz Integracja z usługą Git w usłudze Azure Machine Learning

Przesyłanie przebiegów do chmury z repozytorium lokalnego

Wymagania wstępne

Zestaw SDK przepływu monitów instalacji

pip install -r ../../examples/requirements.txt

Nawiązywanie połączenia z obszarem roboczym usługi Azure Machine Learning

az login

Przygotuj element run.yml , aby zdefiniować konfigurację dla tego przebiegu przepływu w chmurze.

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl

column_mapping:
  url: ${data.url}

# define cloud resource

# if using serverless compute type
# resources:
#   instance_type: <instance_type> 

# if using compute instance compute type
# resources:
#   compute: <compute_instance_name> 

# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

Możesz określić nazwę połączenia i wdrożenia dla każdego narzędzia w przepływie. Jeśli nie określisz nazwy połączenia i wdrożenia, użyje jednego połączenia i wdrożenia w flow.dag.yaml pliku. Aby sformatować połączenia:

...
connections:
  <node_name>:
    connection: <connection_name>
      deployment_name: <deployment_name>
...

pfazure run create --file run.yml

Przygotuj element run_evaluation.yml , aby zdefiniować konfigurację dla tego przepływu oceny uruchomionego w chmurze.

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl
run: <id of web-classification flow run>
column_mapping:
  groundtruth: ${data.answer}
  prediction: ${run.outputs.category}

# define cloud resource

# if using serverless compute type
# resources:
#   instance_type: <instance_type> 

# if using compute instance compute type
# resources:
#   compute: <compute_instance_name> 


# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

pfazure run create --file run_evaluation.yml

Wyświetlanie wyników przebiegu w obszarze roboczym usługi Azure Machine Learning

Przesyłanie przebiegu przepływu do chmury spowoduje zwrócenie adresu URL portalu przebiegu. Możesz otworzyć identyfikator URI, aby wyświetlić wyniki przebiegu w portalu.

Możesz również użyć następującego polecenia, aby wyświetlić wyniki przebiegów.

Przesyłanie strumieniowe dzienników

pfazure run stream --name <run_name>

Wyświetlanie danych wyjściowych przebiegu

pfazure run show-details --name <run_name>

Wyświetlanie metryk przebiegu oceny

pfazure run show-metrics --name <evaluation_run_name>

Ważne

Aby uzyskać więcej informacji, zapoznaj się z dokumentacją interfejsu wiersza polecenia przepływu monitu dla platformy Azure.

Programowanie iteracyjne na podstawie dostrajania

Lokalne programowanie i testowanie

Podczas opracowywania iteracyjnego w miarę udoskonalania i dostosowywania przepływu lub monitów korzystne może być przeprowadzenie wielu iteracji lokalnie w repozytorium kodu. Dostępna jest wersja społeczności, rozszerzenie programu VS Code z monitem o przepływ oraz lokalny zestaw SDK i interfejs wiersza polecenia w celu ułatwienia czystego lokalnego programowania i testowania bez powiązania platformy Azure.

Rozszerzenie VS Code przepływu monitu

Po zainstalowaniu rozszerzenia VS Code przepływu monitu możesz łatwo utworzyć przepływ lokalnie z poziomu edytora programu VS Code, zapewniając podobne środowisko interfejsu użytkownika, jak w chmurze.

Aby użyć rozszerzenia:

  1. Otwórz folder przepływu monitów w programie VS Code Desktop.
  2. Otwórz plik ""flow.dag.yaml" w widoku notesu.
  3. Użyj edytora wizualizacji, aby wprowadzić wszelkie niezbędne zmiany w przepływie, takie jak dostrojenie monitów w wariantach lub dodanie większej liczby narzędzi.
  4. Aby przetestować przepływ, wybierz przycisk Uruchom przepływ w górnej części edytora wizualizacji. Spowoduje to wyzwolenie testu przepływu.

Zrzut ekranu programu VS Code przedstawiający uruchamianie przepływu w edytorze wizualizacji.

Monituj lokalny zestaw SDK i interfejs wiersza polecenia przepływu

Jeśli wolisz używać programów Jupyter, PyCharm, Visual Studio lub innych ide, możesz bezpośrednio zmodyfikować definicję YAML w flow.dag.yaml pliku.

Zrzut ekranu przedstawiający plik yaml w programie VS Code z wyróżnionym domyślnym katalogiem danych wejściowych i przepływu.

Następnie można wyzwolić pojedynczy przebieg przepływu na potrzeby testowania przy użyciu interfejsu wiersza polecenia przepływu monitu lub zestawu SDK.

Przy założeniu, że jesteś w katalogu roboczym <path-to-the-sample-repo>/examples/flows/standard/

pf flow test --flow web-classification  # "web-classification" is the directory name

Zrzut ekranu przedstawiający dane wyjściowe testu przepływu w programie PowerShell.

Dzięki temu można szybko wprowadzać i testować zmiany bez konieczności każdorazowego aktualizowania głównego repozytorium kodu. Gdy wyniki testowania lokalnego będą zadowalające, możesz przesłać przebiegi do chmury z repozytorium lokalnego w celu przeprowadzenia przebiegów eksperymentów w chmurze.

Aby uzyskać więcej szczegółów i wskazówek dotyczących korzystania z wersji lokalnych, możesz zapoznać się ze społecznością usługi GitHub z monitami dotyczącymi przepływu.

Wróć do interfejsu użytkownika programu Studio na potrzeby ciągłego opracowywania

Alternatywnie możesz wrócić do interfejsu użytkownika studio, korzystając z zasobów chmury i środowiska, aby wprowadzić zmiany w przepływie na stronie tworzenia przepływu.

Aby kontynuować opracowywanie i pracę z najbardziej aktualną wersją plików przepływu, możesz uzyskać dostęp do terminalu w notesie i ściągnąć najnowsze zmiany plików przepływu z repozytorium.

Ponadto jeśli wolisz kontynuować pracę w interfejsie użytkownika programu Studio, możesz bezpośrednio zaimportować folder przepływu lokalnego jako nowy przepływ roboczy. Dzięki temu można bezproblemowo przechodzić między programowaniem lokalnym i chmurowym.

Zrzut ekranu przedstawiający panel tworzenia nowego przepływu z wyróżnionym przekazywaniem do lokalizacji lokalnej.

Ciągła integracja/ciągłe wdrażanie

Ciągła integracja: Uruchamianie przepływu wyzwalacza w potoku ciągłej integracji

Po pomyślnym utworzeniu i przetestowaniu przepływu i sprawdzeniu go jako wersji początkowej możesz przystąpić do następnego dostrajania i testowania iteracji. Na tym etapie można wyzwalać przebiegi przepływu, w tym przebiegi testowania wsadowego i oceny, przy użyciu interfejsu wiersza polecenia przepływu monitu. Może to służyć jako zautomatyzowany przepływ pracy w potoku ciągłej integracji.

W całym cyklu życia iteracji przepływu można zautomatyzować kilka operacji:

  • Uruchamianie przepływu monitu po żądaniu ściągnięcia
  • Uruchamianie oceny przepływu monitów w celu zapewnienia wysokiej jakości wyników
  • Rejestrowanie modeli przepływu monitów
  • Wdrażanie modeli przepływu monitów

Aby zapoznać się z kompleksowym przewodnikiem dotyczącym kompleksowego potoku metodyki MLOps, który wykonuje przepływ klasyfikacji internetowej, zobacz Konfigurowanie kompleksowej metodyki GenAIOps z monitami flow i GitHub oraz projektu demonstracyjnego GitHub.

Ciągłe wdrażanie

Ostatnim krokiem do przejścia do środowiska produkcyjnego jest wdrożenie przepływu jako punktu końcowego online w usłudze Azure Machine Learning. Dzięki temu można zintegrować przepływ z aplikacją i udostępnić go do użycia.

Aby uzyskać więcej informacji na temat wdrażania przepływu, zobacz Wdrażanie przepływów w zarządzanym punkcie końcowym online usługi Azure Machine Learning w celu wnioskowania w czasie rzeczywistym przy użyciu interfejsu wiersza polecenia i zestawu SDK.

Współpraca nad opracowywaniem przepływów w środowisku produkcyjnym

W kontekście tworzenia aplikacji opartej na usłudze LLM z przepływem monitów współpraca między członkami zespołu jest często niezbędna. Członkowie zespołu mogą być zaangażowani w ten sam przepływ tworzenia i testowania, pracując nad różnymi aspektami przepływu lub jednocześnie wprowadzając iteracyjne zmiany i ulepszenia.

Taka współpraca wymaga wydajnego i usprawnionego podejścia do udostępniania kodu, śledzenia modyfikacji, zarządzania wersjami i integrowania tych zmian w końcowym projekcie.

Wprowadzenie zestawu SDK/ interfejsu wiersza polecenia przepływu monitów i rozszerzenia programu Visual Studio Code w ramach środowiska kodu przepływu monitów ułatwia współpracę w zakresie opracowywania przepływów w repozytorium kodu. Zaleca się korzystanie z repozytorium kodu opartego na chmurze, takiego jak GitHub lub Azure DevOps, w celu śledzenia zmian, zarządzania wersjami i integrowania tych modyfikacji w końcowym projekcie.

Najlepsze rozwiązanie w zakresie tworzenia aplikacji do współpracy

  1. Tworzenie i pojedyncze testowanie przepływu lokalnie — repozytorium kodu i rozszerzenie VSC

    • Pierwszym krokiem tego procesu współpracy jest użycie repozytorium kodu jako podstawy kodu projektu, który zawiera kod przepływu monitu.
      • To scentralizowane repozytorium umożliwia wydajną organizację, śledzenie wszystkich zmian kodu i współpracę między członkami zespołu.
    • Po skonfigurowaniu repozytorium członkowie zespołu mogą używać rozszerzenia VSC do lokalnego tworzenia i testowania pojedynczych danych wejściowych przepływu.
      • To ustandaryzowane zintegrowane środowisko projektowe wspiera współpracę między wieloma członkami pracującymi nad różnymi aspektami przepływu. Zrzut ekranu przedstawiający programowanie lokalne.
  2. Testowanie i ocena wsadowa oparta na chmurze — interfejs wiersza polecenia przepływu monitu/zestaw SDK i interfejs użytkownika portalu obszaru roboczego

    • Po fazie lokalnego programowania i testowania deweloperzy przepływu mogą przesyłać przebiegi i oceny wsadowe z plików przepływu lokalnego do chmury przy użyciu interfejsu wiersza polecenia pfazure lub zestawu SDK.
      • Ta akcja umożliwia korzystanie z zasobów w chmurze, przechowywanie wyników w sposób trwały i zarządzany wydajnie za pomocą interfejsu użytkownika portalu w obszarze roboczym usługi Azure Machine Learning. Ten krok umożliwia użycie zasobów w chmurze, w tym zasoby obliczeniowe i magazyn oraz dalszy punkt końcowy dla wdrożeń. Zrzut ekranu przedstawiający polecenie pfazure w celu przesłania przebiegu do chmury.
    • Po przesłaniu do chmury członkowie zespołu mogą uzyskiwać dostęp do interfejsu użytkownika portalu w chmurze, aby efektywnie wyświetlać wyniki i zarządzać eksperymentami.
      • Ten obszar roboczy w chmurze zapewnia scentralizowaną lokalizację do zbierania wszystkich historii przebiegów, dzienników, migawek, kompleksowych wyników, w tym danych wejściowych i wyjściowych na poziomie wystąpienia. Zrzut ekranu przedstawiający migawkę przebiegu w chmurze.
      • Na liście uruchomień, która rejestruje całą historię uruchamiania z poziomu procesu programowania, członkowie zespołu mogą łatwo porównać wyniki różnych przebiegów, co pomaga w analizie jakości i niezbędnych korektach. Zrzut ekranu przedstawiający listę uruchomień w obszarze roboczym. Zrzut ekranu przedstawiający porównanie przebiegów w obszarze roboczym.
  3. Lokalne programowanie iteracyjne lub jednoetapowe wdrażanie interfejsu użytkownika dla środowiska produkcyjnego

    • Po analizie eksperymentów członkowie zespołu mogą wrócić do repozytorium kodu na potrzeby innego programowania i dostrajania. Kolejne przebiegi można następnie przesyłać do chmury w sposób iteracyjny.
      • Takie podejście iteracyjne zapewnia spójne ulepszenie, dopóki zespół nie będzie zadowolony z jakości gotowej do produkcji.
    • Gdy zespół jest w pełni pewny jakości przepływu, można go bezproblemowo wdrożyć za pośrednictwem kreatora interfejsu użytkownika jako punktu końcowego online w usłudze Azure Machine Learning. Gdy zespół jest całkowicie pewny jakości przepływu, może zostać bezproblemowo przeniesiony do środowiska produkcyjnego za pośrednictwem kreatora wdrażania interfejsu użytkownika jako punktu końcowego online w niezawodnym środowisku chmury.
      • To wdrożenie w punkcie końcowym online może być oparte na migawce przebiegu, co umożliwia stabilną i bezpieczną obsługę, dalszą alokację zasobów i śledzenie użycia oraz monitorowanie dzienników w chmurze. Zrzut ekranu przedstawiający wdrażanie przepływu z migawki przebiegu. Zrzut ekranu przedstawiający kreatora wdrażania.

Dlaczego zalecamy używanie repozytorium kodu do wspólnego programowania

W przypadku programowania iteracyjnego kombinacja lokalnego środowiska programistycznego i systemu kontroli wersji, takiego jak Git, jest zwykle bardziej efektywna. Możesz wprowadzić modyfikacje i przetestować kod lokalnie, a następnie zatwierdzić zmiany w usłudze Git. Spowoduje to utworzenie bieżącego rekordu zmian i umożliwia przywrócenie wcześniejszych wersji w razie potrzeby.

W przypadku konieczności udostępniania przepływów w różnych środowiskach zalecane jest użycie repozytorium kodu opartego na chmurze, takiego jak GitHub lub Azure Repos. Dzięki temu można uzyskać dostęp do najnowszej wersji kodu z dowolnej lokalizacji i udostępnia narzędzia do współpracy i zarządzania kodem.

Korzystając z tego najlepszego rozwiązania, zespoły mogą tworzyć bezproblemowe, wydajne i wydajne środowisko współpracy na potrzeby tworzenia monitów dotyczących przepływu.

Następne kroki