Ř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í)

Zjistěte, jak řešit a řešit běžné chyby, se které můžete setkat při používání dávkových koncových bodů pro dávkové vyhodnocování. V tomto článku se dozvíte:

Principy protokolů dávkové úlohy bodování

Získání protokolů

Po vyvolání dávkového koncového bodu pomocí Azure CLI nebo REST se úloha dávkového vyhodnocování spustí asynchronně. Existují dvě možnosti, jak získat protokoly pro dávkovou úlohu bodování.

Možnost 1: Streamování protokolů do místní konzoly

Spuštěním následujícího příkazu můžete streamovat systémem generované protokoly do konzoly. Streamují se jenom protokoly ve azureml-logs složce.

az ml job stream --name <job_name>

Možnost 2: Zobrazení protokolů v sadě Studio

Pokud chcete získat odkaz na spuštění v sadě Studio, spusťte:

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. Otevřete úlohu v studiu pomocí hodnoty vrácené výše uvedeným příkazem.
  2. Volba dávkového vyhodnocování
  3. Otevření karty Výstupy a protokoly
  4. Zvolte jeden nebo více protokolů, které chcete zkontrolovat.

Principy struktury protokolu

Existují dvě složky protokolu nejvyšší úrovně a azureml-logslogs.

Soubor ~/azureml-logs/70_driver_log.txt obsahuje informace z kontroleru, který spouští bodovací skript.

Vzhledem k distribuované povaze dávkových bodovacích úloh existují protokoly z několika různých zdrojů. Vytvoří se však dva kombinované soubory, které poskytují základní informace:

  • ~/logs/job_progress_overview.txt: Tento soubor poskytuje základní informace o počtu minidávek (označovaných také jako úkoly) vytvořených dosud a počtu dosud zpracovaných minidávek. Při ukončení minidávek zaznamenává protokol výsledky úlohy. Pokud úloha selhala, zobrazí se chybová zpráva a kde spustit řešení potíží.

  • ~/logs/sys/master_role.txt: Tento soubor poskytuje zobrazení hlavního uzlu (označovaného také jako orchestrátor) spuštěné úlohy. Tento protokol obsahuje informace o vytváření úkolů, sledování průběhu a výsledku úlohy.

Stručné porozumění chybám ve vašem skriptu je:

  • ~/logs/user/error.txt: Tento soubor se pokusí shrnout chyby ve skriptu.

Další informace o chybách ve skriptu najdete tady:

  • ~/logs/user/error/: Tento soubor obsahuje úplné trasování zásobníků výjimek vyvolaných při načítání a spouštění vstupního skriptu.

Pokud potřebujete úplné znalosti o tom, jak každý uzel spustil skript skóre, podívejte se na jednotlivé protokoly procesů pro každý uzel. Protokoly procesů najdete ve sys/node složce seskupené podle pracovních uzlů:

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: Tento soubor obsahuje podrobné informace o každé minidávce při vyzvednutí nebo dokončení pracovníkem. Pro každou minidávku tento soubor obsahuje:

    • IP adresa a 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.

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 jsou v této složce:

  • ~/logs/perf: Nastaví --resource_monitor_interval se změna intervalu kontroly v sekundách. Výchozí interval je 600, což je přibližně 10 minut. Pokud chcete monitorování zastavit, nastavte hodnotu na 0hodnotu . Každá <ip_address> složka obsahuje:

    • os/: 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 .
      • %Y%m%d%H: Název podsložky je čas na hodinu.
        • processes_%M: Soubor končí minutou času kontroly.
    • node_disk_usage.csv: Podrobné využití disku uzlu.
    • node_resource_usage.csv: Přehled využití prostředků uzlu
    • processes_resource_usage.csv: Přehled využití prostředků jednotlivých procesů

Jak se přihlásit ke skriptu bodování

V bodovacím skriptu můžete použít protokolování Pythonu. Protokoly jsou uloženy v logs/user/stdout/<node_id>/processNNN.stdout.txtsouboru .

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

Běžné problémy

Následující část obsahuje běžné problémy a řešení, která se můžou zobrazit při vývoji a spotřebě dávkového koncového bodu.

Žádný modul s názvem azureml

Zpráva zaznamenána: No module named 'azureml'.

Důvod: Nasazení služby Azure Machine Učení Batch vyžadují instalaci balíčkuazureml-core.

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

Výstup již existuje.

Důvod: Azure Machine Učení Batch Deployment nemůže přepsat predictions.csv soubor vygenerovaný výstupem.

Řešení: Pokud jste pro predikce označeni jako výstupní umístění, ujistěte se, že cesta vede k neexistujícímu souboru.

Funkce run() ve vstupním skriptu měla časový limit pro [číslo] krát

Zaprotokolovaná zpráva: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

Důvod: Dávkové nasazení je možné nakonfigurovat s timeout hodnotou, která označuje dobu, po kterou nasazení čeká na zpracování jedné dávky. Pokud provádění dávky trvá více než takovou hodnotu, úloha se přeruší. Úlohy, které jsou přerušeny, je možné opakovat až do maximální doby, kterou je možné nakonfigurovat. timeout Pokud dojde k opakování každého opakování, úloha nasazení selže. Tyto vlastnosti je možné nakonfigurovat pro každé nasazení.

Řešení: Zvyšte timemout hodnotu nasazení aktualizací nasazení. Tyto vlastnosti jsou nakonfigurovány v parametru retry_settings. Ve výchozím nastavení timeout=30 je nakonfigurovaná hodnota a retries=3 . Při rozhodování o hodnotě timeoutvezměte v úvahu počet zpracovávaných souborů v každé dávce a velikost každého z těchto souborů. Můžete je také snížit tak, aby zohlednily více minidávek s menší velikostí, a proto je rychlejší provést.

ScriptExecution.StreamAccess.Authentication

Zpráva zaprotokolována: ScriptExecutionException způsobil StreamAccessException. Výjimka StreamAccessException byla způsobena sadou 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 identita přidružená ke 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 můžou změnit jenom vlastníci účtu úložiště prostřednictvím webu Azure Portal.

Inicializace datové sady selhala.

Zpráva zaprotokolovaná: Inicializace datové sady selhala: UserErrorException: Zpráva: Nelze připojit datovou sadu(id='xxxxxx-xxxx-xxxx-xxxxxxxx', 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 identita přidružená ke 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 můžou změnit jenom vlastníci účtu úložiště prostřednictvím webu Azure Portal.

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

Zpráva zaprotokolová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 poskytujete vstup dat podporovaný pro dávkové koncové body.

Uživatelský program selhal s výjimkou: Spuštění se nezdařilo, zkontrolujte podrobnosti v protokolech.

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

Důvod: Při spuštění init() skriptu bodování nebo run() funkce došlo k chybě.

Řešení: Přejděte na Výstupy + Protokoly a otevřete soubor na adrese logs > user > error > 10.0.0.X > process000.txt. Zobrazí se chybová zpráva vygenerovaná metodou nebo run() metodouinit().

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

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

Důvod: Všechny soubory vygenerované minidávkové dávce jsou poškozené nebo nepodporované typy souborů. Mějte na paměti, že modely MLflow podporují podmnožinu typů souborů, jak je uvedeno při nasazování do dávkového odvozování.

Řešení: Přejděte do souboru logs/usr/stdout/<process-number>/process000.stdout.txt a vyhledejte položky, jako je ERROR:azureml:Error processing input file. Pokud typ souboru není podporovaný, projděte si seznam podporovaných souborů. Je možné, že budete muset změnit typ souboru vstupních dat nebo přizpůsobit nasazení tím, že zadáte hodnoticí skript, jak je uvedeno v tématu Použití modelů MLflow se skriptem pro bodování.

Z příkazu run() není vrácena žádná úspěšná mini dávková položka.

Zpráva zaprotokolována: Z příkazu run() není vrácena žádná úspěšná mini dávková položka. Zkontrolujte odpověď: run() v https://aka.ms/batch-inference-documentationsouboru .

Důvod: Dávkovému koncovému bodu se nepodařilo poskytnout do metody data v očekávaném run() formátu. Může to být způsobeno čtením nebo nekompatibilitou vstupních dat s podpisem modelu (MLflow).

Řešení: Pokud chcete zjistit, co se může stát, přejděte do části Výstupy + Protokoly a otevřete soubor na adrese logs > user > stdout > 10.0.0.X > process000.stdout.txt. Vyhledejte chybové položky, jako Error processing input fileje . Měli byste najít podrobnosti o tom, proč vstupní soubor nemůže být správně přečtený.

Cílové skupiny v JWT nejsou povoleny.

Kontext: Při vyvolání dávkového koncového bodu pomocí jeho rozhraní REST API

Důvod: Přístupový token použitý k vyvolání rozhraní REST API pro koncový bod nebo nasazení označuje token vydaný pro jinou cílovou skupinu nebo službu. Tokeny Microsoft Entra se vydávají pro konkrétní akce.

Řešení: Při generování ověřovacího tokenu, který se má použít s rozhraním REST API koncového bodu služby Batch, ujistěte se resource , že je parametr nastavený na https://ml.azure.comhodnotu . Všimněte si, že tento prostředek se liší od prostředku, který potřebujete označit ke správě koncového bodu pomocí rozhraní REST API. Všechny prostředky Azure (včetně dávkových koncových bodů) používají k jejich správě prostředek https://management.azure.com . Ujistěte se, že pro každý případ použijete správný identifikátor URI prostředku. Všimněte si, že pokud chcete používat rozhraní API pro správu a rozhraní API pro vyvolání úloh současně, budete potřebovat dva tokeny. Podrobnosti najdete v tématu: Ověřování na dávkových koncových bodech (REST)

Žádná platná nasazení, na která se mají směrovat. Zkontrolujte, jestli má koncový bod aspoň 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í: Ujistěte se, že je správně nastavené výchozí dávkové nasazení. Možná budete muset aktualizovat výchozí dávkové nasazení. Podrobnosti najdete v tématu: Aktualizace výchozího dávkového nasazení

Omezení a nepodporovaná scénáře

Při navrhování řešení strojového učení, která spoléhají na dávkové koncové body, nemusí být některé konfigurace a scénáře podporované.

Následující konfigurace pracovních prostorů nejsou podporovány:

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

Následující konfigurace výpočetních prostředků se nepodporují:

  • 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í.

Následující typy vstupu nejsou podporovány:

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

Další kroky