Rozwiązywanie problemów z punktami końcowymi usługi Batch

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

Dowiedz się, jak rozwiązywać typowe błędy, które mogą wystąpić podczas korzystania z punktów końcowych wsadowych na potrzeby oceniania wsadowego . Z tego artykułu dowiesz się:

Informacje o dziennikach zadania oceniania wsadowego

Pobieranie dzienników

Po wywołaniu punktu końcowego wsadowego przy użyciu interfejsu wiersza polecenia platformy Azure lub rest zadanie oceniania wsadowego zostanie uruchomione asynchronicznie. Istnieją dwie opcje pobierania dzienników dla zadania oceniania wsadowego.

Opcja 1. Przesyłanie strumieniowe dzienników do konsoli lokalnej

Możesz uruchomić następujące polecenie, aby przesłać strumieniowo dzienniki generowane przez system do konsoli. Przesyłane strumieniowo są tylko dzienniki w azureml-logs folderze.

az ml job stream --name <job_name>

Opcja 2. Wyświetlanie dzienników w programie Studio

Aby uzyskać link do przebiegu w programie Studio, uruchom polecenie:

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. Otwórz zadanie w programie Studio przy użyciu wartości zwróconej przez powyższe polecenie.
  2. Wybieranie obiektów wsadowych
  3. Otwórz kartę Dane wyjściowe i dzienniki
  4. Wybierz co najmniej jeden dziennik, który chcesz przejrzeć

Omówienie struktury dziennika

Istnieją dwa foldery dziennika najwyższego poziomu i azureml-logslogs.

Plik ~/azureml-logs/70_driver_log.txt zawiera informacje z kontrolera, który uruchamia skrypt oceniania.

Ze względu na rozproszony charakter zadań oceniania wsadowego istnieją dzienniki z kilku różnych źródeł. Tworzone są jednak dwa połączone pliki, które zapewniają ogólne informacje:

  • ~/logs/job_progress_overview.txt: Ten plik zawiera ogólne informacje o liczbie minisadów (nazywanych również zadaniami) utworzonych do tej pory i liczbie minisadów przetworzonych do tej pory. Po zakończeniu minisadów dziennik rejestruje wyniki zadania. Jeśli zadanie nie powiodło się, zostanie wyświetlony komunikat o błędzie i miejsce rozpoczęcia rozwiązywania problemów.

  • ~/logs/sys/master_role.txt: Ten plik zawiera widok węzła głównego (znanego również jako koordynator) uruchomionego zadania. Ten dziennik zawiera informacje na temat tworzenia zadań, monitorowania postępu, wyniku zadania.

W celu zwięzłego zrozumienia błędów w skry skrycie istnieją następujące usterki:

  • ~/logs/user/error.txt: ten plik spróbuje podsumować błędy w skry skrycie.

Aby uzyskać więcej informacji na temat błędów w skry skrycie, dostępne są następujące informacje:

  • ~/logs/user/error/: Ten plik zawiera pełne ślady stosu wyjątków zgłaszanych podczas ładowania i uruchamiania skryptu wpisu.

Jeśli potrzebujesz pełnej wiedzy na temat sposobu wykonywania skryptu oceny dla każdego węzła, zapoznaj się z poszczególnymi dziennikami procesów dla każdego węzła. Dzienniki procesów można znaleźć w folderze sys/node pogrupowane według węzłów procesu roboczego:

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: Ten plik zawiera szczegółowe informacje o każdej minisadowej partii, ponieważ jest on pobierany lub ukończony przez proces roboczy. Dla każdej minisadowej tej partii ten plik zawiera następujące elementy:

    • Adres IP i identyfikator PID procesu roboczego.
    • Całkowita liczba elementów, liczba pomyślnie przetworzonych elementów i liczba elementów zakończonych niepowodzeniem.
    • Czas rozpoczęcia, czas trwania, czas przetwarzania i czas wykonywania.

Możesz również wyświetlić wyniki okresowych testów użycia zasobów dla każdego węzła. Pliki dziennika i pliki instalacyjne znajdują się w tym folderze:

  • ~/logs/perf: ustaw --resource_monitor_interval wartość , aby zmienić interwał sprawdzania w sekundach. Domyślny interwał to 600, czyli około 10 minut. Aby zatrzymać monitorowanie, ustaw wartość na 0. Każdy <ip_address> folder zawiera:

    • os/: informacje o wszystkich uruchomionych procesach w węźle. Jedno sprawdzenie uruchamia polecenie systemu operacyjnego i zapisuje wynik w pliku. W systemie Linux polecenie to ps.
      • %Y%m%d%H: Nazwa podfolderu to godzina.
        • processes_%M: Plik kończy się minutą czasu sprawdzania.
    • node_disk_usage.csv: szczegółowe użycie dysku węzła.
    • node_resource_usage.csv: Omówienie użycia zasobów węzła.
    • processes_resource_usage.csv: Omówienie użycia zasobów dla każdego procesu.

Jak zalogować się do skryptu oceniania

Możesz użyć rejestrowania języka Python w skryfcie oceniania. Dzienniki są przechowywane w programie logs/user/stdout/<node_id>/processNNN.stdout.txt.

import argparse
import logging

# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)

# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")

Typowe problemy

Poniższa sekcja zawiera typowe problemy i rozwiązania, które mogą wystąpić podczas opracowywania i użycia punktów końcowych wsadowych.

Brak modułu o nazwie "azureml"

Zarejestrowany komunikat: No module named 'azureml'.

Przyczyna: Usługa Azure Machine Edukacja Wdrożenia usługi Batch wymagają zainstalowania pakietuazureml-core.

Rozwiązanie: dodaj azureml-core do pliku zależności conda.

Dane wyjściowe już istnieją

Przyczyna: usługa Azure Machine Edukacja Batch Deployment nie może zastąpić predictions.csv pliku wygenerowanego przez dane wyjściowe.

Rozwiązanie: Jeśli wskazano lokalizację wyjściową prognoz, upewnij się, że ścieżka prowadzi do nieistniejącego pliku.

Funkcja run() w skry skrycie wejściowym miała limit czasu dla [number] razy

Zarejestrowano komunikat: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

Przyczyna: Wdrożenia wsadowe można skonfigurować z wartością timeout , która wskazuje, ile czasu wdrożenie oczekuje na przetworzenie pojedynczej partii. Jeśli wykonanie partii zajmuje więcej niż taką wartość, zadanie zostanie przerwane. Przerwane zadania można ponowić do maksymalnego czasu, które można również skonfigurować. Jeśli wystąpi podczas timeout każdej ponawiania próby, zadanie wdrożenia zakończy się niepowodzeniem. Te właściwości można skonfigurować dla każdego wdrożenia.

Rozwiązanie: Zwiększ timemout wartość wdrożenia, aktualizując wdrożenie. Te właściwości są konfigurowane w parametrze retry_settings. Domyślnie element timeout=30 i retries=3 jest skonfigurowany. Podczas podejmowania decyzji o wartości timeoutprogramu należy wziąć pod uwagę liczbę przetwarzanych plików w każdej partii i rozmiar każdego z tych plików. Można je również zmniejszyć, aby uwzględnić więcej mini-partii o mniejszym rozmiarze, a tym samym szybciej wykonać.

ScriptExecution.StreamAccess.Authentication

Zarejestrowany komunikat: ScriptExecutionException został spowodowany przez wyjątek StreamAccessException. Wyjątek StreamAccessException został spowodowany przez wyjątek AuthenticationException.

Przyczyna: klaster obliczeniowy, w którym jest uruchomione wdrożenie, nie może zainstalować magazynu, w którym znajduje się zasób danych. Tożsamość zarządzana zasobów obliczeniowych nie ma uprawnień do przeprowadzania instalacji.

Rozwiązania: Upewnij się, że tożsamość skojarzona z klastrem obliczeniowym, w którym jest uruchomione wdrożenie, ma co najmniej dostęp do konta magazynu co najmniej czytelnika danych obiektu blob usługi Storage. Tylko właściciele kont magazynu mogą zmienić poziom dostępu za pośrednictwem witryny Azure Portal.

Inicjowanie zestawu danych nie powiodło się

Zarejestrowano komunikat: Inicjowanie zestawu danych nie powiodło się: UserErrorException: Komunikat: Nie można zainstalować zestawu danych(id='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', name='None', version=None). Źródło zestawu danych jest niedostępne lub nie zawiera żadnych danych.

Przyczyna: klaster obliczeniowy, w którym jest uruchomione wdrożenie, nie może zainstalować magazynu, w którym znajduje się zasób danych. Tożsamość zarządzana zasobów obliczeniowych nie ma uprawnień do przeprowadzania instalacji.

Rozwiązania: Upewnij się, że tożsamość skojarzona z klastrem obliczeniowym, w którym jest uruchomione wdrożenie, ma co najmniej dostęp do konta magazynu co najmniej czytelnika danych obiektu blob usługi Storage. Tylko właściciele kont magazynu mogą zmienić poziom dostępu za pośrednictwem witryny Azure Portal.

Węzeł zestawu danych [kod] odwołuje się do parametru dataset_param , który nie ma określonej wartości ani wartości domyślnej

Zarejestrowany komunikat: węzeł zestawu danych [kod] odwołuje się do parametrudataset_param, który nie ma określonej wartości ani wartości domyślnej.

Przyczyna: Zasób danych wejściowych dostarczony do punktu końcowego partii nie jest obsługiwany.

Rozwiązanie: Upewnij się, że udostępniasz dane wejściowe, które są obsługiwane dla punktów końcowych wsadowych.

Program użytkownika nie powiódł się z powodu wyjątku: uruchomienie nie powiodło się. Sprawdź dzienniki, aby uzyskać szczegółowe informacje

Zarejestrowany komunikat: Program użytkownika nie powiódł się z powodu wyjątku: Uruchomienie nie powiodło się. Sprawdź dzienniki, aby uzyskać szczegółowe informacje. Dzienniki/readme.txt można sprawdzić pod kątem układu dzienników.

Przyczyna: Wystąpił błąd podczas uruchamiania init() funkcji lub run() skryptu oceniania.

Rozwiązanie: przejdź do pozycji Dane wyjściowe i dzienniki i otwórz plik pod adresem logs > user > error > 10.0.0.X > process000.txt. Zostanie wyświetlony komunikat o błędzie wygenerowany przez metodę init() or run() .

ValueError: brak obiektów do łączenia

Komunikat zarejestrowany: ValueError: brak obiektów do łączenia.

Przyczyna: Wszystkie pliki w wygenerowanej minisadowej partii są uszkodzone lub nieobsługiwane typy plików. Należy pamiętać, że modele MLflow obsługują podzestaw typów plików zgodnie z opisem w artykule Zagadnienia dotyczące wdrażania w wnioskowaniu wsadowym.

Rozwiązanie: przejdź do pliku logs/usr/stdout/<process-number>/process000.stdout.txt i poszukaj wpisów, takich jak ERROR:azureml:Error processing input file. Jeśli typ pliku nie jest obsługiwany, zapoznaj się z listą obsługiwanych plików. Może być konieczne zmianę typu pliku danych wejściowych lub dostosowanie wdrożenia przez podanie skryptu oceniania wskazanego w temacie Używanie modeli MLflow ze skryptem oceniania.

Nie ma zakończonego powodzeniem elementu mini batch zwróconego z run()

Zarejestrowany komunikat: nie ma zakończonego powodzeniem elementu minisadowego zwróconego z elementu run(). Sprawdź polecenie "response: run()" w pliku https://aka.ms/batch-inference-documentation.

Przyczyna: Punkt końcowy wsadowy nie może dostarczyć danych w oczekiwanym run() formacie do metody . Może to być spowodowane odczytem lub niezgodnością uszkodzonych plików wejściowych z podpisem modelu (MLflow).

Rozwiązanie: Aby zrozumieć, co może się zdarzyć, przejdź do pozycji Dane wyjściowe i dzienniki i otwórz plik pod adresem logs > user > stdout > 10.0.0.X > process000.stdout.txt. Poszukaj wpisów błędów, takich jak Error processing input file. Należy znaleźć szczegółowe informacje o tym, dlaczego plik wejściowy nie może być poprawnie odczytany.

Odbiorcy w JWT nie są dozwolone

Kontekst: podczas wywoływania punktu końcowego wsadowego przy użyciu interfejsów API REST.

Przyczyna: Token dostępu używany do wywoływania interfejsu API REST dla punktu końcowego/wdrożenia wskazuje token wystawiony dla innej grupy odbiorców/usługi. Tokeny firmy Microsoft Entra są wystawiane dla określonych akcji.

Rozwiązanie: Podczas generowania tokenu uwierzytelniania do użycia z interfejsem API REST punktu końcowego usługi Batch upewnij się, że resource parametr jest ustawiony na https://ml.azure.comwartość . Zwróć uwagę, że ten zasób różni się od zasobu, który należy wskazać, aby zarządzać punktem końcowym przy użyciu interfejsu API REST. Wszystkie zasoby platformy Azure (w tym punkty końcowe wsadowe) używają zasobu https://management.azure.com do zarządzania nimi. Upewnij się, że używasz odpowiedniego identyfikatora URI zasobu w każdym przypadku. Zwróć uwagę, że jeśli chcesz używać interfejsu API zarządzania i interfejsu API wywołania zadania w tym samym czasie, potrzebne są dwa tokeny. Aby uzyskać szczegółowe informacje, zobacz: Uwierzytelnianie w punktach końcowych wsadowych (REST).

Brak prawidłowych wdrożeń do kierowania do. Sprawdź, czy punkt końcowy ma co najmniej jedno wdrożenie z dodatnimi wartościami wagi lub użyj określonego nagłówka wdrożenia do kierowania.

Przyczyna: Domyślne wdrożenie usługi Batch nie jest poprawnie ustawione.

Rozwiązanie: upewnij się, że domyślne wdrożenie wsadowe jest poprawnie ustawione. Może być konieczne zaktualizowanie domyślnego wdrożenia wsadowego. Aby uzyskać szczegółowe informacje, zobacz: Aktualizowanie domyślnego wdrożenia wsadowego

Ograniczenia i nieobsługiwane scenariusze

Podczas projektowania rozwiązań uczenia maszynowego korzystających z punktów końcowych wsadowych niektóre konfiguracje i scenariusze mogą nie być obsługiwane.

Następujące konfiguracje obszarów roboczych nie są obsługiwane:

  • Obszary robocze skonfigurowane za pomocą rejestrów kontenerów platformy Azure z włączoną funkcją Kwarantanna.
  • Obszary robocze z kluczami zarządzanymi przez klienta (CMK).

Następujące konfiguracje obliczeniowe nie są obsługiwane:

  • Klastry Kubernetes usługi Azure ARC.
  • Szczegółowe żądanie zasobów (pamięć, procesor wirtualny, procesor GPU) dla klastrów usługi Azure Kubernetes. Można zażądać tylko liczby wystąpień.

Następujące typy danych wejściowych nie są obsługiwane:

  • Tabelaryczne zestawy danych (V1).
  • Foldery i zestawy danych plików (V1).
  • MLtable (wersja 2).

Następne kroki