Rozwiązywanie problemów z punktami końcowymi wsadowymi
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)
Ten artykuł zawiera wskazówki dotyczące rozwiązywania typowych błędów podczas korzystania z punktów końcowych wsadowych na potrzeby oceniania wsadowego w usłudze Azure Machine Learning. W poniższych sekcjach opisano sposób analizowania dzienników oceniania wsadowego w celu zidentyfikowania możliwych problemów i nieobsługiwanych scenariuszy. Możesz również przejrzeć zalecane rozwiązania, aby rozwiązać typowe błędy.
Pobieranie dzienników dla zadań oceniania wsadowego
Po wywołaniu punktu końcowego wsadowego przy użyciu interfejsu wiersza polecenia platformy Azure lub interfejsu API REST zadanie oceniania wsadowego jest uruchamiane asynchronicznie. Istnieją dwie opcje pobierania dzienników dla zadania oceniania wsadowego:
Opcja 1. Przesyłanie strumieniowe dzienników zadań do konsoli lokalnej. Przesyłane strumieniowo są tylko dzienniki w folderze azureml-logs .
Uruchom następujące polecenie, aby przesłać strumieniowo dzienniki wygenerowane przez system do konsoli. Zastąp
<job_name>
parametr nazwą zadania oceniania wsadowego:az ml job stream --name <job_name>
Opcja 2. Wyświetlanie dzienników zadań w usłudze Azure Machine Learning Studio.
Uruchom następujące polecenie, aby uzyskać link zadania do użycia w programie Studio. Zastąp
<job_name>
parametr nazwą zadania oceniania wsadowego:az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
Otwórz link zadania w programie Studio.
Na wykresie zadania wybierz krok batchscoring .
Na karcie Dane wyjściowe i dzienniki wybierz co najmniej jeden dziennik do przejrzenia.
Przeglądanie plików dziennika
Usługa Azure Machine Learning udostępnia kilka typów plików dziennika i innych plików danych, których można użyć do rozwiązywania problemów z zadaniem oceniania wsadowego.
Dwa foldery najwyższego poziomu dla dzienników oceniania wsadowego to azureml-logs i dzienniki. Informacje z kontrolera uruchamiające skrypt oceniania są przechowywane w pliku ~/azureml-logs/70_driver_log.txt .
Sprawdzanie informacji wysokiego poziomu
Rozproszony charakter zadań oceniania wsadowego powoduje, że dzienniki z różnych źródeł, ale dwa połączone pliki zapewniają ogólne informacje:
Plik | opis |
---|---|
~/logs/job_progress_overview.txt | Zawiera ogólne informacje o bieżącej liczbie minisadów (nazywanych również zadaniami) utworzonych oraz bieżącej liczbie przetworzonych minisadów. W miarę kończenia przetwarzania minisadów dziennik rejestruje wyniki zadania. Jeśli zadanie zakończy się niepowodzeniem, w dzienniku zostanie wyświetlony komunikat o błędzie i miejsce rozpoczęcia rozwiązywania problemów. |
~/logs/sys/master_role.txt | Udostępnia widok węzła głównego (nazywanego również orkiestratorem) uruchomionego zadania. Ten dziennik zawiera informacje o tworzeniu zadań, monitorowaniu postępu i wynikach zadania. |
Sprawdzanie danych śledzenia stosu pod kątem błędów
Inne pliki zawierają informacje o możliwych błędach skryptu:
Plik | opis |
---|---|
~/logs/user/error.txt | Zawiera podsumowanie błędów w skry skryptie. |
~/logs/user/error/* | Zawiera pełne ślady stosu wyjątków zgłaszanych podczas ładowania i uruchamiania skryptu wejścia. |
Sprawdzanie dzienników procesów na węzeł
Aby uzyskać pełną wiedzę na temat sposobu wykonywania skryptu oceny przez każdy węzeł, sprawdź poszczególne dzienniki procesów dla każdego węzła. Dzienniki procesu są przechowywane w folderze ~/logs/sys/node i pogrupowane według węzłów roboczych.
Folder zawiera <podfolder ip_address/, który zawiera< plik process_name>>.txt zawierający szczegółowe informacje o każdej minisadowej partii. Zawartość folderu jest aktualizowana po wybraniu lub zakończeniu minisadowania przez proces roboczy. Dla każdej minisady plik dziennika zawiera następujące elementy:
- Adres IP i identyfikator procesu (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.
Sprawdzanie okresowych testów na węzeł
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 są przechowywane w folderze ~/logs/perf .
Użyj parametru , --resource_monitor_interval
aby zmienić interwał sprawdzania w sekundach:
- Użyj wartości domyślnej: domyślny interwał to 600 sekund (około 10 minut).
- Sprawdzanie zatrzymania: ustaw wartość 0, aby zatrzymać uruchamianie kontroli w węźle.
Folder zawiera <ip_address>/ podfolder dotyczący każdej minisady. Zawartość folderu jest aktualizowana po wybraniu lub zakończeniu minisadowania przez proces roboczy. Dla każdej mini-partii folder zawiera następujące elementy:
Plik lub folder | opis |
---|---|
system operacyjny/ | Przechowuje 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 . Folder zawiera następujące elementy: - %Y%m%d%H: podfolder zawierający co najmniej jeden plik sprawdzania procesu. Nazwa podfolderu to data i godzina utworzenia sprawdzania (Year, Month, Day, Hour). processes_%M: Plik w podfolderze. Plik zawiera szczegółowe informacje na temat sprawdzania procesu. Nazwa pliku kończy się godziną sprawdzania (minuta) względem czasu utworzenia sprawdzania. |
node_disk_usage.csv | Przedstawia szczegółowe użycie dysku węzła. |
node_resource_usage.csv | Dostarcza omówienie użycia zasobów węzła. |
processes_resource_usage.csv | Zawiera omówienie użycia zasobów dla każdego procesu. |
Dodawanie rejestrowania do skryptu oceniania
Możesz użyć rejestrowania języka Python w skryfcie oceniania. Te dzienniki są przechowywane w pliku logs/user/stdout/<node_id>/process<number>.stdout.txt .
Poniższy kod demonstruje sposób dodawania rejestrowania w skry skryptzie:
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")
Rozwiązywanie typowych błędów
W poniższych sekcjach opisano typowe błędy, które mogą wystąpić podczas tworzenia i użycia punktów końcowych wsadowych oraz kroki rozwiązywania problemów.
Brak modułu o nazwie azureml
Wdrożenie wsadowe usługi Azure Machine Learning wymaga pakietu azureml-core w instalacji.
Zarejestrowano komunikat: "Brak modułu o nazwie azureml
."
Przyczyna: W azureml-core
instalacji brakuje pakietu.
Rozwiązanie: dodaj azureml-core
pakiet do pliku zależności conda.
Brak danych wyjściowych w pliku przewidywania
Wdrożenie usługi Batch oczekuje pustego folderu do przechowywania pliku predictions.csv . Gdy wdrożenie napotka istniejący plik w określonym folderze, proces nie zastępuje zawartości pliku nowymi danymi wyjściowymi ani nie tworzy nowego pliku z wynikami.
Zarejestrowany komunikat: brak określonego zarejestrowanego komunikatu.
Przyczyna: Wdrożenie wsadowe nie może zastąpić istniejącego pliku predictions.csv .
Rozwiązanie: Jeśli proces określa lokalizację folderu wyjściowego dla przewidywań, upewnij się, że folder nie zawiera istniejącego pliku predictions.csv .
Limit czasu procesu wsadowego
Wdrożenie wsadowe timeout
używa wartości, aby określić, jak długo wdrożenie powinno czekać na ukończenie każdego procesu wsadowego. Gdy wykonanie partii przekroczy określony limit czasu, wdrożenie wsadowe przerywa proces.
Przerwane procesy są ponawiane do maksymalnej liczby prób określonych w max_retries
wartości. Jeśli podczas każdej próby ponawiania wystąpi błąd przekroczenia limitu czasu, zadanie wdrożenia zakończy się niepowodzeniem.
Właściwości i max_retries
dla każdego wdrożenia można skonfigurować timeout
za pomocą parametru retry_settings
.
Komunikat zarejestrowany: "Brak aktualizacji postępu w [liczba] sekund. Brak aktualizacji postępu w tym czeku. Odczekaj [liczbę] sekund od ostatniej aktualizacji".
Przyczyna: Wykonanie wsadowe przekracza określony limit czasu i maksymalną liczbę ponownych prób. Ta akcja odpowiada awarii run()
funkcji w skrycie wejściowym.
Rozwiązanie: Zwiększ timeout
wartość wdrożenia. Domyślnie timeout
wartość to 30, a max_retries
wartość to 3. Aby określić odpowiednią timeout
wartość wdrożenia, należy wziąć pod uwagę liczbę plików do przetworzenia w każdej partii i rozmiarach plików. Można zmniejszyć liczbę plików do przetwarzania i generowania minisadów o mniejszym rozmiarze. Takie podejście powoduje szybsze wykonywanie.
Wyjątek w skrypcie ScriptExecution.StreamAccess.Authentication
Aby wdrożenie wsadowe powiodło się, tożsamość zarządzana klastra obliczeniowego musi mieć uprawnienia do instalowania magazynu zasobów danych. Gdy tożsamość zarządzana ma niewystarczające uprawnienia, skrypt powoduje wyjątek. Ten błąd może również spowodować, że magazyn zasobów danych nie zostanie zamontowany.
Zarejestrowano 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 obliczeń nie ma uprawnień do przeprowadzania instalacji.
Rozwiązanie: Upewnij się, że tożsamość zarządzana skojarzona z klastrem obliczeniowym, w którym jest uruchomione wdrożenie, ma dostęp do konta magazynu co najmniej do czytnika danych obiektu blob usługi Storage. Tylko właściciele kont usługi Azure Storage mogą zmienić poziom dostępu w witrynie Azure Portal.
Inicjowanie zestawu danych nie powiodło się, nie można zainstalować zestawu danych
Proces wdrażania wsadowego wymaga zainstalowanego magazynu dla zasobu danych. Jeśli magazyn nie zostanie zamontowany, nie można zainicjować zestawu danych.
Komunikat zarejestrowany: "Inicjowanie zestawu danych nie powiodło się: UserErrorException: Komunikat: Nie można zainstalować zestawu danych(ID='xxxxxx-xxxx-xxxx-xxxx-xxxxxx', 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 obliczeń nie ma uprawnień do przeprowadzania instalacji.
Rozwiązanie: Upewnij się, że tożsamość zarządzana skojarzona z klastrem obliczeniowym, w którym jest uruchomione wdrożenie, ma dostęp do konta magazynu co najmniej do czytnika danych obiektu blob usługi Storage. Tylko właściciele kont usługi Azure Storage mogą zmienić poziom dostępu w witrynie Azure Portal.
dataset_param nie ma określonej wartości ani wartości domyślnej
Podczas wdrażania wsadowego węzeł zestawu danych odwołuje się do parametru dataset_param
. Aby wdrożenie było kontynuowane, parametr musi mieć przypisaną wartość lub określoną wartość domyślną.
Komunikat zarejestrowany: "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".
Przyczyna: Zasób danych wejściowych dostarczony do punktu końcowego partii nie jest obsługiwany.
Rozwiązanie: Upewnij się, że skrypt wdrażania udostępnia dane wejściowe obsługiwane dla punktów końcowych wsadowych.
Program użytkownika kończy się niepowodzeniem, uruchomienie kończy się niepowodzeniem
Jeśli podczas wykonywania skryptu na potrzeby wdrażania init()
wsadowego wystąpi błąd lub run()
funkcja, program użytkownika lub uruchomienie może zakończyć się niepowodzeniem. Szczegóły błędu można przejrzeć w wygenerowanym pliku dziennika.
Zarejestrowany komunikat: "Program użytkownika nie powiódł się z wyjątkiem: 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".
Przyczynainit()
: funkcja or run()
generuje błąd podczas wykonywania skryptu oceniania.
Rozwiązanie: Wykonaj następujące kroki, aby znaleźć szczegółowe informacje o błędach funkcji:
W usłudze Azure Machine Learning Studio przejdź do uruchomienia zadania wdrożenia wsadowego, a następnie wybierz kartę Dane wyjściowe i dzienniki .
Otwórz plik rejestruje>błąd<>użytkownika>node_identifier>>numer> procesu<.txt.
Znajdź komunikat o błędzie wygenerowany przez
init()
funkcję orrun()
.
ValueError: brak obiektów do łączenia
Aby wdrożenie wsadowe powiodło się, każdy plik w minisadowej partii musi być prawidłowy i zaimplementować obsługiwany typ pliku. Należy pamiętać, że modele MLflow obsługują tylko podzestaw typów plików. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące wdrażania w wnioskowaniu wsadowym.
Komunikat zarejestrowany: "ValueError: Brak obiektów do łączenia".
Przyczyna: Wszystkie pliki w wygenerowanej minisadowej partii są uszkodzone lub nieobsługiwane typy plików.
Rozwiązanie: Wykonaj następujące kroki, aby znaleźć szczegółowe informacje o plikach, które zakończyły się niepowodzeniem:
W usłudze Azure Machine Learning Studio przejdź do uruchomienia zadania wdrożenia wsadowego, a następnie wybierz kartę Dane wyjściowe i dzienniki .
Otwórz plik logs>user>stdout><node_identifier>>numer> procesu<.txt.
Poszukaj wpisów opisujących błąd wprowadzania pliku, na przykład "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. Aby uzyskać więcej informacji, zobacz Używanie modeli MLflow ze skryptem oceniania.
Nie powiodło się minisadowe
Proces wdrażania wsadowego wymaga, aby punkty końcowe partii dostarczały dane w formacie oczekiwanym run()
przez funkcję. Jeśli pliki wejściowe są uszkodzone lub niezgodne z podpisem modelu, run()
funkcja nie zwróci pomyślnej minisadowej partii.
Zarejestrowano komunikat: "Brak zakończonego powodzeniem elementu minisadowego zwróconego z elementu run(). Sprawdź element "response: run()" w pliku https://aka.ms/batch-inference-documentation
."
Przyczyna: Punkt końcowy partii nie dostarczył danych w oczekiwanym formacie run()
funkcji. Ten problem może wynikać z odczytywania lub niezgodności danych wejściowych z podpisem modelu (MLflow).
Rozwiązanie: Wykonaj następujące kroki, aby znaleźć szczegółowe informacje o nieudanej minisadowej partii:
W usłudze Azure Machine Learning Studio przejdź do uruchomienia zadania wdrożenia wsadowego, a następnie wybierz kartę Dane wyjściowe i dzienniki .
Otwórz plik logs>user>stdout><node_identifier>>numer> procesu<.txt.
Poszukaj wpisów opisujących błąd pliku wejściowego dla mini-partii, takich jak "Błąd przetwarzania pliku wejściowego". Szczegóły powinny opisywać, dlaczego plik wejściowy nie może być poprawnie odczytany.
Grupa odbiorców lub usługa nie jest dozwolona
Tokeny firmy Microsoft Entra są wystawiane dla określonych akcji identyfikujących dozwolonych użytkowników (odbiorców), usługę i zasoby. Token uwierzytelniania dla interfejsu API REST punktu końcowego usługi Batch musi ustawić resource
parametr na https://ml.azure.com
wartość .
Zarejestrowany komunikat: brak określonego zarejestrowanego komunikatu.
Przyczyna: Próbujesz wywołać interfejs API REST dla punktu końcowego wsadowego i wdrożenie z tokenem wystawionym dla innej grupy odbiorców lub usługi.
Rozwiązanie: wykonaj następujące kroki, aby rozwiązać ten problem z uwierzytelnianiem:
Podczas generowania tokenu uwierzytelniania dla interfejsu API REST punktu końcowego usługi Batch ustaw
resource
parametr nahttps://ml.azure.com
wartość .Zwróć uwagę, że ten zasób różni się od zasobu używanego do zarządzania punktem końcowym z interfejsu API REST. Wszystkie zasoby platformy Azure (w tym punkty końcowe wsadowe) używają zasobu
https://management.azure.com
do zarządzania.Podczas wywoływania interfejsu API REST dla punktu końcowego i wdrożenia wsadowego należy zachować ostrożność przy użyciu tokenu wystawionego dla interfejsu API REST punktu końcowego usługi Batch, a nie tokenu wystawionego dla innej grupy odbiorców lub usługi. W każdym przypadku upewnij się, że używasz poprawnego identyfikatora URI zasobu.
Jeśli chcesz jednocześnie używać interfejsu API zarządzania i interfejsu API wywołania zadania, potrzebne są dwa tokeny. Aby uzyskać więcej informacji, zobacz Authentication on batch endpoints (REST) (Uwierzytelnianie w punktach końcowych wsadowych (REST).
Brak prawidłowych wdrożeń do kierowania
Aby wdrożenie wsadowe powiodło się, punkt końcowy partii musi mieć co najmniej jedną prawidłową trasę wdrażania. Standardową metodą jest zdefiniowanie domyślnego wdrożenia wsadowego przy użyciu parametru defaults.deployment_name
.
Komunikat zarejestrowany: "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 wsadowe nie jest poprawnie ustawione.
Rozwiązanie: Użyj jednej z następujących metod, aby rozwiązać problem z routingiem:
Upewnij się, że
defaults.deployment_name
parametr definiuje prawidłowe domyślne wdrożenie wsadowe. Aby uzyskać więcej informacji, zobacz Aktualizowanie domyślnego wdrożenia wsadowego.Zdefiniuj trasę z nagłówkiem specyficznym dla wdrożenia.
Ograniczenia i nieobsługiwane scenariusze
Podczas projektowania rozwiązań wdrażania uczenia maszynowego opartych na punktach końcowych wsadowych należy pamiętać, że niektóre konfiguracje i scenariusze nie są obsługiwane. W poniższych sekcjach zidentyfikowano nieobsługiwane obszary robocze i zasoby obliczeniowe oraz nieprawidłowe typy plików wejściowych.
Nieobsługiwane konfiguracje obszarów roboczych
Następujące konfiguracje obszarów roboczych nie są obsługiwane w przypadku wdrażania wsadowego:
- Obszary robocze skonfigurowane za pomocą rejestrów kontenerów platformy Azure z włączoną funkcją kwarantanny
- Obszary robocze z kluczami zarządzanymi przez klienta
Nieobsługiwane konfiguracje obliczeniowe
Następujące konfiguracje obliczeniowe nie są obsługiwane w przypadku wdrażania wsadowego:
- 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ń)
Nieobsługiwane typy plików wejściowych
Następujące typy plików wejściowych nie są obsługiwane w przypadku wdrażania wsadowego:
- Tabelaryczne zestawy danych (wersja 1)
- Foldery i zestawy danych plików (V1)
- MLtable (wersja 2)