Efektywne skalowanie w poziomie umiejętności niestandardowych

Niestandardowe umiejętności to internetowe interfejsy API, które implementują określony interfejs. Niestandardową umiejętność można zaimplementować na dowolnym zasobie, który można publicznie adresować. Najbardziej typowe implementacje umiejętności niestandardowych to:

  • Usługa Azure Functions do obsługi niestandardowych umiejętności logiki
  • Aplikacje internetowe platformy Azure na potrzeby prostych umiejętności związanych ze sztuczną inteligencją
  • Usługa Azure Kubernetes dla bardziej złożonych lub większych umiejętności.

Konfiguracja zestawu umiejętności

Następujące właściwości niestandardowej umiejętności są używane do skalowania. Zapoznaj się z niestandardowym interfejsem umiejętności, aby zapoznać się z wprowadzeniem do danych wejściowych i wyjściowych, które powinny zostać zaimplementowane przez niestandardową umiejętność.

  1. Zestaw batchSize umiejętności niestandardowych, aby skonfigurować liczbę rekordów wysyłanych do umiejętności w jednym wywołaniu umiejętności.

  2. Ustaw wartość degreeOfParallelism , aby skalibrować liczbę współbieżnych żądań, które indeksator wykonuje do swoich umiejętności.

  3. Ustaw timeoutwartość wystarczającą dla umiejętności, aby odpowiedzieć prawidłową odpowiedzią.

  4. indexer W definicji ustaw batchSize liczbę dokumentów, które powinny być odczytywane ze źródła danych i wzbogacane współbieżnie.

Kwestie wymagające rozważenia

Nie ma żadnego zestawu zaleceń "jeden rozmiar pasuje do wszystkich". Należy zaplanować testowanie różnych konfiguracji, aby osiągnąć optymalny wynik. Strategie skalowania w górę są oparte na mniejszej liczbie dużych żądań lub wielu małych żądaniach.

  • Kardynalność wywołania umiejętności: upewnij się, że umiejętność niestandardowa jest wykonywana raz dla każdego dokumentu (/document/content) lub wiele razy na dokument (/document/reviews_text/pages/*). Jeśli dokument jest wielokrotny, zachowaj niższą stronę batchSize i degreeOfParallelism zmniejsz współczynnik zmian, a następnie spróbuj ustawić rozmiar partii indeksatora, aby przyrostowo wyższe wartości w celu zwiększenia skali.

  • Koordynuj niestandardowe umiejętności batchSize i indeksator batchSizeoraz upewnij się, że nie tworzysz wąskich gardeł. Jeśli na przykład rozmiar partii indeksatora wynosi 5, a rozmiar partii umiejętności to 50, do wypełnienia niestandardowego żądania umiejętności potrzebnych będzie 10 partii indeksatora. W idealnym przypadku rozmiar partii umiejętności powinien być mniejszy lub równy rozmiarowi partii indeksatora.

  • W przypadku degreeOfParallelismprogramu użyj średniej liczby żądań, które może wygenerować partia indeksatora, aby pokierować decyzją dotyczącą ustawiania tej wartości. Jeśli infrastruktura hostująca umiejętności, na przykład funkcja platformy Azure, nie może obsługiwać wysokich poziomów współbieżności, rozważ wybranie stopnia równoległości. Konfigurację można przetestować za pomocą kilku dokumentów, aby zweryfikować średnią liczbę żądań.

  • Mimo że obiekt jest skalowany i obsługuje duże woluminy, testowanie przy użyciu mniejszej próbki dokumentów pomaga określić ilościowo różne etapy wykonywania. Możesz na przykład ocenić czas wykonywania umiejętności względem ogólnego czasu potrzebnego na przetworzenie podzestawu dokumentów. Pomaga to odpowiedzieć na pytanie: czy indeksator spędza więcej czasu na tworzeniu partii lub czekaniu na odpowiedź z umiejętności?

  • Weź pod uwagę nadrzędne implikacje równoległości. Jeśli dane wejściowe do umiejętności niestandardowych są danymi wyjściowymi z poprzednich umiejętności, czy wszystkie umiejętności w zestawie umiejętności są skutecznie skalowane w poziomie, aby zminimalizować opóźnienia?

Obsługa błędów w umiejętności niestandardowej

Umiejętności niestandardowe powinny zwracać kod stanu powodzenia HTTP 200 po pomyślnym ukończeniu umiejętności. Jeśli co najmniej jeden rekord w partii powoduje błędy, rozważ zwrócenie kodu z wieloma stanami 207. Lista błędów lub ostrzeżeń dla rekordu powinna zawierać odpowiedni komunikat.

Wszystkie elementy w partii, które błędy spowodują niepowodzenie odpowiedniego dokumentu. Jeśli chcesz, aby dokument zakończył się pomyślnie, zwróć ostrzeżenie.

Każdy kod stanu powyżej 299 jest oceniany jako błąd, a wszystkie wzbogacania kończą się niepowodzeniem, co powoduje niepowodzenie dokumentu.

Typowe komunikaty o błędach

  • Could not execute skill because it did not execute within the time limit '00:00:30'. This is likely transient. Please try again later. For custom skills, consider increasing the 'timeout' parameter on your skill in the skillset. Ustaw parametr limitu czasu dla umiejętności, aby umożliwić dłuższy czas trwania wykonywania.

  • Could not execute skill because Web Api skill response is invalid. Wskazuje na to, że umiejętność nie zwraca komunikatu w niestandardowym formacie odpowiedzi umiejętności. Może to być wynik nieuchwyconego wyjątku w umiejętności.

  • Could not execute skill because the Web Api request failed. Najprawdopodobniej spowodowane błędami autoryzacji lub wyjątkami.

  • Could not execute skill. Często wynik odpowiedzi umiejętności mapowany na istniejącą właściwość w hierarchii dokumentów.

Testowanie umiejętności niestandardowych

Zacznij od przetestowania umiejętności niestandardowych za pomocą klienta interfejsu API REST w celu zweryfikowania:

  • Umiejętność implementuje niestandardowy interfejs umiejętności dla żądań i odpowiedzi

  • Umiejętność zwraca prawidłowy kod JSON z typem application/JSON MIME

  • Zwraca prawidłowy kod stanu HTTP

Utwórz sesję debugowania, aby dodać umiejętności do zestawu umiejętności i upewnić się, że generuje on prawidłowe wzbogacanie. Podczas gdy sesja debugowania nie pozwala na dostrojenie wydajności umiejętności, umożliwia zapewnienie, że umiejętność jest skonfigurowana z prawidłowymi wartościami i zwraca oczekiwane wzbogacone obiekty.

Najlepsze rozwiązania

  • Chociaż umiejętności mogą akceptować i zwracać większe ładunki, rozważ ograniczenie odpowiedzi do 150 MB lub mniej podczas zwracania kodu JSON.

  • Rozważ ustawienie rozmiaru partii na indeksatorze i umiejętności, aby upewnić się, że każda partia źródła danych generuje pełny ładunek umiejętności.

  • W przypadku długotrwałych zadań ustaw limit czasu na wystarczająco dużą wartość, aby upewnić się, że indeksator nie błąduje podczas równoczesnego przetwarzania dokumentów.

  • Zoptymalizuj rozmiar partii indeksatora, rozmiar partii umiejętności i stopień umiejętności równoległości, aby wygenerować wzorzec obciążenia oczekiwany przez umiejętności, mniej dużych żądań lub wiele małych żądań.

  • Monitoruj niestandardowe umiejętności za pomocą szczegółowych dzienników błędów, ponieważ możesz mieć scenariusze, w których określone żądania stale kończą się niepowodzeniem w wyniku zmienności danych.