Udostępnij przez


Testowanie i ocenianie obciążeń sztucznej inteligencji na platformie Azure

W tym artykule skupiono się na dwóch odrębnych aspektach: ocenieniu modeli i przetestowaniu całego systemu. Oceny i testowanie są często używane zamiennie, ale należy je uznać za oddzielne procesy korzystające z odrębnych zestawów danych.

Ocena to działanie iteracyjne wykonywane w fazie opracowywania. Koncentruje się na eksperymentowaniu, aby znaleźć najlepszy model z odpowiednim poziomem dostrajania. Następnie oceń model na podstawie różnych metryk.

Testowanie obejmuje weryfikowanie całego systemu po wprowadzeniu zmiany, w tym dostrojony model i składniki inne niż sztuczna inteligencja. Celem jest sprawdzenie, czy obciążenie spełnia określone cele i spełnia oczekiwania użytkowników. Jest to również nienegocjacyjna strategia zarządzania zmianami, która zapobiega regresji jakości.

Obie praktyki są powiązane w rzeczywistej implementacji. Cały proces obejmuje wysyłanie żądań do modelu, ocenianie odpowiedzi oraz podejmowanie decyzji lub no-go na podstawie danych testowych. Chociaż proces nie jest negocjowany przed produkcją, zalecamy przeprowadzenie procesu w środowisku produkcyjnym przy użyciu kombinacji rzeczywistych i syntetycznych danych.

Głównym celem jest użycie rozwiązań utworzonych przy użyciu generowania sztucznej inteligencji, szczególnie scenariuszy korzystających z modeli podstawowych. Aby uzyskać wskazówki dotyczące trenowania i dostrajania modeli, przejdź do sekcji Wskazówki dotyczące testowania trenowania i dostosowywania modelu.

Używanie metryk jakości do oceny modelu

Ustanów punkt odniesienia i zmierz jakość modelu przy użyciu metryk, które są zgodne z celami biznesowymi.

Mają procesy, które oceniają i kwantyfikują wyniki środowiska użytkownika względem zestawu metryk. Na przykład Groundedness ocenia, czy odpowiedź modelu generowania jest obsługiwana przez podany kontekst, a nie syfekowany. Załóżmy, że firma prawna opracowuje asystenta sztucznej inteligencji, który przytacza statuty. Bez właściwej weryfikacji może to wynikać z nieaktualnych lub błędnie sklasyfikowanych dokumentów, co skutkuje poważnymi konsekwencjami. Wysoki współczynnik uziemienia pomaga zapewnić, że dane wyjściowe modelu pozostają zgodne z zaufanym materiałem źródłowym.

Wybieraj i ustalaj priorytety metryk na podstawie konkretnego przypadku użycia, monitoruj je w sposób ciągły i używaj ich jako bram decyzyjnych na potrzeby dostrajania i wdrażania modelu. Unikaj polegania na jednej metryce, użyj kombinacji, aby przechwycić różne wymiary jakości. Na przykład, nawet jeśli model wykazuje silną uziemienie, może nadal generować stronnicze dane wyjściowe. Uwzględnij oceny sprawiedliwości w celu uzyskania bardziej zrównoważonych i odpowiedzialnych wyników.

Aby uzyskać informacje o metrykach, zobacz Monitorowanie opisów metryk oceny i przypadków użycia.

Używanie odpowiednich danych do oceny

Uściślij model za pomocą procesu iteracyjnego przy użyciu danych oceny. Ten zestaw danych, często nazywany złotym zestawem danych , składa się z zaufanych par danych wejściowych, zwykle tworzonych lub weryfikowanych przez ludzi. Służy jako celowy test porównawczy do oceny wydajności modelu względem zdefiniowanych metryk jakości.

Upewnij się, że zestaw danych jest reprezentatywny dla domeny lub zadania, z różnymi przykładami wysokiej jakości i minimalnym szumem. Ograniczony rozmiar próbki może prowadzić do niskiej jakości oceny, dlatego rozważ wygenerowanie syntetycznych danych, gdy przykładowe dane nie mają wystarczającej różnorodności lub pokrycia, aby poprawić równowagę i kompletność.

Weryfikowanie przepływów pracy agenta

Ponieważ architektury ewoluują w celu korzystania ze sztucznej inteligencji, funkcje, które były kiedyś obsługiwane przez kod deterministyczny, są teraz odciążane do agentów sztucznej inteligencji. Ci agenci podejmują decyzje często z zachowaniem dynamicznym.

Rozważ aplikację agentową, w której sam orkiestrator jest implementowany jako agent. W przeciwieństwie do tradycyjnej aranżacji agenci mogą wywoływać narzędzia, interpretować monity, współpracować z innymi agentami i dostosowywać się w czasie rzeczywistym, co sprawia, że są bardziej elastyczne, ale trudniejsze do weryfikacji.

Ten typ architektury wprowadza nowe wyzwania związane z testowaniem i oceną. Ponieważ agenci działają niedeterministycznie, tradycyjne testy statyczne są niewystarczające. Strategia testowania powinna weryfikować pełny przepływ z danych wejściowych użytkownika do końcowej odpowiedzi, w tym pobieranie danych uziemione , wywoływanie narzędzi i generowanie odpowiedzi. Na przykład

  • Sprawdź, czy agenci poprawnie dzwonią do narzędzi zewnętrznych, interfejsów API i innych agentów. Użyj pozornych zależności, aby sprawdzić, czy dane są przekazywane poprawnie. Symulowanie błędów narzędzia lub agenta w celu przetestowania niezawodności w zachowaniu.

  • Projektowanie testów opartych na scenariuszach przy użyciu wstępnie zdefiniowanych monitów i oczekiwanych danych wyjściowych. Ponieważ dane wyjściowe mogą się różnić, oceń wyniki przy użyciu zautomatyzowanego oceniania z innym modelem. Należy również używać przeglądu opartego na człowieku, zwłaszcza w przypadku zadań wrażliwych lub subiektywnych.

  • Integrowanie narzędzi bezpieczeństwa zawartości w celu wykrywania szkodliwych, stronniczych lub nieodpowiednich danych wyjściowych. Uwzględnij czerwone ćwiczenia tworzenia zespołu, aby zidentyfikować nieoczekiwane zachowania lub luki w zabezpieczeniach jailbreaku. Monitorowanie sprawiedliwości, przejrzystości i zgodności ze standardami etycznymi.

Z perspektywy narzędzi rozważ zestaw SDK oceny sztucznej inteligencji platformy Azure, który obsługuje testy, takie jak:

  • Rozpoznawanie intencji: Czy agent/orkiestrator prawidłowo rozumie żądanie użytkownika?
  • Dokładność wywołań narzędzi: czy są wywoływane poprawne narzędzia z odpowiednimi parametrami?
  • Zgodność zadania: Czy końcowe dane wyjściowe są zgodne z przydzielonym zadaniem i poprzednimi krokami rozumowania?

Ponadto przeprowadzaj regularne testowanie wydajności i obciążenia. Ocena możliwości skalowania agenta w ramach współbieżnych żądań, obsługi długich ścieżek wykonywania i zarządzania interakcjami między wieloma agentami. Ciągłe monitorowanie regresji zarówno w logice, jak i wydajności w miarę rozwoju systemu za pośrednictwem wydań iteracyjnych.

Testowanie aspektów zabezpieczeń

Zabezpieczanie przepływów pracy agentów przez kontrolowanie dostępu, weryfikowanie wszystkich danych wejściowych i monitorowanie zachowania agenta w celu zapobiegania niewłaściwemu użyciu lub niezamierzonym akcjom.

  • Testowanie jailbreaku. Zawsze testować próby jailbreaku. Osoby atakujące zazwyczaj najpierw kierują do warstwy aranżacji, która analizuje i przekazuje żądania do modelu. Jeśli złośliwe dane wejściowe nie są filtrowane, mogą naruszyć zachowanie modelu.

  • Bezpieczeństwo zawartości. W aplikacjach opartych na czacie uruchom zarówno monity użytkownika, jak i kontekst uziemienia za pośrednictwem usługi bezpieczeństwa zawartości.

  • Zabezpieczenia punktu końcowego. W przypadku interfejsów RESTful wymuszaj silne uwierzytelnianie i dokładnie przetestuj mechanizmy kontroli zabezpieczeń, aby zapobiec nieautoryzowanemu dostępowi.

Dostępne są inne biblioteki typu open source, takie jak Scikit-learn, moduł torch.testing firmy PyTorch, Technologia FairML na potrzeby testowania stronniczości i sprawiedliwości oraz Analiza modelu TensorFlow na potrzeby oceny modelu.

Kompromis. Testowanie tego kodu ma wpływ na koszty. Jeśli na przykład używasz usługi Azure OpenAI do hostowania punktu końcowego wnioskowania, testowanie obciążenia jest powszechną praktyką, która może pomóc w ustaleniu limitów systemu. Jednak opłaty za usługę Azure OpenAI są naliczane za każde wywołanie, co może sprawić, że rozbudowane testy obciążeniowe będą kosztowne. Jednym ze sposobów optymalizacji opłat jest użycie nieużywanych jednostek PTU usługi Azure OpenAI w środowisku testowym. Alternatywnie możesz symulować punkt końcowy wnioskowania przy użyciu narzędzi, takich jak serwer proxy deweloperów.

Testowanie zachowania deterministycznego

W niektórych architekturach można użyć logiki deterministycznej do włączenia aranżacji. Na przykład zamiast orkiestratora agenta niedeterministycznego można wybrać orkiestrator, który używa statycznego kodu do zarządzania przepływem wykonywania, takim jak interpretowanie intencji użytkownika, wykonywanie zapytań względem indeksu pod kątem danych uziemienia i wywoływanie punktu końcowego wnioskowania modelu.

Z perspektywy testowania należy traktować ten kod jak każdy krytyczny składnik systemu: uruchamianie wydajności, niezawodności i testów funkcjonalnych, szczególnie w przypadku logiki routingu. Stosowanie testów jednostkowych do składników deterministycznych, zwłaszcza jeśli używasz struktur agentów, takich jak semantyczne jądro firmy Microsoft lub LangChain. Te testy weryfikują szablony monitów, logikę wyboru narzędzi, formatowanie danych i drzewa decyzyjne, izolowane od zmienności środowiska uruchomieniowego.

Testowanie punktu końcowego wnioskowania

Punkty końcowe wnioskowania uwidaczniają modele generowania za pośrednictwem interfejsów API REST i muszą być testowane poza dokładnością modelu. Niezależnie od tego, czy używasz platform PaaS, czy serwerów hostowanych samodzielnie, przetestuj punkt końcowy, tak jak każdy inny punkt końcowy, aby zapewnić niezawodność, skalowalność i bezpieczeństwo.

  • Testowanie funkcjonalne i integracyjne. Zweryfikuj obsługę żądań, strukturę odpowiedzi i integrację z innymi składnikami.

  • Testowanie wydajności i obciążenia. Symulowanie realistycznych warunków w celu oceny przepływności, opóźnień i użycia zasobów. W przypadku punktów końcowych wnioskowania PaaS skoncentruj się na metrykach na poziomie tokenu (tokeny/s lub tokeny/min), które są bardziej znaczące niż tradycyjne rozmiary żądań interfejsów API REST.

  • Skalowanie i optymalizacja procesora GPU. Przetestuj pod różnym obciążeniem, aby określić właściwą jednostkę SKU procesora GPU lub konfigurację skalowania automatycznego. Unikaj nadmiernej aprowizacji, monitorując rzeczywiste użycie procesora GPU.

    Kompromis. Jednostki SKU procesora GPU są kosztowne. Ważne jest, aby stale sprawdzać, czy zasoby procesora GPU są niedostatecznie używane i mają odpowiednie rozmiary, jeśli to możliwe. Po wprowadzeniu korekt przetestuj użycie zasobów, aby zachować równowagę między wydajnością kosztową a optymalizacją wydajności.

  • Obsługa błędów. Symuluj ograniczanie przepustowości, takie jak błędy HTTP 429, przekroczenia limitu czasu zaplecza i niedostępność usługi. Sprawdź, czy klient odpowiednio obsługuje ponowne próby, wycofywanie i przerywanie obwodu.

  • Bezpieczeństwo i bezpieczeństwo zawartości. W przypadku publicznych lub samodzielnie hostowanych punktów końcowych przeprowadź testy penetracyjne i zweryfikuj mechanizmy kontroli dostępu. Użyj narzędzi moderowania zawartości, takich jak Bezpieczeństwo zawartości sztucznej inteligencji platformy Azure, aby przetestować i filtrować niebezpieczne dane wejściowe/wyjściowe.

Testowanie przepływu pracy danych uziemienia

Znaczenie generowania modelu sztucznej inteligencji zależy od jakości i integralności danych uziemienia. Dane uziemienia mogą być rozmieszczane w modelu przy użyciu potoków przetwarzania danych. Te dane są wstępnie przetworzone, fragmentowane i indeksowane przed dotarciem do modelu. Model wykonuje zapytania względem indeksu w czasie rzeczywistym podczas interakcji użytkownika, dzięki czemu indeksowanie wydajności i dokładności ma kluczowe znaczenie dla środowiska użytkownika. Zintegruj testy na wczesnym etapie i konserwuj je w całym cyklu życia systemu.

Źle przetestowane potoki danych mogą prowadzić do niespójnych wyników i problemów obejmujących krzyżowe, takich jak naruszenia zabezpieczeń. Aby zapewnić wysoką jakość środowiska, przetestuj cały przepływ danych, w tym dokumenty źródłowe, przetwarzanie wstępne, logikę aranżacji i sam indeks. Kluczowe zagadnienia dotyczące testowania obejmują:

  • Testowanie funkcjonalne i integracyjne. Sprawdź, czy wszystkie dane są ładowane poprawnie i całkowicie. Upewnij się, że potok obsługuje brakujące, puste lub syntetyczne dane zgodnie z oczekiwaniami.

  • Zgodność schematu indeksu. Przetestuj zmiany schematu, aby zapewnić zgodność z poprzednimi wersjami. Wszelkie zmiany pól lub dokumentów muszą zachować obsługę starszych formatów danych.

  • Testowanie wstępnego przetwarzania i orkiestracji. Przygotowywanie danych uziemienia obejmuje wstępne przetwarzanie, fragmentowanie i osadzanie obliczeń, często orkiestrowane przez narzędzia, takie jak zestawy umiejętności usługi Azure AI Search. Przetestuj potok aranżacji, aby upewnić się, że wszystkie kroki są wykonywane poprawnie, a wynikowe dane są dokładne i istotne.

  • Świeżość danych i kontrole jakości. Uwzględnij testy dla nieaktualnych danych, niezgodności wersji, artefaktów syntetycznych i pustych lub częściowych tabel. Zaktualizuj zapytania lub ustawienia indeksu zgodnie z potrzebami, aby odzwierciedlić najbardziej aktualne i czyste dane.

  • Testowanie obciążenia indeksu. Indeksy mogą zachowywać się inaczej w różnych obciążeniach. Przetestuj wydajność zapytań względem realistycznych scenariuszy użycia, aby poinformować o decyzjach dotyczących skalowania, jednostek SKU obliczeniowych i wymagań dotyczących magazynu.

  • Testowanie zabezpieczeń. Jeśli dokumenty są partycjonowane za pomocą kontroli dostępu, rygorystycznie przetestuj te mechanizmy kontroli. Upewnij się, że każdy użytkownik lub rola uzyskuje dostęp tylko do dozwolonej zawartości w celu zachowania poufności i zgodności.

Wskazówki dotyczące testowania trenowania i dostosowywania modelu

Podobnie jak w przypadku modeli generacyjnych sztucznej inteligencji, używaj różnych typów testów na różnych etapach cyklu życia programowania i różnych składników systemu i przepływów. W miarę praktycznych opracowywania zasobów obciążeń należy pamiętać o testach. Na przykład podczas przetwarzania danych i przekształcania danych źródłowych na potrzeby inżynierii cech należy przestrzegać dobrych praktyk kodowania i upewnić się, że kod został zorganizowany w sposób, który wspiera testowanie.

Ocena modelu

Stosowanie strategii bazowej podczas trenowania modelu w celu mierzenia i porównywania jakości modelu. Oceń wydajność różnych kombinacji modeli, parametrów i funkcji przy użyciu dobrze zdefiniowanych metryk. Te metryki zapewniają obiektywne wyniki oparte na danych, które można iteracyjnie porównać między wersjami i konfiguracjami, aby zidentyfikować model o najlepszej wydajności.

Aby uzyskać więcej informacji, zobacz Metryki regresji/prognozowania.

Dane do oceny i testowania

Partycjonowanie danych źródłowych na trzy odrębne zestawy danych: trenowanie, ewaluacja i testowanie. Użyj zestawu danych trenowania, aby skompilować model, zestaw danych oceny, aby go dostroić, oraz zestaw danych testowych w celu zweryfikowania ostatecznej wydajności.

Upewnij się, że każdy zestaw danych zawiera dane wysokiej jakości, aby zmniejszyć szum. Użyj przypadków testowych w potokach danych, aby wymusić jakość i uzupełnić syntetyczne dane, gdy rzeczywiste próbki są ograniczone, w domenach takich jak wykrywanie oszustw, gdzie rzeczywiste wystąpienia oszustw są rzadkie i zapewniają ograniczone dane na potrzeby trenowania niezawodnych modeli.

Zachowaj oddzielne i nienakładane zestawy danych, aby zachować obiektywność i zapobiec stronniczości w przewidywaniach. Nie używaj ponownie danych treningowych do oceny lub oceny danych na potrzeby testowania.

Testowanie przepływu pracy trenowania i dostrajania

  • Technologie potoków danych. Połącz testy funkcjonalne, obciążeniowe i wydajnościowe przy użyciu danych syntetycznych, aby ocenić skalowalność i podejmować świadome decyzje dotyczące rozmiaru lub przydatności produktu, wymaganych jednostek SKU i integracji systemu.

  • Przepływ pracy pozyskiwania. Przetestuj kompleksowe potoki ETL/ELT, aby upewnić się, że pozyskają one dane niezawodnie i że dane są wysokiej jakości. Ponadto przetestuj integrację ze wszystkimi połączonymi systemami i monitoruj zależności zewnętrzne. Użyj danych syntetycznych, aby zweryfikować kompleksowe przetwarzanie, szczególnie w przypadku złożonych lub dużych obciążeń.

    Przetestuj zaplanowane zadania, aby sprawdzić, czy zadania pozyskiwania są wykonywane na czas i zwracają oczekiwane woluminy.

  • Jakość danych dotyczących pozyskiwania. Sprawdź, czy czyszczenie i przetwarzanie danych obejmuje testy, aby potwierdzić, że operacje manipulowania danymi są zgodnie z oczekiwaniami. Uwzględnia sprawdzanie kompletności, świeżości, spójności schematu, unikatowości i istotności. Sprawdź również, czy dane ustrukturyzowane są pozyskiwane bez duplikatów, brakujących wartości lub nieprawidłowych wpisów.

  • Integralność funkcji i etykiet. Sprawdź, czy funkcje są poprawnie obliczane, a etykiety są dokładnie przypisane, zwłaszcza w przypadku używania złożonych reguł. Sprawdź wyciek danych, aby zapobiec przyszłym lub pochodnym etykietom informacje z powodu zakażania danych treningowych. Sprawdź również, czy podziały danych są odpowiednie, aby uniknąć stronniczości lub nakładających się próbek, ponieważ nawet subtelne wycieki mogą zaszkodzić wydajności modelu.

  • Testowanie hiperparametryczne. Testowanie hiperparametryczne to proces iteracyjny, w którym parametry modelu są dostrojone w celu spełnienia celów dokładności na podstawie przypadku użycia obciążenia. Obejmuje to wielokrotne trenowanie wybranych danych i ocenianie danych testowych w celu zweryfikowania wydajności. Zacznij od mniejszego zestawu danych, aby szybko ocenić zachowanie modelu, a następnie przeprowadź skalowanie testowania do pełnego zestawu. Należy pamiętać o kompromisie między dokładnością modelu a kosztem obliczeniowym i czasem wymaganym do wielokrotnego trenowania i oceny.

  • Jakość kodu. W przypadku trenowania modeli przy użyciu kodu niestandardowego, takiego jak w przypadku skryptu PyTorch, uruchom testy obciążeniowe w fazie projektowania, aby ocenić wymagania obliczeniowe i wybrać odpowiednie jednostki SKU. Użyj testów jednostkowych, aby przechwycić regresje podczas programowania i polegać na testowaniu ręcznym, gdy automatyzacja nie jest możliwa. Ponieważ te skrypty są uruchamiane w ramach przepływów pracy, dodaj testy integracji, aby sprawdzić, czy skrypty są wykonywane niezawodnie w potoku.

  • Punkt końcowy wnioskowania. Ten interfejs API REST zapewnia dostęp do wytrenowanego modelu uczenia maszynowego na potrzeby przewidywania. Model jest wdrażany w środowisku z punktem końcowym, który może odbierać dane wejściowe w czasie rzeczywistym lub wsadowe, przetwarzać je i zwracać przewidywania. Podobnie jak w przypadku każdego innego interfejsu API, upewnij się, że punkt końcowy wnioskowania przechodzi funkcjonalność, wydajność i testowanie zabezpieczeń sprawdza, czy zwraca dokładne wyniki, obsługuje oczekiwane obciążenie i pozostaje bezpieczny przed nieprawidłowym użyciem.

  • Testowanie na żywo witryny. Rozszerzanie testowania funkcjonalnego na system na żywo. Uruchom zaplanowane testy, aby zweryfikować woluminy danych, wykryć brakujące lub zduplikowane rekordy i potwierdzić świeżość danych. Użyj danych syntetycznych, aby bezpiecznie zweryfikować kompleksowe przekształcenia i logikę w warunkach produkcyjnych. Uwzględnij testy A/B, aby ocenić nowe środowiska i zapobiec regresjom jakości przed pełnym wdrożeniem. Skonfiguruj alerty, aby wyzwolić natychmiastowe badanie w przypadku niepowodzenia testów.

Integrowanie testowania danych z potokami ciągłej integracji/ciągłego wdrażania przez automatyzację testów jednostkowych i funkcjonalnych, zwłaszcza podczas zmian kodu lub aktualizacji potoku. Dodaj kontrole jakości przed ponownym trenowaniem i używaj wdrożeń równoległych w celu bezpiecznego testowania w środowisku produkcyjnym. Skonfiguruj alerty pod kątem niepowodzeń testów lub anomalii pozyskiwania.

Uwaga

Testowanie i monitorowanie służy różnym celom. Przeprowadź testy w celu oceny potencjalnych zmian w systemie, zwykle przed wdrożeniem zmian. Ciągłe przeprowadzanie monitorowania w celu oceny ogólnej kondycji systemu.

Testowanie rozkładu modelu

Wszystkie modele ulegają pogorszeniu w czasie z powodu wewnętrznych i zewnętrznych zmian w obciążeniu. Ten spadek jakości modelu, znany jako rozpad modelu, może wystąpić na dwa sposoby:

  • Dryf danych występuje, gdy dane wejściowe zmieniają się, co sprawia, że model jest nieaktualny. Na przykład model, który przewiduje wzorce głosowania, staje się nieistotny ze względu na zmiany demograficzne po redystrykowaniu.

  • Dryf koncepcji występuje, gdy warunki zewnętrzne zmieniają się, co powoduje, że przewidywania modelu nie odzwierciedlają już rzeczywistości. Na przykład model, który przewiduje trendy sprzedaży, staje się nieistotny, ponieważ nastąpiła zmiana zachowania konsumentów po uruchomieniu nowego produktu przez konkurenta.

Aby wykryć rozkład, użyj zautomatyzowanego testowania, aby porównać przewidywania z rzeczywistymi wynikami i monitorować dryf przy użyciu metryk statystycznych. Opinie użytkowników, na przykład przy użyciu kciuków w górę/w dół, są również cennym sygnałem do identyfikowania problemów. Po wykryciu potencjalnego rozpadu zespół operacyjny powinien powiadomić analityków danych o zbadaniu i ustaleniu głównych przyczyn i następnych kroków.

Narzędzia do testowania

Rozważ następujące zasoby platformy Azure:

Następne kroki