Udostępnij za pośrednictwem


Rozwiązywanie problemów z wdrażaniem i ocenianie punktów końcowych w trybie online

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

W tym artykule opisano sposób rozwiązywania typowych problemów z wdrażaniem i ocenianiami punktów końcowych usługi Azure Machine Learning online oraz ich rozwiązywanie.

Struktura dokumentu odzwierciedla sposób rozwiązywania problemów:

  1. Użyj lokalnego wdrożenia, aby testować i debugować modele lokalnie przed ich wdrożeniem w chmurze.
  2. Wykorzystaj dzienniki kontenerów, aby łatwiej debugować problemy.
  3. Zapoznaj się z typowymi błędami wdrażania, jakie mogą wystąpić i dowiedz się jak je naprawić.

W sekcji Kody stanu HTTP wyjaśniono, jak wywołania i błędy przewidywania są mapowane na kody stanu HTTP podczas oceniania punktów końcowych za pomocą żądań REST.

Wymagania wstępne

  • Aktywna subskrypcja platformy Azure z bezpłatną lub płatną wersją usługi Azure Machine Learning. Uzyskaj bezpłatną subskrypcję platformy Azure w wersji próbnej.

Śledzenie żądań

Istnieją dwa obsługiwane nagłówki śledzenia:

  • x-request-id jest zarezerwowana do śledzenia serwera. Usługa Azure Machine Learning zastępuje ten nagłówek, aby upewnić się, że jest to prawidłowy identyfikator GUID. Po utworzeniu biletu pomocy technicznej dla żądania, które zakończyło się niepowodzeniem, dołącz identyfikator żądania, który zakończył się niepowodzeniem, aby przyspieszyć badanie. Alternatywnie podaj nazwę regionu i nazwę punktu końcowego.

  • x-ms-client-request-id jest dostępny dla scenariuszy śledzenia klientów. Ten nagłówek akceptuje tylko znaki alfanumeryczne, łączniki i podkreślenia i jest obcinany do maksymalnie 40 znaków.

Wdrażanie lokalne

Wdrożenie lokalne oznacza wdrożenie modelu w lokalnym środowisku platformy Docker. Wdrożenie lokalne obsługuje tworzenie, aktualizowanie i usuwanie lokalnego punktu końcowego oraz umożliwia wywoływanie i pobieranie dzienników z punktu końcowego. Wdrożenie lokalne jest przydatne do testowania i debugowania przed wdrożeniem w chmurze.

Napiwek

Możesz również użyć pakietu języka Python serwera HTTP wnioskowania usługi Azure Machine Learning, aby debugować skrypt oceniania lokalnie. Debugowanie za pomocą serwera wnioskowania ułatwia debugowanie skryptu oceniania przed wdrożeniem w lokalnych punktach końcowych, dzięki czemu można debugować bez wpływu na konfiguracje kontenera wdrożenia.

Lokalnie można wdrożyć za pomocą interfejsu wiersza polecenia platformy Azure lub zestawu SDK języka Python. Usługa Azure Machine Learning Studio nie obsługuje lokalnego wdrożenia ani lokalnych punktów końcowych.

Aby użyć wdrożenia lokalnego, dodaj --local do odpowiedniego polecenia.

az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local

Podczas wdrażania lokalnego są wykonywane następujące kroki:

  1. Platforma Docker tworzy nowy obraz kontenera lub ściąga istniejący obraz z lokalnej pamięci podręcznej platformy Docker. Platforma Docker używa istniejącego obrazu, jeśli pasuje do części środowiska pliku specyfikacji.
  2. Platforma Docker uruchamia nowy kontener z zainstalowanymi lokalnymi artefaktami, takimi jak pliki modelu i kodu.

Aby uzyskać więcej informacji, zobacz Wdrażanie i debugowanie lokalnie przy użyciu lokalnego punktu końcowego.

Napiwek

Możesz użyć programu Visual Studio Code do testowania i debugowania punktów końcowych lokalnie. Aby uzyskać więcej informacji, zobacz Debugowanie punktów końcowych online lokalnie w programie Visual Studio Code.

Pobieranie dzienników kontenera

Nie można uzyskać bezpośredniego dostępu do maszyny wirtualnej, na której jest wdrażany model, ale możesz pobrać dzienniki z niektórych kontenerów uruchomionych na maszynie wirtualnej. Ilość pobieranych informacji zależy od stanu aprowizacji wdrożenia. Jeśli określony kontener jest uruchomiony, zostaną wyświetlone jego dane wyjściowe konsoli. W przeciwnym razie zostanie wyświetlony komunikat, aby spróbować ponownie później.

Dzienniki można pobrać z następujących typów kontenerów:

  • Dziennik konsoli serwera wnioskowania zawiera dane wyjściowe funkcji drukowania i rejestrowania ze skryptu oceniania score.py kodu.
  • Dzienniki inicjatora magazynu zawierają informacje o tym, czy kod i dane modelu zostały pomyślnie pobrane do kontenera. Kontener jest uruchamiany przed uruchomieniem kontenera serwera wnioskowania.

W przypadku punktów końcowych online platformy Kubernetes administratorzy mogą bezpośrednio uzyskać dostęp do klastra, w którym wdrożono model, i sprawdzić dzienniki w usłudze Kubernetes. Na przykład:

kubectl -n <compute-namespace> logs <container-name>

Uwaga

Jeśli używasz rejestrowania języka Python, upewnij się, że używasz poprawnego poziomu rejestrowania, takiego jak INFO, aby komunikaty zostały opublikowane w dziennikach.

Wyświetlanie danych wyjściowych dziennika z kontenerów

Aby wyświetlić dane wyjściowe dziennika z kontenera, użyj następującego polecenia:

az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100

Or

az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100

Domyślnie dzienniki są pobierane z serwera wnioskowania. Dzienniki można pobrać z kontenera inicjatora magazynu, przekazując polecenie –-container storage-initializer.

Dodaj --resource-group polecenia i --workspace-name do poleceń, jeśli te parametry nie zostały jeszcze ustawione za pomocą polecenia az configure. Aby wyświetlić informacje o sposobie ustawiania tych parametrów lub jeśli obecnie ustawiono wartości, uruchom następujące polecenie:

az ml online-deployment get-logs -h

Aby wyświetlić więcej informacji, dodaj --help polecenie lub --debug do poleceń.

Typowe błędy związane z wdrażaniem

Stan operacji wdrożenia może zgłaszać następujące typowe błędy wdrażania:

Jeśli tworzysz lub aktualizujesz wdrożenie online platformy Kubernetes, zobacz również Typowe błędy specyficzne dla wdrożeń platformy Kubernetes.

BŁĄD: ImageBuildFailure

Ten błąd jest zwracany podczas kompilowania środowiska obrazu platformy Docker. Aby uzyskać więcej informacji na temat błędu, możesz sprawdzić dziennik kompilacji. Dziennik kompilacji znajduje się w domyślnym magazynie dla obszaru roboczego usługi Azure Machine Learning.

Dokładna lokalizacja może zostać zwrócona w ramach błędu, na przykład "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'".

W poniższych sekcjach opisano typowe scenariusze niepowodzeń kompilacji obrazu:

Niepowodzenie autoryzacji usługi Azure Container Registry

Komunikat o błędzie wskazuje "container registry authorization failure" , że nie można uzyskać dostępu do rejestru kontenerów przy użyciu bieżących poświadczeń. Desynchronizacja kluczy zasobów obszaru roboczego może spowodować ten błąd i automatyczne synchronizowanie zajmuje trochę czasu. Można jednak ręcznie wywołać synchronizację kluczy za pomocą polecenia az ml workspace sync-keys, co może rozwiązać problem z niepowodzeniem autoryzacji.

Rejestry kontenerów, które znajdują się za siecią wirtualną, mogą również napotkać ten błąd, jeśli są one niepoprawnie skonfigurowane. Sprawdź, czy sieć wirtualna jest prawidłowo skonfigurowana.

Obliczenia kompilacji obrazu nie są ustawiane w prywatnym obszarze roboczym z siecią wirtualną

Jeśli komunikat o błędzie zawiera wzmiankę "failed to communicate with the workspace's container registry", a używasz sieci wirtualnej, a rejestr kontenerów obszaru roboczego jest prywatny i skonfigurowany przy użyciu prywatnego punktu końcowego, musisz zezwolić usłudze Container Registry na kompilowanie obrazów w sieci wirtualnej.

Limit czasu kompilacji obrazu

Przekroczenia limitu czasu kompilacji obrazu są często spowodowane zbyt dużym rozmiarem obrazu, aby można było ukończyć kompilowanie w przedziale czasowym tworzenia wdrożenia. Sprawdź dzienniki kompilacji obrazu w lokalizacji, w których określono błąd. Dzienniki są odcinane w momencie przekroczenia limitu czasu kompilacji obrazu.

Aby rozwiązać ten problem, skompiluj obraz oddzielnie, aby obraz był ściągany tylko podczas tworzenia wdrożenia. Zapoznaj się również z domyślnymi ustawieniami sondy, jeśli masz limity czasu programu ImageBuild.

Błąd kompilacji obrazu ogólnego

Sprawdź dziennik kompilacji, aby uzyskać więcej informacji na temat błędu. Jeśli w dzienniku kompilacji nie znaleziono żadnego oczywistego błędu, a ostatni wiersz to Installing pip dependencies: ...working..., zależność może powodować błąd. Przypięcie zależności wersji w pliku conda może rozwiązać ten problem.

Spróbuj wdrożyć lokalnie , aby przetestować i debugować modele przed wdrożeniem w chmurze.

BŁĄD: OutOfQuota

W przypadku korzystania z usług platformy Azure następujące zasoby mogą zabraknąć limitu przydziału:

Tylko w przypadku punktów końcowych online platformy Kubernetes zasób Kubernetes może również zabraknąć limitu przydziału.

Limit przydziału procesora CPU

Aby wdrożyć model, musisz mieć wystarczający limit przydziału zasobów obliczeniowych. Limit przydziału procesora DEFINIUJE liczbę rdzeni wirtualnych dostępnych dla subskrypcji, na obszar roboczy, jednostkę SKU i region. Każde wdrożenie odejmuje dostępny limit przydziału i dodaje go z powrotem po usunięciu na podstawie typu jednostki SKU.

Możesz sprawdzić, czy istnieją nieużywane wdrożenia, które można usunąć, lub przesłać żądanie zwiększenia limitu przydziału.

Limit przydziału klastra

Ten OutOfQuota błąd występuje, gdy nie masz wystarczającego limitu przydziału klastra obliczeniowego usługi Azure Machine Learning. Limit przydziału definiuje łączną liczbę klastrów na subskrypcję, których można używać w tym samym czasie do wdrażania węzłów procesora CPU lub procesora GPU w chmurze platformy Azure.

Przydział dysku

Błąd OutOfQuota występuje, gdy rozmiar modelu jest większy niż dostępne miejsce na dysku i nie można pobrać modelu. Spróbuj użyć jednostki SKU z większą ilością miejsca na dysku lub zmniejszyć rozmiar obrazu i modelu.

Limit przydziału pamięci

Błąd OutOfQuota występuje, gdy ślad pamięci modelu jest większy niż dostępna pamięć. Spróbuj użyć jednostki SKU z większą ilością pamięci.

Przydział przydziału przypisania roli

Podczas tworzenia zarządzanego punktu końcowego online przypisanie roli jest wymagane, aby tożsamość zarządzana uzyskiwała dostęp do zasobów obszaru roboczego. Jeśli osiągniesz limit przydziału roli, spróbuj usunąć niektóre nieużywane przypisania ról w tej subskrypcji. Wszystkie przypisania ról można sprawdzić, wybierając pozycję Kontrola dostępu dla subskrypcji platformy Azure w witrynie Azure Portal.

Limit przydziału punktu końcowego

Spróbuj usunąć niektóre nieużywane punkty końcowe w tej subskrypcji. Jeśli wszystkie punkty końcowe są aktywnie używane, spróbuj zażądać zwiększenia limitu punktu końcowego. Aby dowiedzieć się więcej na temat limitu punktu końcowego, zobacz Limit przydziału punktów końcowych za pomocą punktów końcowych online usługi Azure Machine Learning i punktów końcowych wsadowych.

Limit przydziału platformy Kubernetes

Błąd OutOfQuota występuje, gdy żądanego procesora CPU lub pamięci nie można podać z powodu niemożliwych do uchwalenia węzłów dla tego wdrożenia. Na przykład węzły mogą być cordoned lub w inny sposób niedostępne.

Komunikat o błędzie zazwyczaj wskazuje brak zasobów w klastrze, na przykład OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods.... Ten komunikat oznacza, że w klastrze znajduje się zbyt wiele zasobników i za mało zasobów, aby wdrożyć nowy model na podstawie żądania.

Spróbuj wykonać następujące środki zaradcze, aby rozwiązać ten problem:

  • Operatorzy IT, którzy utrzymują klaster Kubernetes, mogą spróbować dodać więcej węzłów lub wyczyścić niektóre nieużywane zasobniki w klastrze, aby zwolnić niektóre zasoby.

  • Inżynierowie uczenia maszynowego, którzy wdrażają modele, mogą spróbować zmniejszyć żądanie zasobów wdrożenia.

    • Jeśli żądanie zasobu jest definiowane bezpośrednio w konfiguracji wdrożenia za pośrednictwem sekcji zasobu, spróbuj zmniejszyć żądanie zasobu.
    • Jeśli używasz instance_type metody do definiowania zasobu na potrzeby wdrażania modelu, skontaktuj się z operatorem IT, aby dostosować konfigurację zasobu typu wystąpienia. Aby uzyskać więcej informacji, zobacz Tworzenie typów wystąpień i zarządzanie nimi.

Pojemność maszyny wirtualnej obejmującej cały region

Ze względu na brak pojemności usługi Azure Machine Learning w regionie usługa nie może aprowizować określonego rozmiaru maszyny wirtualnej. Spróbuj ponownie później lub spróbuj wdrożyć w innym regionie.

Inny limit przydziału

Aby uruchomić plik score.py , który należy podać w ramach wdrożenia, platforma Azure tworzy kontener zawierający wszystkie zasoby, których potrzebuje score.py . Następnie usługa Azure Machine Learning uruchamia skrypt oceniania w tym kontenerze. Jeśli nie można uruchomić kontenera, ocenianie nie może się zdarzyć. Kontener może żądać większej instance_type ilości zasobów niż może obsługiwać. Rozważ zaktualizowanie instance_type wdrożenia online.

Aby uzyskać dokładną przyczynę błędu, wykonaj następującą akcję.

Uruchom następujące polecenie:

az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100

BŁĄD: BadArgument

Ten błąd może wystąpić w przypadku używania zarządzanych punktów końcowych online lub punktów końcowych online platformy Kubernetes z następujących powodów:

Ten błąd może również wystąpić tylko w przypadku korzystania z punktów końcowych online platformy Kubernetes z następujących powodów:

Subskrypcja nie istnieje

Przywołyna subskrypcja platformy Azure musi być istniejąca i aktywna. Ten błąd występuje, gdy platforma Azure nie może odnaleźć wprowadzonego identyfikatora subskrypcji. Błąd może być spowodowany literówką w identyfikatorze subskrypcji. Sprawdź dokładnie, czy identyfikator subskrypcji został poprawnie wprowadzony i jest obecnie aktywny.

Błąd autoryzacji

Po aprowizacji zasobu obliczeniowego podczas tworzenia wdrożenia platforma Azure ściąga obraz kontenera użytkownika z rejestru kontenerów obszaru roboczego i instaluje model użytkownika i artefakty kodu w kontenerze użytkownika z konta magazynu obszaru roboczego. Platforma Azure używa tożsamości zarządzanych do uzyskiwania dostępu do konta magazynu i rejestru kontenerów.

W przypadku utworzenia skojarzonego punktu końcowego z tożsamością przypisaną przez użytkownika tożsamość zarządzana użytkownika musi mieć uprawnienie Czytelnik danych obiektu blob usługi Storage na koncie magazynu obszaru roboczego i uprawnienie AcrPull w rejestrze kontenerów obszaru roboczego. Upewnij się, że tożsamość przypisana przez użytkownika ma odpowiednie uprawnienia.

Jeśli utworzysz skojarzony punkt końcowy z tożsamością przypisaną przez system, uprawnienie kontroli dostępu opartej na rolach (RBAC) platformy Azure zostanie automatycznie przyznane i nie będą potrzebne żadne dalsze uprawnienia. Aby uzyskać więcej informacji, zobacz Błąd autoryzacji rejestru kontenerów.

Nieprawidłowa specyfikacja funkcji szablonu

Ten błąd występuje, gdy funkcja szablonu została niepoprawnie określona. Napraw zasady lub usuń przypisanie zasad w celu odblokowania. Komunikat o błędzie może zawierać nazwę przypisania zasad i definicję zasad, aby ułatwić debugowanie tego błędu. Zobacz Struktura definicji zasad platformy Azure, aby uzyskać porady, aby uniknąć błędów szablonów.

Nie można pobrać obrazu kontenera użytkownika

Nie można odnaleźć kontenera użytkownika. Sprawdź dzienniki kontenerów , aby uzyskać więcej szczegółów.

Upewnij się, że obraz kontenera jest dostępny w rejestrze kontenerów obszaru roboczego. Jeśli na przykład obraz to testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest, możesz użyć następującego polecenia, aby sprawdzić repozytorium:

az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table`

Nie można pobrać modelu użytkownika

Nie można odnaleźć modelu użytkownika. Sprawdź dzienniki kontenerów , aby uzyskać więcej szczegółów. Upewnij się, że model został zarejestrowany w tym samym obszarze roboczym co wdrożenie.

Aby wyświetlić szczegóły modelu w obszarze roboczym, wykonaj następującą akcję. Aby uzyskać informacje o modelu, należy określić wersję lub etykietę.

Uruchom następujące polecenie:

az ml model show --name <model-name> --version <version>

Sprawdź również, czy obiekty blob znajdują się na koncie magazynu obszaru roboczego. Jeśli na przykład obiekt blob to https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl, możesz użyć następującego polecenia, aby sprawdzić, czy obiekt blob istnieje:

az storage blob exists --account-name <storage-account-name> --container-name <container-name> --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>

Jeśli obiekt blob jest obecny, możesz użyć następującego polecenia, aby pobrać dzienniki z inicjatora magazynu:

az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> –-container storage-initializer`

Format modelu MLflow z siecią prywatną jest nieobsługiwany

Nie można używać funkcji sieci prywatnej z formatem modelu MLflow, jeśli używasz starszej metody izolacji sieciowej dla zarządzanych punktów końcowych online. Jeśli musisz wdrożyć model MLflow z podejściem wdrażania bez kodu, spróbuj użyć zarządzanej sieci wirtualnej obszaru roboczego.

Żądania zasobów większe niż limity

Żądania dotyczące zasobów muszą być mniejsze lub równe limitom. Jeśli nie ustawisz limitów, usługa Azure Machine Learning ustawia wartości domyślne podczas dołączania zasobów obliczeniowych do obszaru roboczego. Limity można sprawdzić w witrynie Azure Portal lub za pomocą az ml compute show polecenia .

Azureml-fe nie jest gotowy

Składnik frontonu azureml-fe , który kieruje przychodzące żądania wnioskowania do wdrożonych usług jest instalowany podczas instalacji rozszerzenia k8s i automatycznie skaluje w razie potrzeby. Ten składnik powinien mieć co najmniej jedną replikę w dobrej kondycji w klastrze.

Ten błąd występuje, jeśli składnik nie jest dostępny po wyzwoleniu punktu końcowego online rozwiązania Kubernetes lub utworzenia lub żądania aktualizacji wdrożenia. Sprawdź stan zasobnika i dzienniki, aby rozwiązać ten problem. Możesz również spróbować zaktualizować rozszerzenie k8s zainstalowane w klastrze.

BŁĄD: ResourceNotReady

Aby uruchomić plik score.py , który należy podać w ramach wdrożenia, platforma Azure tworzy kontener zawierający wszystkie zasoby wymagane przez score.py i uruchamia skrypt oceniania w tym kontenerze. Błąd w tym scenariuszu polega na tym, że ten kontener ulega awarii podczas uruchamiania, więc ocenianie nie może się zdarzyć. Ten błąd może wystąpić w jednym z następujących warunków:

  • Wystąpił błąd w score.py. Użyj get-logs polecenia , aby zdiagnozować typowe problemy, takie jak:

    • Pakiet, który score.py próbuje zaimportować pakiet, który nie jest uwzględniony w środowisku conda
    • Błąd składni
    • Błąd w metodzie init()

    Jeśli get-logs nie generuje żadnych dzienników, zwykle oznacza to, że nie można uruchomić kontenera. Aby debugować ten problem, spróbuj wdrożyć lokalnie.

  • Sondy gotowości lub aktualności nie są poprawnie skonfigurowane.

  • Inicjowanie kontenera trwa zbyt długo, więc sonda gotowości lub aktualności kończy się niepowodzeniem poza progiem awarii. W takim przypadku dostosuj ustawienia sondy, aby umożliwić dłuższy czas inicjowania kontenera. Możesz też wypróbować większą obsługiwaną jednostkę SKU maszyny wirtualnej, która przyspiesza inicjowanie.

  • W konfiguracji środowiska kontenera występuje błąd, taki jak brak zależności.

    Jeśli wystąpi TypeError: register() takes 3 positional arguments but 4 were given błąd, sprawdź zależność między platformą Flask w wersji 2 i azureml-inference-server-http. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z serwerem HTTP.

BŁĄD: ResourceNotFound

Ten błąd może wystąpić podczas korzystania z zarządzanego punktu końcowego online lub punktu końcowego online platformy Kubernetes z następujących powodów:

Usługa Resource Manager nie może odnaleźć zasobu

Ten błąd występuje, gdy usługa Azure Resource Manager nie może znaleźć wymaganego zasobu. Na przykład ten błąd można zobaczyć, jeśli nie można odnaleźć konta magazynu w określonej ścieżce. Sprawdź dokładnie ścieżkę lub specyfikacje nazw pod kątem dokładności i pisowni. Aby uzyskać więcej informacji, zobacz Rozwiązywanie błędów dotyczących nie znaleziono zasobu.

Błąd autoryzacji rejestru kontenerów

Ten błąd występuje, gdy do wdrożenia jest dostarczany obraz należący do prywatnego lub niedostępnego w inny sposób rejestru kontenerów. Interfejsy API usługi Azure Machine Learning nie mogą akceptować poświadczeń rejestru prywatnego.

Aby wyeliminować ten błąd, upewnij się, że rejestr kontenerów nie jest prywatny lub wykonaj następujące czynności:

  1. Udziel roli acrPull rejestru prywatnego do tożsamości systemowej punktu końcowego online.
  2. W definicji środowiska określ adres obrazu prywatnego i przekaż instrukcję, aby nie modyfikować ani kompilować obrazu.

Jeśli to ograniczenie ryzyka powiedzie się, obraz nie wymaga utworzenia, a końcowy adres obrazu jest podanym adresem obrazu. W czasie wdrażania tożsamość systemu punktu końcowego online pobiera obraz z rejestru prywatnego.

Aby uzyskać więcej informacji diagnostycznych, zobacz Jak używać diagnostyki obszaru roboczego.

BŁĄD: WorkspaceManagedNetworkNotReady

Ten błąd występuje, jeśli spróbujesz utworzyć wdrożenie online, które włącza zarządzaną sieć wirtualną obszaru roboczego, ale zarządzana sieć wirtualna nie jest jeszcze aprowizowana. Aprowizuj zarządzaną sieć wirtualną obszaru roboczego przed utworzeniem wdrożenia online.

Aby ręcznie aprowizować zarządzaną sieć wirtualną obszaru roboczego, postępuj zgodnie z instrukcjami w temacie Ręczne aprowizuj zarządzaną sieć wirtualną. Następnie możesz rozpocząć tworzenie wdrożeń online. Aby uzyskać więcej informacji, zobacz Izolacja sieci z zarządzanym punktem końcowym online i Zabezpieczanie zarządzanych punktów końcowych online przy użyciu izolacji sieciowej.

BŁĄD: OperationCanceled

Ten błąd może wystąpić podczas korzystania z zarządzanego punktu końcowego online lub punktu końcowego online platformy Kubernetes z następujących powodów:

Operacja anulowana przez inną operację o wyższym priorytcie

Operacje platformy Azure mają określony poziom priorytetu i są wykonywane od najwyższego do najniższego. Ten błąd występuje, gdy inna operacja, która ma wyższy priorytet, zastępuje operację. Ponów próbę wykonania operacji bez anulowania.

Operacja anulowana oczekiwanie na potwierdzenie blokady

Operacje platformy Azure mają krótki okres oczekiwania po przesłaniu, podczas którego pobierają blokadę, aby upewnić się, że nie napotykają warunków wyścigu. Ten błąd występuje, gdy przesłana operacja jest taka sama jak inna operacja. Druga operacja oczekuje obecnie na potwierdzenie otrzymania blokady przed kontynuowaniem.

Być może podobne żądanie zostało przesłane zbyt szybko po początkowym żądaniu. Ponawianie próby wykonania operacji po odczekaniu do minuty może pozwolić na jej wykonanie bez anulowania.

BŁĄD: SecretsInjectionError

Pobieranie wpisów tajnych i iniekcja podczas tworzenia wdrożenia online używa tożsamości skojarzonej z punktem końcowym online do pobierania wpisów tajnych z połączeń obszaru roboczego lub magazynów kluczy. Ten błąd występuje z jednego z następujących powodów:

  • Tożsamość punktu końcowego nie ma uprawnień RBAC platformy Azure do odczytywania wpisów tajnych z połączeń obszaru roboczego lub magazynów kluczy, mimo że definicja wdrożenia określiła wpisy tajne jako odwołania mapowane na zmienne środowiskowe. Przypisanie roli może zająć trochę czasu, aby zmiany zaczęły obowiązywać.

  • Format odwołań do wpisów tajnych jest nieprawidłowy lub określone wpisy tajne nie istnieją w połączeniach obszaru roboczego lub magazynach kluczy.

Aby uzyskać więcej informacji, zobacz Wstrzykiwanie wpisów tajnych w punktach końcowych online (wersja zapoznawcza) i Uzyskiwanie dostępu do wpisów tajnych z wdrożenia online przy użyciu iniekcji wpisu tajnego (wersja zapoznawcza).

BŁĄD: InternalServerError

Ten błąd oznacza, że wystąpił problem z usługą Azure Machine Learning, która musi zostać naprawiona. Prześlij bilet pomocy technicznej klienta ze wszystkimi informacjami potrzebnymi do rozwiązania problemu.

Typowe błędy specyficzne dla wdrożeń platformy Kubernetes

Błędy tożsamości i uwierzytelniania:

Błędy crashloopbackoff:

Błędy skryptu oceniania:

Inne błędy:

BŁĄD: ACRSecretError

Podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes może wystąpić ten błąd z jednego z następujących powodów:

  • Przypisanie roli nie zostało ukończone. Poczekaj kilka sekund i spróbuj ponownie.

  • Klaster Kubernetes z obsługą usługi Azure Arc lub rozszerzenie usługi Azure Machine Learning z obsługą usługi Azure Arc nie jest poprawnie zainstalowane ani skonfigurowane. Sprawdź konfigurację i stan rozszerzenia Kubernetes z włączoną usługą Azure Arc lub Azure Machine Learning.

  • Klaster Kubernetes ma nieprawidłową konfigurację sieci. Sprawdź serwer proxy, zasady sieciowe lub certyfikat.

  • Prywatny klaster usługi AKS nie ma odpowiednich punktów końcowych. Upewnij się, że skonfigurowaliśmy prywatne punkty końcowe dla usługi Container Registry, konta magazynu i obszaru roboczego w sieci wirtualnej usługi AKS.

  • Wersja rozszerzenia usługi Azure Machine Learning to wersja 1.1.25 lub nowsza. Upewnij się, że wersja rozszerzenia jest nowsza niż wersja 1.1.25.

BŁĄD: TokenRefreshFailed

Ten błąd występuje, ponieważ tożsamość klastra Kubernetes nie jest poprawnie ustawiona, więc rozszerzenie nie może uzyskać poświadczeń podmiotu zabezpieczeń z platformy Azure. Zainstaluj ponownie rozszerzenie usługi Azure Machine Learning i spróbuj ponownie.

BŁĄD: GetAADTokenFailed

Ten błąd występuje, ponieważ klaster Kubernetes zażąda tokenu identyfikatora Entra firmy Microsoft zakończył się niepowodzeniem lub upłynął limit czasu. Sprawdź dostęp do sieci, a następnie spróbuj ponownie.

  • Postępuj zgodnie z instrukcjami w artykule Korzystanie z obliczeń kubernetes, aby sprawdzić serwer proxy ruchu wychodzącego i upewnić się, że klaster może nawiązać połączenie z obszarem roboczym. Adres URL punktu końcowego obszaru roboczego można znaleźć w niestandardowej definicji zasobu punktu końcowego online (CRD) w klastrze.

  • Sprawdź, czy obszar roboczy zezwala na dostęp publiczny. Niezależnie od tego, czy sam klaster usługi AKS jest publiczny czy prywatny, jeśli prywatny obszar roboczy wyłączy dostęp do sieci publicznej, klaster Kubernetes może komunikować się z tym obszarem roboczym tylko za pośrednictwem łącza prywatnego. Aby uzyskać więcej informacji, zobacz Co to jest bezpieczne środowisko wnioskowania usługi AKS.

BŁĄD: ACRAuthenticationChallengeFailed

Ten błąd występuje, ponieważ klaster Kubernetes nie może nawiązać połączenia z usługą Container Registry obszaru roboczego w celu wykonania zadania uwierzytelniania. Sprawdź sieć, zwłaszcza dostęp do sieci publicznej usługi Container Registry, a następnie spróbuj ponownie. Aby sprawdzić sieć, możesz wykonać kroki rozwiązywania problemów opisane w artykule GetAADTokenFailed .

BŁĄD: ACRTokenExchangeFailed

Ten błąd występuje, ponieważ token identyfikatora entra firmy Microsoft nie jest jeszcze autoryzowany, więc token usługi Container Registry wymiany klastra Kubernetes kończy się niepowodzeniem. Przypisanie roli zajmuje trochę czasu, więc poczekaj minutę, a następnie spróbuj ponownie.

Ten błąd może być również spowodowany zbyt wieloma współbieżnych żądań do usługi Container Registry. Ten błąd powinien być przejściowy i można spróbować ponownie później.

BŁĄD: KubernetesUnaccessible

Podczas wdrożeń modelu Kubernetes może wystąpić następujący błąd:

{"code":"BadRequest","statusCode":400,"message":"The request is invalid.","details":[{"code":"KubernetesUnaccessible","message":"Kubernetes error: AuthenticationException. Reason: InvalidCertificate"}],...}

Aby wyeliminować ten błąd, możesz obrócić certyfikat usługi AKS dla klastra. Nowy certyfikat powinien zostać zaktualizowany po upływie 5 godzin, aby można było poczekać 5 godzin i wdrożyć go ponownie. Aby uzyskać więcej informacji, zobacz Rotacja certyfikatów w usłudze Azure Kubernetes Service (AKS).

BŁĄD: ImagePullLoopBackOff

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ nie można pobrać obrazów z rejestru kontenerów, co powoduje niepowodzenie ściągania obrazów. Sprawdź zasady sieci klastra i rejestr kontenerów obszaru roboczego, aby sprawdzić, czy klaster może ściągać obrazy z rejestru kontenerów.

BŁĄD: DeploymentCrashLoopBackOff

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ kontener użytkownika uległ awarii podczas inicjowania. Istnieją dwa możliwe przyczyny tego błędu:

  • Skrypt użytkownika score.py zawiera błąd składniowy lub błąd importu, który zgłasza wyjątki podczas inicjowania.
  • Zasobnik wdrożenia potrzebuje więcej pamięci niż limit.

Aby wyeliminować ten błąd, najpierw sprawdź dzienniki wdrażania pod kątem wszelkich wyjątków w skryptach użytkownika. Jeśli błąd będzie się powtarzać, spróbuj rozszerzyć limit pamięci typu zasobu/wystąpienia.

BŁĄD: KubernetesCrashLoopBackOff

Ten błąd może wystąpić podczas tworzenia lub aktualizowania punktów końcowych usługi Kubernetes online lub wdrożeń z jednego z następujących powodów:

  • Co najmniej jeden zasobnik jest zablokowany w stanie CrashLoopBackoff. Sprawdź, czy dziennik wdrażania istnieje i czy w dzienniku znajdują się komunikaty o błędach.
  • Wystąpił błąd w score.py , a kontener uległ awarii podczas inicjowania kodu oceny. Postępuj zgodnie z instrukcjami w obszarze BŁĄD: ResourceNotReady.
  • Proces oceniania wymaga więcej pamięci niż limit konfiguracji wdrożenia. Możesz spróbować zaktualizować wdrożenie przy użyciu większego limitu pamięci.

BŁĄD: NamespaceNotFound

Ten błąd może wystąpić podczas tworzenia lub aktualizowania punktów końcowych online platformy Kubernetes, ponieważ używana przestrzeń nazw usługi Kubernetes jest niedostępna w klastrze. Sprawdź zasoby obliczeniowe kubernetes w portalu obszaru roboczego i sprawdź przestrzeń nazw w klastrze Kubernetes. Jeśli przestrzeń nazw nie jest dostępna, odłącz starsze zasoby obliczeniowe i dołącz ponownie, aby utworzyć nową, określając przestrzeń nazw, która już istnieje w klastrze.

BŁĄD: UserScriptInitFailed

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ init funkcja w przekazanym pliku score.py zgłosiła wyjątek. Sprawdź dzienniki wdrażania, aby wyświetlić szczegółowy komunikat o wyjątku i naprawić wyjątek.

BŁĄD: UserScriptImportError

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ przekazany plik score.py importuje niedostępne pakiety. Sprawdź dzienniki wdrażania, aby wyświetlić szczegółowy komunikat o wyjątku i naprawić wyjątek.

BŁĄD: UserScriptFunctionNotFound

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ przekazany plik score.py nie ma funkcji o nazwie init() lub run(). Sprawdź kod i dodaj funkcję .

BŁĄD: EndpointNotFound

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ system nie może odnaleźć zasobu punktu końcowego dla wdrożenia w klastrze. Utwórz wdrożenie w istniejącym punkcie końcowym lub utwórz punkt końcowy najpierw w klastrze.

BŁĄD: EndpointAlreadyExists

Ten błąd może wystąpić podczas tworzenia punktu końcowego online kubernetes, ponieważ punkt końcowy już istnieje w klastrze. Nazwa punktu końcowego powinna być unikatowa dla każdego obszaru roboczego i klastra, dlatego utwórz punkt końcowy o innej nazwie.

BŁĄD: OcenianieFe w złej kondycji

Ten błąd może wystąpić podczas tworzenia lub aktualizowania punktu końcowego usługi Kubernetes online lub wdrożenia, ponieważ usługa systemowa azureml-fe uruchomiona w klastrze nie została znaleziona lub jest w złej kondycji. Aby rozwiązać ten problem, zainstaluj ponownie lub zaktualizuj rozszerzenie usługi Azure Machine Learning w klastrze.

BŁĄD: ValidateScoringFailed

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ sprawdzanie poprawności adresu URL żądania oceniania nie powiodło się podczas przetwarzania modelu. Sprawdź adres URL punktu końcowego, a następnie spróbuj ponownie wdrożyć.

BŁĄD: InvalidDeploymentSpec

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożeń online platformy Kubernetes, ponieważ specyfikacja wdrożenia jest nieprawidłowa. Sprawdź komunikat o błędzie, aby upewnić się, że instance count element jest prawidłowy. Jeśli włączono skalowanie automatyczne, upewnij się, że minimum instance count wartości i maximum instance count są prawidłowe.

BŁĄD: PodUnschedulable

Ten błąd może wystąpić podczas tworzenia lub aktualizowania punktów końcowych usługi Kubernetes online lub wdrożeń z jednego z następujących powodów:

  • System nie może zaplanować zasobnika do węzłów z powodu niewystarczającej ilości zasobów w klastrze.
  • Żaden węzeł nie pasuje do selektora koligacji węzła.

Aby wyeliminować ten błąd, wykonaj następujące kroki:

  1. Sprawdź definicję node selector użytych instance_type węzłów i konfigurację node label węzłów klastra.
  2. instance_type Sprawdź rozmiar jednostki SKU węzła dla klastra usługi AKS lub zasobu węzła dla klastra Kubernetes z obsługą usługi Azure Arc.
  3. Jeśli klaster jest niedostatecznie zasób, zmniejsz wymaganie dotyczące zasobu typu wystąpienia lub użyj innego typu wystąpienia z mniejszymi wymaganiami dotyczącymi zasobów.
  4. Jeśli klaster nie ma więcej zasobów, aby spełnić wymagania wdrożenia, usuń niektóre wdrożenia, aby zwolnić zasoby.

BŁĄD: PodOutOfMemory

Ten błąd może wystąpić podczas tworzenia lub aktualizowania wdrożenia online, ponieważ limit pamięci udzielony dla wdrożenia jest niewystarczający. Aby wyeliminować ten błąd, możesz ustawić limit pamięci na większą wartość lub użyć większego typu wystąpienia.

BŁĄD: WnioskowanieClientCallFailed

Ten błąd może wystąpić podczas tworzenia lub aktualizowania punktów końcowych usługi Kubernetes w trybie online lub wdrożeń, ponieważ rozszerzenie k8s klastra Kubernetes nie jest możliwe do nawiązania połączenia. W takim przypadku odłącz i ponownie dołącz obliczenia.

Aby rozwiązać problemy z błędami przez ponowne dołączanie, upewnij się, że ponownie dołączono tę samą konfigurację co odłączone zasoby obliczeniowe, takie jak nazwa obliczeniowa i przestrzeń nazw, aby uniknąć innych błędów. Jeśli nadal nie działa, poproś administratora, który może uzyskać dostęp do klastra, aby kubectl get po -n azureml sprawdzić, czy zasobniki serwera przekaźnika są uruchomione.

Problemy z użyciem modelu

Typowe błędy użycia modelu wynikające ze stanu operacji punktu końcowego invoke obejmują problemy z limitem przepustowości, zasady CORS i różne kody stanu HTTP.

Problemy z limitem przepustowości

Zarządzane punkty końcowe online mają limity przepustowości dla każdego punktu końcowego. Konfigurację limitu można znaleźć w limitach dla punktów końcowych online. Jeśli użycie przepustowości przekroczy limit, żądanie zostanie opóźnione.

Aby monitorować opóźnienie przepustowości, użyj metryki Bajty sieci, aby zrozumieć bieżące użycie przepustowości. Aby uzyskać więcej informacji, zobacz Monitorowanie zarządzanych punktów końcowych online.

W przypadku wymuszania limitu przepustowości są zwracane dwie przyczepy odpowiedzi:

  • ms-azureml-bandwidth-request-delay-ms to czas opóźnienia w milisekundach, który upłynął do przeniesienia strumienia żądania.
  • ms-azureml-bandwidth-response-delay-msto czas opóźnienia w milisekundach, który trwał na transfer strumienia odpowiedzi.

Zablokowane przez zasady MECHANIZMU CORS

Punkty końcowe online w wersji 2 nie obsługują natywnie współużytkowania zasobów między źródłami (CORS). Jeśli aplikacja internetowa próbuje wywołać punkt końcowy bez prawidłowej obsługi żądań wstępnych CORS, możesz uzyskać następujący komunikat o błędzie:

Access to fetch at 'https://{your-endpoint-name}.{your-region}.inference.ml.azure.com/score' from origin http://{your-url} has been blocked by CORS policy: Response to preflight request doesn't pass access control check. No 'Access-control-allow-origin' header is present on the request resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with the CORS disabled.

Możesz użyć usługi Azure Functions, bramy aplikacja systemu Azure lub innej usługi jako warstwy tymczasowej do obsługi żądań wstępnych CORS.

Kody stanu HTTP

W przypadku uzyskiwania dostępu do punktów końcowych online za pomocą żądań REST zwrócone kody stanu są zgodne ze standardami kodów stanu HTTP. W poniższych sekcjach przedstawiono szczegółowe informacje na temat sposobu mapowania błędów wywołania punktu końcowego i przewidywania na kody stanu HTTP.

Typowe kody błędów zarządzanych punktów końcowych online

Poniższa tabela zawiera typowe kody błędów, gdy żądania REST używają zarządzanych punktów końcowych online:

Kod stanu Przyczyna opis
200 OK Model został wykonany pomyślnie w granicach opóźnienia.
401 Brak autoryzacji Nie masz uprawnień do wykonania żądanej akcji, takiej jak wynik, lub token wygasł lub ma nieprawidłowy format. Aby uzyskać więcej informacji, zobacz Authentication for managed online endpoints (Uwierzytelnianie zarządzanych punktów końcowych online) i Authentication clients for online endpoints (Uwierzytelnianie zarządzanych punktów końcowych online) i Authentication clients for online endpoints (Uwierzytelnianie zarządzanych punktów końcowych online) i
404 Nie znaleziono Punkt końcowy nie ma żadnego prawidłowego wdrożenia z dodatnią wagą.
408 Przekroczono limit czasu żądania Wykonanie modelu trwało dłużej niż limit czasu podany w request_timeout_ms obszarze request_settings konfiguracji wdrożenia modelu.
424 Błąd modelu Jeśli kontener modelu zwraca odpowiedź inną niż 200, platforma Azure zwraca wartość 424. Model Status Code Sprawdź wymiar w Requests Per Minute obszarze metryki w Eksploratorze metryk usługi Azure Monitor punktu końcowego. Możesz też sprawdzić nagłówki ms-azureml-model-error-statuscode odpowiedzi i ms-azureml-model-error-reason uzyskać więcej informacji. Jeśli 424 jest dostarczany z niepowodzeniem sondy liveness lub gotowości, rozważ dostosowanie parametru ProbeSettings, aby umożliwić więcej czasu na sondowanie gotowości lub utrzymania kontenera.
429 Zbyt wiele oczekujących żądań Model jest obecnie coraz więcej żądań, niż może obsłużyć. Aby zagwarantować bezproblemową operację, usługa Azure Machine Learning zezwala na przetwarzanie równoległe maksymalnie 2 * max_concurrent_requests_per_instance * instance_count requests w danym momencie. Żądania przekraczające tę wartość maksymalną są odrzucane.

Konfigurację wdrażania modelu można przejrzeć w request_settings sekcjach i , scale_settings aby zweryfikować i dostosować te ustawienia. Upewnij się również, że zmienna środowiskowa WORKER_COUNT jest poprawnie przekazywana, zgodnie z opisem w artykule RequestSettings.

Jeśli wystąpi ten błąd podczas korzystania z skalowania automatycznego, model otrzymuje żądania szybciej niż system może skalować w górę. Rozważ ponowne wysyłanie żądań z wykładniczym wycofywaniem, aby dać czas systemowy na dostosowanie. Można również zwiększyć liczbę wystąpień przy użyciu kodu w celu obliczenia liczby wystąpień. Połącz te kroki z ustawieniem skalowania automatycznego, aby upewnić się, że model jest gotowy do obsługi napływu żądań.
429 Ograniczenie szybkości Liczba żądań na sekundę osiągnęła limity zarządzanych punktów końcowych online.
500 Wewnętrzny błąd serwera. Infrastruktura aprowizowana w usłudze Azure Machine Learning kończy się niepowodzeniem.

Typowe kody błędów dla punktów końcowych online platformy Kubernetes

Poniższa tabela zawiera typowe kody błędów, gdy żądania REST używają punktów końcowych online platformy Kubernetes:

Kod stanu Błąd opis
409 Błąd konfliktu Gdy operacja jest już w toku, każda nowa operacja w tym samym punkcie końcowym online odpowiada z błędem konfliktu 409. Jeśli na przykład operacja tworzenia lub aktualizowania punktu końcowego online jest w toku, wyzwalanie nowej operacji usuwania zgłasza błąd.
502 Wyjątek lub awaria run() w metodzie pliku score.py Jeśli wystąpi błąd w score.py, na przykład zaimportowany pakiet, który nie istnieje w środowisku conda, błąd składni lub błąd w init() metodzie, zobacz ERROR: ResourceNotReady , aby debugować plik.
503 Duże skoki liczby żądań na sekundę Autoskalator został zaprojektowany tak, aby obsługiwał stopniowe zmiany obciążenia. W przypadku dużych skoków liczby żądań na sekundę klienci mogą otrzymywać kod stanu HTTP 503. Mimo że narzędzie do skalowania automatycznego szybko reaguje, utworzenie większej liczby kontenerów zajmuje usłudze AKS znaczną ilość czasu. Zobacz Jak zapobiec błędom kodu stanu 503.
504 Upłynął limit czasu żądania Kod stanu 504 wskazuje, że upłynął limit czasu żądania. Domyślne ustawienie limitu czasu wynosi 5 sekund. Możesz zwiększyć limit czasu lub spróbować przyspieszyć punkt końcowy, modyfikując score.py w celu usunięcia niepotrzebnych wywołań. Jeśli te akcje nie rozwiążą problemu, kod może znajdować się w stanie braku odpowiedzi lub nieskończonej pętli. Postępuj zgodnie z instrukcjami ERROR: ResourceNotReady , aby debugować plik score.py .
500 Wewnętrzny błąd serwera. Infrastruktura aprowizowana w usłudze Azure Machine Learning kończy się niepowodzeniem.

Jak zapobiec błędom kodu stanu 503

Wdrożenia online platformy Kubernetes obsługują skalowanie automatyczne, co umożliwia dodawanie replik do obsługi dodatkowego obciążenia. Aby uzyskać więcej informacji, zobacz Router wnioskowania usługi Azure Machine Learning. Decyzja o skalowaniu w górę lub w dół jest oparta na wykorzystaniu bieżących replik kontenerów.

Dwie akcje mogą pomóc w zapobieganiu błędom kodu stanu 503: zmiana poziomu wykorzystania na potrzeby tworzenia nowych replik lub zmiana minimalnej liczby replik. Można użyć tych podejść indywidualnie lub w połączeniu.

  • Zmień cel wykorzystania, w którym autoskalowanie tworzy nowe repliki, ustawiając autoscale_target_utilization wartość na niższą. Ta zmiana nie powoduje szybszego tworzenia replik, ale przy niższym progu wykorzystania. Na przykład zmiana wartości na 30% powoduje utworzenie replik w przypadku wystąpienia 30% użycia zamiast oczekiwania na wykorzystanie usługi przez 70%.

  • Zmień minimalną liczbę replik, aby zapewnić większą pulę, która może obsługiwać przychodzące skoki.

Jak obliczyć liczbę wystąpień

Aby zwiększyć liczbę wystąpień, możesz obliczyć wymagane repliki w następujący sposób:

from math import ceil
# target requests per second
target_rps = 20
# time to process the request (in seconds, choose appropriate percentile)
request_process_time = 10
# Maximum concurrent requests per instance
max_concurrent_requests_per_instance = 1
# The target CPU usage of the model container. 70% in this example
target_utilization = .7

concurrent_requests = target_rps * request_process_time / target_utilization

# Number of instance count
instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)

Uwaga

Jeśli otrzymasz skoki żądań większe niż nowe minimalne repliki mogą obsłużyć, może zostać ponownie wyświetlonych 503. Na przykład w miarę wzrostu ruchu do punktu końcowego może być konieczne zwiększenie minimalnej liczby replik.

Jeśli punkt końcowy usługi Kubernetes w trybie online korzysta już z bieżących maksymalnych replik i nadal otrzymujesz kody stanu 503, zwiększ autoscale_max_replicas wartość, aby zwiększyć maksymalną liczbę replik.

Problemy z izolacją sieci

Ta sekcja zawiera informacje o typowych problemach z izolacją sieci.

Tworzenie punktu końcowego online kończy się niepowodzeniem z komunikatem V1LegacyMode == true

Obszar roboczy usługi Azure Machine Learning można skonfigurować dla v1_legacy_modeprogramu , który wyłącza interfejsy API w wersji 2. Zarządzane punkty końcowe online to funkcja platformy interfejsu API w wersji 2 i nie działają, jeśli v1_legacy_mode jest włączona dla obszaru roboczego.

Aby wyłączyć v1_legacy_modeusługę , zobacz Izolacja sieciowa w wersji 2.

Ważne

Zanim wyłączysz v1_legacy_modeusługę , sprawdź, czy zespół ds. zabezpieczeń sieci został włączony z jakiegoś powodu.

Tworzenie punktu końcowego online z uwierzytelnianiem opartym na kluczach kończy się niepowodzeniem

Użyj następującego polecenia, aby wyświetlić listę reguł sieciowych magazynu kluczy platformy Azure dla obszaru roboczego. Zastąp <keyvault-name> ciąg nazwą magazynu kluczy:

az keyvault network-rule list -n <keyvault-name>

Odpowiedź dla tego polecenia jest podobna do następującego kodu JSON:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Jeśli wartość bypass nie AzureServicesjest równa , skorzystaj ze wskazówek w temacie Konfigurowanie ustawień sieci magazynu kluczy, aby ustawić ją na AzureServices.

Wdrożenia online kończą się niepowodzeniem z powodu błędu pobierania obrazu

  1. Sprawdź, czy flaga egress-public-network-access dotyczy disabled wdrożenia. Jeśli ta flaga jest włączona, a widoczność rejestru kontenerów jest prywatna, ten błąd jest oczekiwany.

  2. Użyj następującego polecenia, aby sprawdzić stan połączenia prywatnego punktu końcowego. Zastąp <registry-name> ciąg nazwą rejestru kontenerów platformy Azure dla obszaru roboczego:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    W kodzie odpowiedzi sprawdź, czy status pole jest ustawione na Approved. Jeśli nie, użyj następującego polecenia, aby go zatwierdzić. Zastąp <private-endpoint-name> ciąg nazwą zwróconą z poprzedniego polecenia.

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

Nie można rozpoznać punktu końcowego oceniania

  1. Sprawdź, czy klient wystawiający żądanie oceniania jest siecią wirtualną, która może uzyskać dostęp do obszaru roboczego usługi Azure Machine Learning.

  2. nslookup Użyj polecenia w nazwie hosta punktu końcowego, aby pobrać informacje o adresie IP, na przykład:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    Odpowiedź zawiera adres, który powinien znajdować się w zakresie dostarczonym przez sieć wirtualną.

    Uwaga

    • W przypadku punktu końcowego online platformy Kubernetes nazwa hosta punktu końcowego powinna być nazwą CName (nazwą domeny) określoną w klastrze Kubernetes.
    • Jeśli punkt końcowy to HTTP, adres IP znajduje się w identyfikatorze URI punktu końcowego, który można uzyskać z interfejsu użytkownika programu Studio.
    • Więcej sposobów uzyskania adresu IP punktu końcowego można znaleźć w artykule Secure Kubernetes online endpoint (Zabezpieczanie punktu końcowego usługi Kubernetes w trybie online).
  3. nslookup Jeśli polecenie nie rozpozna nazwy hosta, wykonaj następujące czynności:

Zarządzane punkty końcowe online

  1. Użyj następującego polecenia, aby sprawdzić, czy rekord A istnieje w strefie prywatnej serwera nazw domen (DNS) dla sieci wirtualnej.

    az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
    

    Wyniki powinny zawierać wpis podobny do *.<GUID>.inference.<region>.

  2. Jeśli nie zostanie zwrócona żadna wartość wnioskowania, usuń prywatny punkt końcowy dla obszaru roboczego, a następnie utwórz go ponownie. Aby uzyskać więcej informacji, zobacz Jak skonfigurować prywatny punkt końcowy.

  3. Jeśli obszar roboczy z prywatnym punktem końcowym używa niestandardowego serwera DNS, uruchom następujące polecenie, aby sprawdzić, czy rozpoznawanie z niestandardowego serwera DNS działa poprawnie.

dig endpointname.westcentralus.inference.ml.azure.com

Punkty końcowe online platformy Kubernetes

  1. Sprawdź konfigurację DNS w klastrze Kubernetes.

  2. Sprawdź również, czy azureml-fe działa zgodnie z oczekiwaniami, używając następującego polecenia:

    kubectl exec -it deploy/azureml-fe -- /bin/bash
    (Run in azureml-fe pod)
    
    curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    

    W przypadku protokołu HTTP użyj następującego polecenia:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Jeśli protokoły HTTP curl kończą się niepowodzeniem lub upłynął limit czasu, ale protokół HTTP działa, sprawdź, czy certyfikat jest prawidłowy.

  4. Jeśli poprzedni proces nie może rozpoznać rekordu A, sprawdź, czy rozpoznawanie działa z usługi Azure DNS (168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    
  5. Jeśli powyższe polecenie powiedzie się, rozwiąż problemy z warunkowym usługą przesyłania dalej dla łącza prywatnego w niestandardowym systemie DNS.

Nie można ocenić wdrożeń online

  1. Uruchom następujące polecenie, aby sprawdzić, czy wdrożenie zakończyło się pomyślnie:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Jeśli wdrożenie zakończyło się pomyślnie, wartość parametru state to Succeeded.

  2. Jeśli wdrożenie zakończyło się pomyślnie, użyj następującego polecenia, aby sprawdzić, czy ruch jest przypisany do wdrożenia. Zastąp <endpointname> ciąg nazwą punktu końcowego.

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    Odpowiedź z tego polecenia powinna zawierać wartość procentową ruchu przypisanego do wdrożeń.

    Napiwek

    Ten krok nie jest konieczny, jeśli używasz nagłówka azureml-model-deployment w żądaniu do kierowania tego wdrożenia.

  3. Jeśli przypisania ruchu lub nagłówek wdrożenia są ustawione poprawnie, użyj następującego polecenia, aby pobrać dzienniki dla punktu końcowego. Zastąp <endpointname> ciąg nazwą punktu końcowego i <deploymentname> wdrożeniem.

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    
  4. Przejrzyj dzienniki, aby sprawdzić, czy wystąpił problem z uruchomieniem kodu oceniania podczas przesyłania żądania do wdrożenia.

Problemy z serwerem wnioskowania

Ta sekcja zawiera podstawowe porady dotyczące rozwiązywania problemów z serwerem HTTP wnioskowania usługi Azure Machine Learning.

Sprawdzanie zainstalowanych pakietów

Wykonaj następujące kroki, aby rozwiązać problemy z zainstalowanymi pakietami.

  1. Zbierz informacje o zainstalowanych pakietach i wersjach dla środowiska języka Python.

  2. Upewnij się, że azureml-inference-server-http wersja pakietu języka Python określona w pliku środowiska jest zgodna z wersją serwera HTTP wnioskowania usługi Azure Machine Learning wyświetlaną w dzienniku uruchamiania.

    W niektórych przypadkach narzędzie do rozpoznawania zależności instaluje nieoczekiwane wersje pakietu. Może być konieczne uruchomienie polecenia pip , aby poprawić zainstalowane pakiety i wersje.

  3. Jeśli określisz platformę Flask lub jej zależności w danym środowisku, usuń te elementy.

    • Pakiety zależne obejmują flask, , jinja2, werkzeugitsdangerous, markupsafe, i click.
    • flask element jest wyświetlany jako zależność w pakiecie serwera. Najlepszym rozwiązaniem jest umożliwienie serwerowi wnioskowania zainstalowanie flask pakietu.
    • Gdy serwer wnioskowania jest skonfigurowany do obsługi nowych wersji platformy Flask, serwer automatycznie odbiera aktualizacje pakietów w miarę ich dostępności.

Sprawdzanie wersji serwera

Pakiet azureml-inference-server-http serwera jest publikowany w interfejsie PyPI. Na stronie PyPI jest wyświetlana lista zmian i wszystkie poprzednie wersje.

Jeśli używasz starszej wersji pakietu, zaktualizuj konfigurację do najnowszej wersji. Poniższa tabela zawiera podsumowanie stabilnych wersji, typowych problemów i zalecanych korekt:

Wersja pakietu opis Problem Rozwiązanie
0.4.x Dołączone do obrazów szkoleniowych z datą 20220601 lub wcześniejszymi wersjami .1.34 azureml-defaults pakietów za pośrednictwem programu 1.43. Najnowsza stabilna wersja to 0.4.13. W przypadku wersji serwera starszych niż 0.4.11 mogą wystąpić problemy z zależnościami platformy Flask, takie jak "can't import name Markup from jinja2". Uaktualnij do wersji 0.4.13 lub 0.8.x, jeśli jest to możliwe, najnowszą wersję.
0.6.x Wstępnie zainstalowane wywnioskujące obrazy z datą 20220516 i wcześniejszymi wersjami. Najnowsza stabilna wersja to 0.6.1. Brak Brak
0.7.x Obsługuje platformę Flask 2. Najnowsza stabilna wersja to 0.7.7. Brak Brak
0.8.x Zmieniono format dziennika. Zakończono obsługę języka Python 3.6. Brak Brak

Sprawdzanie zależności pakietów

Najbardziej istotne pakiety zależne dla azureml-inference-server-http pakietu serwera obejmują:

  • flask
  • opencensus-ext-azure
  • inference-schema

Jeśli pakiet został określony azureml-defaults w środowisku języka Python, azureml-inference-server-http pakiet jest pakietem zależnym. Zależność jest instalowana automatycznie.

Napiwek

Jeśli używasz zestawu PYTHON SDK w wersji 1 i nie określasz azureml-defaults jawnie pakietu w środowisku języka Python, zestaw SDK może automatycznie dodać pakiet. Jednak wersja pakietu jest zablokowana w stosunku do wersji zestawu SDK. Jeśli na przykład wersja zestawu SDK to 1.38.0, azureml-defaults==1.38.0 wpis zostanie dodany do wymagań środowiska.

TypeError podczas uruchamiania serwera

Podczas uruchamiania serwera mogą wystąpić następujące błędy TypeError :

TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

Ten błąd występuje, gdy platforma Flask 2 jest zainstalowana w środowisku języka Python, ale azureml-inference-server-http wersja pakietu nie obsługuje platformy Flask 2. Obsługa platformy Flask 2 jest dostępna w azureml-inference-server-http pakiecie w wersji 0.7.0 lub nowszej oraz azureml-defaults w wersji 1.44 lub nowszej.

  • Jeśli nie używasz pakietu Platformy Flask 2 w obrazie platformy Docker usługi Azure Machine Learning, użyj najnowszej azureml-inference-server-http wersji pakietu lub azureml-defaults .

  • Jeśli używasz pakietu Platformy Flask 2 w obrazie platformy Docker usługi Azure Machine Learning, upewnij się, że wersja kompilacji obrazu to lipiec 2022 lub nowsza.

    Wersję obrazu można znaleźć w dziennikach kontenera. Na przykład:

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    Data kompilacji obrazu jest wyświetlana Materialization Build po notacji. W poprzednim przykładzie wersja obrazu to 20220708 8 lipca 2022 r. Obraz w tym przykładzie jest zgodny z platformą Flask 2.

    Jeśli w dzienniku kontenera nie widzisz podobnego komunikatu, obraz jest nieaktualny i powinien zostać zaktualizowany. Jeśli używasz obrazu Compute Unified Device Architecture (CUDA) i nie możesz znaleźć nowszego obrazu, sprawdź, czy obraz jest przestarzały w usłudze AzureML-Containers. Wyznaczone zamienniki dla przestarzałych obrazów można znaleźć.

    Jeśli używasz serwera z punktem końcowym online, możesz również znaleźć dzienniki na stronie Dzienniki na stronie Punkty końcowe w usłudze Azure Machine Learning Studio.

Jeśli wdrażasz przy użyciu zestawu SDK w wersji 1 i nie określisz jawnie obrazu w konfiguracji wdrożenia, serwer zastosuje openmpi4.1.0-ubuntu20.04 pakiet z wersją zgodną z lokalnym zestawem narzędzi zestawu SDK. Jednak zainstalowana wersja może nie być najnowszą dostępną wersją obrazu.

W przypadku zestawu SDK w wersji 1.43 serwer domyślnie instaluje openmpi4.1.0-ubuntu20.04:20220616 wersję pakietu, ale ta wersja pakietu nie jest zgodna z zestawem SDK 1.43. Upewnij się, że używasz najnowszego zestawu SDK do wdrożenia.

Jeśli nie możesz zaktualizować obrazu, możesz tymczasowo uniknąć problemu, przypinając azureml-defaults==1.43 wpisy lub azureml-inference-server-http~=0.4.13 w pliku środowiska. Te wpisy umożliwiają serwerowi zainstalowanie starszej wersji za pomocą polecenia flask 1.0.x.

ImportError lub ModuleNotFoundError podczas uruchamiania serwera

Podczas uruchamiania serwera może wystąpić element ImportError lub ModuleNotFoundError w określonych modułach, takich jak opencensus, jinja2, markupsafelub click. Poniższy przykład przedstawia komunikat o błędzie:

ImportError: cannot import name 'Markup' from 'jinja2'

Podczas korzystania z wersji 0.4.10 lub starszych wersji serwera, które nie przypinają zależności platformy Flask do zgodnej wersji, występują błędy importu i modułu. Aby zapobiec problemowi, zainstaluj nowszą wersję serwera.

Inne typowe problemy

Inne typowe problemy z punktem końcowym online są związane z instalacją i skalowaniem automatycznym conda.

Problemy z instalacją narzędzia Conda

Problemy z wdrożeniem platformy MLflow zwykle wynikają z problemów z instalacją środowiska użytkownika określonego w pliku conda.yml .

Aby debugować problemy z instalacją conda, spróbuj wykonać następujące czynności:

  1. Sprawdź dzienniki instalacji conda. Jeśli kontener uległ awarii lub trwał zbyt długo, aby uruchomić, aktualizacja środowiska conda prawdopodobnie nie mogła poprawnie rozwiązać problemu.
  2. Zainstaluj lokalnie plik mlflow conda za pomocą polecenia conda env create -n userenv -f <CONDA_ENV_FILENAME>.
  3. Jeśli występują błędy lokalnie, spróbuj rozwiązać środowisko conda i utworzyć funkcjonalny przed ponownym wdrożeniem.
  4. Jeśli kontener ulegnie awarii, nawet jeśli rozwiąże problem lokalnie, rozmiar jednostki SKU używany do wdrożenia może być zbyt mały.
    • Instalacja pakietu Conda występuje w czasie wykonywania, więc jeśli rozmiar jednostki SKU jest zbyt mały, aby pomieścić wszystkie pakiety w pliku środowiska conda.yml , kontener może ulec awarii.
    • Maszyna wirtualna Standard_F4s_v2 jest dobrym początkowym rozmiarem jednostki SKU, ale może być potrzebna większa maszyna wirtualna w zależności od zależności, które określa plik Conda.
    • W przypadku punktów końcowych online platformy Kubernetes klaster Kubernetes musi mieć co najmniej cztery rdzenie procesorów wirtualnych i 8 GB pamięci.

Problemy z skalowaniem automatycznym

Jeśli masz problemy z skalowaniem automatycznym, zobacz Rozwiązywanie problemów z autoskalowaniem w usłudze Azure Monitor.

W przypadku punktów końcowych online platformy Kubernetes router wnioskowania usługi Azure Machine Learning jest składnikiem frontonu, który obsługuje skalowanie automatyczne dla wszystkich wdrożeń modelu w klastrze Kubernetes. Aby uzyskać więcej informacji, zobacz Routing wnioskowania automatycznego skalowania Kubernetes.