Řešení potíží s dávkovými koncovými body

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)

Tento článek obsahuje pokyny k řešení běžných chyb při používání dávkových koncových bodů pro dávkové vyhodnocování ve službě Azure Machine Learning. Následující části popisují, jak analyzovat protokoly dávkového bodování za účelem identifikace možných problémů a nepodporovaných scénářů. Můžete si také projít doporučená řešení běžných chyb.

Získání protokolů pro dávkové úlohy bodování

Po vyvolání dávkového koncového bodu pomocí Rozhraní příkazového řádku Azure nebo rozhraní REST API se úloha dávkového bodování spustí asynchronně. Existují dvě možnosti, jak získat protokoly pro dávkovou úlohu bodování:

  • Možnost 1: Streamování protokolů úloh do místní konzoly Streamují se pouze protokoly ve složce azureml-logs .

    Spuštěním následujícího příkazu streamujte protokoly generované systémem do konzoly. <job_name> Nahraďte parametr názvem vaší dávkové úlohy bodování:

    az ml job stream --name <job_name>
    
  • Možnost 2: Zobrazení protokolů úloh v studio Azure Machine Learning

    Spuštěním následujícího příkazu získejte odkaz na úlohu, která se má použít v sadě Studio. <job_name> Nahraďte parametr názvem vaší dávkové úlohy bodování:

    az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
    
    1. Otevřete odkaz na úlohu v sadě Studio.

    2. V grafu úlohy vyberte krok dávkového vyhodnocování.

    3. Na kartě Výstupy a protokoly vyberte jeden nebo více protokolů, které chcete zkontrolovat.

Kontrola souborů protokolu

Azure Machine Learning poskytuje několik typů souborů protokolu a dalších datových souborů, které můžete použít k řešení potíží s dávkovou úlohou vyhodnocování.

Dvě složky nejvyšší úrovně pro protokoly dávkového bodování jsou protokoly azureml-logs a protokoly. Informace z kontroleru, který spouští bodovací skript, se ukládají do souboru ~/azureml-logs/70_driver_log.txt .

Prozkoumání informací na vysoké úrovni

Distribuovaná povaha dávkových úloh bodování vede k protokolům z různých zdrojů, ale dva kombinované soubory poskytují základní informace:

Soubor Popis
~/logs/job_progress_overview.txt Poskytuje základní informace o aktuálním počtu minidávkových dávek (označovaných také jako úkoly) vytvořených a aktuálním počtu zpracovaných minidávek. Vzhledem k tomu, že zpracování pro minidávkové dávky skončí, protokol zaznamenává výsledky úlohy. Pokud úloha selže, zobrazí se v protokolu chybová zpráva a kde spustit řešení potíží.
~/logs/sys/master_role.txt Poskytuje zobrazení hlavního uzlu (označovaného také jako orchestrátor) spuštěné úlohy. Tento protokol obsahuje informace o vytvoření úlohy, monitorování průběhu a výsledku úlohy.

Kontrola chyb v datech trasování zásobníku

Další soubory obsahují informace o možných chybách ve vašem skriptu:

Soubor Popis
~/logs/user/error.txt Obsahuje souhrn chyb ve skriptu.
~/logs/user/error/* Poskytuje úplné trasování zásobníku výjimek vyvolaných při načítání a spouštění vstupního skriptu.

Prozkoumání protokolů procesů na uzel

Abyste pochopili, jak každý uzel spouští váš skript skóre, projděte si jednotlivé protokoly procesů pro každý uzel. Protokoly procesů jsou uložené ve složce ~/logs/sys/node a seskupené podle pracovních uzlů.

Složka obsahuje <ip_address>/ podsložku, která obsahuje< soubor process_name>.txt s podrobnými informacemi o jednotlivých minidávkových dávkách. Obsah složky se aktualizuje, když pracovní proces vybere nebo dokončí minidávku. Pro každou minidávku obsahuje soubor protokolu:

  • IP adresa a ID procesu (PID) pracovního procesu.
  • Celkový počet položek, počet úspěšně zpracovaných položek a počet neúspěšných položek.
  • Čas spuštění, doba trvání, doba zpracování a doba spuštění metody.

Kontrola pravidelných kontrol na uzel

Můžete si také prohlédnout výsledky pravidelných kontrol využití prostředků pro každý uzel. Soubory protokolů a instalační soubory se ukládají do složky ~/logs/perf .

Pomocí parametru --resource_monitor_interval změňte interval zaškrtnutí v sekundách:

  • Použít výchozí nastavení: Výchozí interval je 600 sekund (přibližně 10 minut).
  • Zastavení kontrol: Nastavte hodnotu na 0, aby se na uzlu přestaly spouštět kontroly.

Složka obsahuje <ip_address>/ podsložku o každé minidávce. Obsah složky se aktualizuje, když pracovní proces vybere nebo dokončí minidávku. Pro každou minidávku obsahuje složka následující položky:

Soubor nebo složka Popis
operační systém/ Ukládá informace o všech spuštěných procesech v uzlu. Při jedné kontrole se spustí příkaz operačního systému a výsledek se uloží do souboru. V Linuxu je pspříkaz . Složka obsahuje následující položky:
- %Y%m%d%H: Podsložka, která obsahuje jeden nebo více souborů kontroly procesů. Název podsložky je datum a čas vytvoření kontroly (Rok, Měsíc, Den, Hodina).
processes_%M: Soubor v podsložce Soubor zobrazuje podrobnosti o kontrole procesu. Název souboru končí časem zaškrtnutí (minuta) vzhledem k času vytvoření kontroly.
node_disk_usage.csv Zobrazuje podrobné využití disku uzlu.
node_resource_usage.csv Poskytuje přehled využití prostředků uzlu.
processes_resource_usage.csv Poskytuje přehled využití prostředků jednotlivých procesů.

Přidání protokolování do hodnoticího skriptu

V bodovacím skriptu můžete použít protokolování Pythonu. Tyto protokoly jsou uložené v souboru logs/user/stdout/<node_id>/process<number>.stdout.txt .

Následující kód ukazuje, jak přidat protokolování do skriptu:

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")

Řešení běžných chyb

Následující části popisují běžné chyby, ke kterým může dojít při vývoji a spotřebě dávkového koncového bodu, a postup řešení.

Žádný modul s názvem azureml

Dávkové nasazení služby Azure Machine Learning vyžaduje v instalaci balíček azureml-core .

Zpráva se zaprotokolovala: "Žádný modul s názvem azureml"

Důvod: V azureml-core instalaci se zdá, že balíček chybí.

Řešení: Přidejte azureml-core balíček do souboru závislostí conda.

Žádný výstup v souboru predikcí

Nasazení služby Batch očekává, že se do souboru predictions.csv uloží prázdná složka. Když nasazení narazí na existující soubor v zadané složce, proces nenahrazuje obsah souboru novým výstupem nebo vytvoří nový soubor s výsledky.

Zaprotokolovaná zpráva: Žádná konkrétní protokolovaná zpráva.

Důvod: Nasazení služby Batch nemůže přepsat existující soubor predictions.csv .

Řešení: Pokud proces určuje umístění výstupní složky pro predikce, ujistěte se, že složka neobsahuje existující predictions.csv soubor.

Časový limit dávkového procesu vypršel.

Dávkové nasazení používá timeout hodnotu k určení, jak dlouho má nasazení čekat na dokončení každého dávkového procesu. Když provádění dávky překročí zadaný časový limit, nasazení dávky proces přeruší.

Přerušené procesy se budou opakovat až do maximálního počtu pokusů zadaných v hodnotě max_retries . Pokud při každém pokusu o opakování dojde k chybě časového limitu, úloha nasazení selže.

Pomocí parametru timeout retry_settings můžete nakonfigurovat vlastnosti a max_retries vlastnosti pro každé nasazení.

Zpráva se zaprotokolovala: "Žádná aktualizace průběhu v [number] sekundách. V této kontrole nedochází k žádné aktualizaci průběhu. Počkejte [číslo] sekund od poslední aktualizace."

Důvod: Provádění dávky překračuje zadaný časový limit a maximální počet opakovaných pokusů. Tato akce odpovídá selhání run() funkce ve vstupním skriptu.

Řešení: Zvyšte timeout hodnotu nasazení. Ve výchozím nastavení timeout je hodnota 30 a max_retries hodnota je 3. Pokud chcete určit vhodnou timeout hodnotu pro vaše nasazení, zvažte počet souborů, které se mají zpracovat v každé dávce a velikosti souborů. Můžete snížit počet souborů, které se mají zpracovat, a vygenerovat mini dávky menší velikosti. Výsledkem tohoto přístupu je rychlejší provádění.

Výjimka ve scriptExecution.StreamAccess.Authentication

Aby bylo dávkové nasazení úspěšné, musí mít spravovaná identita výpočetního clusteru oprávnění k připojení úložiště datových prostředků. Pokud má spravovaná identita nedostatečná oprávnění, skript způsobí výjimku. Toto selhání může také způsobit , že se úložiště datových assetů nepřipevní.

Zpráva zaznamenána: "ScriptExecutionException byl způsoben StreamAccessException. Výjimka StreamAccessException způsobila výjimka AuthenticationException.

Důvod: Výpočetní cluster, na kterém je spuštěné nasazení, nemůže připojit úložiště, ve kterém se nachází datový prostředek. Spravovaná identita výpočetních prostředků nemá oprávnění k provedení připojení.

Řešení: Ujistěte se, že spravovaná identita přidružená k výpočetnímu clusteru, na kterém je vaše nasazení spuštěné, má alespoň přístup ke čtenáři dat objektů blob služby Storage k účtu úložiště. Úroveň přístupu na webu Azure Portal můžou změnit jenom vlastníci účtu Azure Storage.

Inicializace datové sady selhala, nejde připojit datovou sadu

Proces dávkového nasazení vyžaduje připojené úložiště datového prostředku. Pokud se úložiště nepřipevní, datová sada se nedá inicializovat.

Zpráva zaprotokolovaná: Inicializace datové sady se nezdařila: UserErrorException: Message: Nelze připojit datovou sadu(ID='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', name='None', version=None). Zdroj datové sady není přístupný nebo neobsahuje žádná data."

Důvod: Výpočetní cluster, na kterém je spuštěné nasazení, nemůže připojit úložiště, ve kterém se nachází datový prostředek. Spravovaná identita výpočetních prostředků nemá oprávnění k provedení připojení.

Řešení: Ujistěte se, že spravovaná identita přidružená k výpočetnímu clusteru, na kterém je vaše nasazení spuštěné, má alespoň přístup ke čtenáři dat objektů blob služby Storage k účtu úložiště. Úroveň přístupu na webu Azure Portal můžou změnit jenom vlastníci účtu Azure Storage.

dataset_param nemá zadanou hodnotu ani výchozí hodnotu

Během dávkového nasazení odkazuje uzel sady dat na dataset_param parametr. Aby nasazení mohlo pokračovat, musí mít parametr přiřazenou hodnotu nebo zadanou výchozí hodnotu.

Zpráva zaznamenána: "Uzel sady dat [kód] odkazuje na parametr dataset_param, který nemá zadanou hodnotu nebo výchozí hodnotu.

Důvod: Vstupní datový prostředek poskytnutý do dávkového koncového bodu není podporovaný.

Řešení: Ujistěte se, že skript nasazení poskytuje datový vstup podporovaný pro dávkové koncové body.

Uživatelský program selže, spuštění selže

Pokud při spouštění skriptu pro dávkové nasazení init() dojde k chybě nebo run() funkce, uživatelský program nebo spuštění může selhat. Podrobnosti o chybě můžete zkontrolovat vygenerovaném souboru protokolu.

Zpráva zaprotokolována: Uživatelský program selhal s výjimkou: Spuštění se nezdařilo. Podrobnosti najdete v protokolech. Můžete zkontrolovat protokoly nebo readme.txt pro rozložení protokolů.

Důvod: Při init() provádění hodnoticího skriptu dojde k chybě.run()

Řešení: Pomocí těchto kroků vyhledejte podrobnosti o selháních funkce:

  1. V studio Azure Machine Learning přejděte ke spuštění neúspěšné úlohy dávkového nasazení a vyberte kartu Výstupy a protokoly.

  2. Otevřete soubor s>protokolem chyby><uživatele>node_identifier>>číslo> procesu<.txt.

  3. Vyhledejte chybovou init() zprávu vygenerovanou funkcí nebo run() funkcí.

ValueError: Žádné objekty ke zřetězení

Aby bylo dávkové nasazení úspěšné, musí být každý soubor v mini dávce platný a implementovat podporovaný typ souboru. Mějte na paměti, že modely MLflow podporují pouze podmnožinu typů souborů. Další informace najdete v tématu Důležité informace o nasazení do dávkového odvozování.

Zpráva zaprotokolována: "ValueError: Žádné objekty ke zřetězení"

Důvod: Všechny soubory ve vygenerované minidávce jsou poškozené nebo nepodporované typy souborů.

Řešení: Pomocí následujícího postupu vyhledejte podrobnosti o neúspěšných souborech:

  1. V studio Azure Machine Learning přejděte ke spuštění neúspěšné úlohy dávkového nasazení a vyberte kartu Výstupy a protokoly.

  2. Otevřete soubor protokoly>uživatele>stdout<>node_identifier>>číslo> procesu<.txt.

  3. Vyhledejte položky, které popisují selhání vstupu souboru, například ERROR:azureml:Error processing input file.

Pokud typ souboru není podporovaný, projděte si seznam podporovaných souborů. Možná budete muset změnit typ souboru vstupních dat nebo přizpůsobit nasazení zadáním hodnoticího skriptu. Další informace najdete v tématu Použití modelů MLflow se skriptem bodování.

Žádná úspěšná minidávka

Proces dávkového nasazení vyžaduje, aby dávkové koncové body poskytovaly data ve formátu očekávaném run() funkcí. Pokud jsou vstupní soubory poškozené nebo nekompatibilní s podpisem modelu, run() funkce nevrátí úspěšnou minidávku.

Zpráva se zaprotokolovala: "Z příkazu run() nebyla vrácena žádná úspěšná mini batch položka. Zkontrolujte odpověď: run() v https://aka.ms/batch-inference-documentation"

Důvod: Koncovému bodu dávky se nepodařilo funkci poskytnout data v očekávaném run() formátu. Tento problém může mít za následek čtení nebo nekompatibilitu vstupních dat s podpisem modelu (MLflow).

Řešení: Pomocí následujícího postupu vyhledejte podrobnosti o neúspěšné minidávce:

  1. V studio Azure Machine Learning přejděte ke spuštění neúspěšné úlohy dávkového nasazení a vyberte kartu Výstupy a protokoly.

  2. Otevřete soubor protokoly>uživatele>stdout<>node_identifier>>číslo> procesu<.txt.

  3. Vyhledejte položky, které popisují selhání vstupního souboru pro minidávku, například "Chyba při zpracování vstupního souboru". Podrobnosti by měly popisovat, proč vstupní soubor nemůže být správně přečtený.

Cílová skupina nebo služba nejsou povoleny

Tokeny Microsoft Entra se vydávají pro konkrétní akce, které identifikují povolené uživatele (cílovou skupinu), službu a prostředky. Ověřovací token pro rozhraní REST API koncového bodu služby Batch musí nastavit resource parametr na https://ml.azure.comhodnotu .

Zaprotokolovaná zpráva: Žádná konkrétní protokolovaná zpráva.

Důvod: Pokusíte se vyvolat rozhraní REST API pro koncový bod dávky a nasazení s tokenem vystaveným pro jinou cílovou skupinu nebo službu.

Řešení: Při řešení tohoto problému s ověřováním postupujte takto:

  1. Když vygenerujete ověřovací token pro rozhraní REST API koncového bodu služby Batch, nastavte resource parametr na https://ml.azure.comhodnotu .

    Všimněte si, že tento prostředek se liší od prostředku, který používáte ke správě koncového bodu z rozhraní REST API. Všechny prostředky Azure (včetně dávkových koncových bodů) používají prostředek https://management.azure.com pro správu.

  2. Při vyvolání rozhraní REST API pro dávkové koncové body a nasazení buďte opatrní, abyste použili token vydaný pro rozhraní REST API koncového bodu služby Batch, a ne token vydaný pro jinou cílovou skupinu nebo službu. V každém případě ověřte, že používáte správný identifikátor URI prostředku.

Pokud chcete používat rozhraní API pro správu a rozhraní API pro vyvolání úloh současně, potřebujete dva tokeny. Další informace najdete v tématu Ověřování na dávkových koncových bodech (REST).

Žádná platná nasazení pro směrování

Aby bylo dávkové nasazení úspěšné, musí mít koncový bod dávky alespoň jednu platnou trasu nasazení. Standardní metodou je definovat výchozí dávkové nasazení pomocí parametru defaults.deployment_name .

Zpráva se zaprotokolovala: Žádná platná nasazení, na která se mají směrovat. Zkontrolujte, jestli má koncový bod alespoň jedno nasazení s kladnými hodnotami váhy, nebo použijte ke směrování hlavičku specifickou pro nasazení.

Důvod: Výchozí dávkové nasazení není správně nastavené.

Řešení: Při řešení problému se směrováním použijte jednu z následujících metod:

  • Ověřte, že defaults.deployment_name parametr definuje správné výchozí dávkové nasazení. Další informace najdete v tématu Aktualizace výchozího dávkového nasazení.

  • Definujte trasu hlavičkou specifickou pro nasazení.

Omezení a nepodporované scénáře

Při navrhování řešení pro nasazení strojového učení, která spoléhají na dávkové koncové body, mějte na paměti, že některé konfigurace a scénáře se nepodporují. Následující části identifikují nepodporované pracovní prostory a výpočetní prostředky a neplatné typy vstupních souborů.

Nepodporované konfigurace pracovního prostoru

Pro dávkové nasazení se nepodporují následující konfigurace pracovních prostorů:

  • Pracovní prostory nakonfigurované pomocí registrů kontejnerů Azure s povolenou funkcí karantény
  • Pracovní prostory s klíči spravovanými zákazníkem

Nepodporované konfigurace výpočetních prostředků

Pro dávkové nasazení se nepodporují následující konfigurace výpočetních prostředků:

  • Clustery Kubernetes Azure ARC
  • Podrobný požadavek na prostředky (paměť, vCPU, GPU) pro clustery Azure Kubernetes (je možné vyžádat pouze počet instancí)

Nepodporované typy vstupních souborů

Pro dávkové nasazení se nepodporují následující typy vstupních souborů:

  • Tabulkové datové sady (V1)
  • Složky a datové sady souborů (V1)
  • MLtable (V2)