Udostępnij za pośrednictwem


Eliminowanie opóźnień i zwiększanie wydajności

W tym przewodniku opisano, jak ograniczyć opóźnienia sieci i poprawić wydajność usługi podczas korzystania z usługi rozpoznawania twarzy. Szybkość i wydajność aplikacji będą mieć wpływ na środowisko użytkowników końcowych, takich jak osoby, które rejestrują się i korzystają z systemu identyfikacji twarzy.

Zmniejszanie opóźnienia

Podczas korzystania z usługi rozpoznawania twarzy może wystąpić opóźnienie. Opóźnienie odnosi się do dowolnego rodzaju opóźnienia, które występuje, gdy systemy komunikują się za pośrednictwem sieci. Ogólnie rzecz biorąc, możliwe przyczyny opóźnienia obejmują:

  • Odległość fizyczna każdego pakietu musi podróżować ze źródła do miejsca docelowego.
  • Problemy z medium transmisji.
  • Błędy w routerach lub przełącznikach wzdłuż ścieżki transmisji.
  • Czas wymagany przez aplikacje antywirusowe, zapory i inne mechanizmy zabezpieczeń do sprawdzania pakietów.
  • Awarie aplikacji klienckich lub serwerowych.

W tej sekcji opisano, jak można ograniczyć różne przyczyny opóźnienia specyficzne dla usługi rozpoznawania sztucznej inteligencji platformy Azure.

Uwaga

Usługi azure AI nie zapewniają żadnej umowy dotyczącej poziomu usług (SLA) dotyczącej opóźnienia.

Wybieranie odpowiedniego regionu dla zasobu rozpoznawania twarzy

Opóźnienie sieci, czas potrzebny na przejście informacji ze źródła (aplikacji) do miejsca docelowego (zasobu platformy Azure) jest silnie dotknięty odległością geograficzną między aplikacją wysyłającą żądania a serwerem platformy Azure odpowiadającym na te żądania. Jeśli na przykład zasób rozpoznawania twarzy znajduje się w EastUSlokalizacji , ma krótszy czas odpowiedzi dla użytkowników w Nowym Jorku, a użytkownicy w Azji mają dłuższe opóźnienie.

Zalecamy wybranie regionu znajdującego się najbliżej użytkowników, aby zminimalizować opóźnienia. Jeśli użytkownicy są dystrybuowani na całym świecie, rozważ utworzenie wielu zasobów w różnych regionach i kierowanie żądań do regionu najbliższego klientom. Alternatywnie możesz wybrać region, który znajduje się w pobliżu centrum geograficznego wszystkich klientów.

Używanie usługi Azure Blob Storage dla zdalnych adresów URL

Usługa rozpoznawania twarzy udostępnia dwa sposoby przekazywania obrazów do przetwarzania: przekazywanie nieprzetworzonych danych bajtów obrazu bezpośrednio w żądaniu lub podanie adresu URL do obrazu zdalnego. Niezależnie od metody usługa rozpoznawania twarzy musi pobrać obraz z lokalizacji źródłowej. Jeśli połączenie z usługi rozpoznawania twarzy do klienta lub serwera zdalnego jest powolne lub słabe, wpływa na czas odpowiedzi żądań. Jeśli masz problem z opóźnieniem, rozważ zapisanie obrazu w usłudze Azure Blob Storage i przekazanie adresu URL obrazu w żądaniu. Aby uzyskać więcej szczegółów implementacji, zobacz przechowywanie obrazu w usłudze Azure Premium Blob Storage. Przykładowe wywołanie interfejsu API:

var url = "https://<storage_account_name>.blob.core.windows.net/<container_name>/<file_name>";
var response = await faceClient.DetectAsync(new Uri(url), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
var faces = response.Value;

Pamiętaj, aby użyć konta magazynu w tym samym regionie co zasób rozpoznawania twarzy. Zmniejsza to opóźnienie połączenia między usługą rozpoznawania twarzy a kontem magazynu.

Używanie optymalnych rozmiarów plików

Jeśli używane pliki obrazów są duże, wpływa to na czas odpowiedzi usługi rozpoznawania twarzy na dwa sposoby:

  • Przekazanie pliku zajmuje więcej czasu.
  • Przetwarzanie pliku zajmuje usłudze więcej czasu, proporcjonalnie do rozmiaru pliku.

Kompromis między dokładnością a szybkością sieci

Jakość obrazów wejściowych wpływa zarówno na dokładność, jak i opóźnienie usługi rozpoznawania twarzy. Obrazy o niższej jakości mogą powodować błędne wyniki. Obrazy o wyższej jakości mogą umożliwić bardziej precyzyjne interpretacje. Jednak obrazy o wyższej jakości również zwiększają opóźnienie sieci ze względu na ich większe rozmiary plików. Usługa wymaga więcej czasu na odebranie całego pliku od klienta i przetworzenie go w proporcji do rozmiaru pliku. Powyżej pewnego poziomu dalsze ulepszenia jakości nie poprawią dokładności.

Aby uzyskać optymalną równowagę między dokładnością i szybkością, postępuj zgodnie z tymi wskazówkami, aby zoptymalizować dane wejściowe.

Inne porady dotyczące rozmiaru pliku

Zwróć uwagę na następujące dodatkowe porady:

  • W przypadku wykrywania twarzy podczas korzystania z modelu FaceDetectionModel.Detection01wykrywania zmniejszenie rozmiaru pliku obrazu zwiększa szybkość przetwarzania. W przypadku korzystania z modelu FaceDetectionModel.Detection02wykrywania zmniejszenie rozmiaru pliku obrazu zwiększy szybkość przetwarzania tylko wtedy, gdy plik obrazu jest mniejszy niż 1920 x 1080 pikseli.
  • W przypadku rozpoznawania twarzy zmniejszenie rozmiaru twarzy zwiększy szybkość tylko wtedy, gdy obraz jest mniejszy niż 200 x 200 pikseli.
  • Wydajność metod wykrywania twarzy zależy również od liczby twarzy na obrazie. Usługa rozpoznawania twarzy może zwrócić do 100 twarzy dla obrazu. Twarze są klasyfikowane według rozmiaru prostokąta twarzy od dużych do małych.

Wywoływanie interfejsów API równolegle, gdy jest to możliwe

Jeśli musisz wywołać wiele interfejsów API, rozważ wywołanie ich równolegle, jeśli projekt aplikacji na to pozwala. Jeśli na przykład musisz wykryć twarze na dwóch obrazach w celu przeprowadzenia porównania twarzy, możesz wywołać je w zadaniu asynchronicznym:

string url1 = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
string url2 = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection2.jpg";
var response1 = client.DetectAsync(new Uri(url1), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
var response2 = client.DetectAsync(new Uri(url2), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);

Task.WaitAll(new Task<Response<IReadOnlyList<FaceDetectionResult>>>[] { response1, response2 });
IEnumerable<FaceDetectionResult> results = response1.Result.Value.Concat(response2.Result.Value);

Gładka na ruch kolczascki

Wydajność usługi rozpoznawania twarzy może mieć wpływ na wzrost ruchu, co może spowodować ograniczenie przepustowości, niższą przepływność i większe opóźnienie. Zalecamy stopniowe zwiększanie częstotliwości wywołań interfejsu API i unikanie natychmiastowych ponownych prób. Jeśli na przykład masz 3000 zdjęć do wykrywania twarzy, nie wysyłaj jednocześnie 3000 żądań. Zamiast tego wyślij 3000 żądań sekwencyjnie przez 5 minut (czyli około 10 żądań na sekundę), aby ruch sieciowy był bardziej spójny. Jeśli chcesz skrócić czas ukończenia, zwiększ liczbę wywołań na sekundę stopniowo, aby ograniczyć ruch. Jeśli wystąpi jakikolwiek błąd, zapoznaj się z tematem Obsługa błędów skutecznie , aby obsłużyć odpowiedź.

Skuteczne obsługa błędów

Błędy 429 i 503 mogą wystąpić w wywołaniach interfejsu API rozpoznawania twarzy z różnych powodów. Aplikacja musi być zawsze gotowa do obsługi tych błędów. Poniżej przedstawiono kilka rekomendacji:

Kod błędu HTTP opis Zalecenie
429 Ograniczanie przepływności Może wystąpić limit szybkości z wywołaniami współbieżnymi. Należy zmniejszyć częstotliwość wywołań i ponowić próbę z wycofywaniem wykładniczym. Unikaj natychmiastowych ponownych prób i unikaj ponownego wysyłania wielu żądań jednocześnie.

Jeśli chcesz zwiększyć limit, zobacz sekcję Request an increase (Żądanie zwiększenia limitów przydziału).
503 Usługa niedostępna Usługa może być zajęta i nie może natychmiast odpowiedzieć na żądanie. Należy wdrożyć strategię wycofywania podobną do tej dla błędu 429.

Zapewnianie niezawodności i obsługi

Poniżej przedstawiono inne wskazówki dotyczące zapewnienia niezawodności i wysokiej obsługi aplikacji:

  • Wygeneruj unikatowy identyfikator GUID jako client-request-id nagłówek żądania HTTP i wyślij go przy użyciu każdego żądania. Pomaga to firmie Microsoft łatwiej badać wszelkie błędy, jeśli musisz zgłosić problem z firmą Microsoft.
    • Zawsze rejestruj client-request-id i otrzymaną odpowiedź, gdy napotkasz nieoczekiwaną odpowiedź. Jeśli potrzebujesz pomocy, podaj te informacje, aby pomoc techniczna firmy Microsoft wraz z identyfikatorem zasobu platformy Azure i okresem wystąpienia problemu.
  • Przeprowadź test pilotażowy przed wydaniem aplikacji do środowiska produkcyjnego. Upewnij się, że aplikacja może prawidłowo i skutecznie obsługiwać błędy.

Następne kroki

W tym przewodniku przedstawiono sposób poprawiania wydajności podczas korzystania z usługi rozpoznawania twarzy. Następnie postępuj zgodnie z samouczkiem, aby skonfigurować działające rozwiązanie programowe, które łączy logikę po stronie serwera i po stronie klienta w celu wykrywania na żywo twarzy na użytkownikach.