Ř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:
- Jak jsou uspořádané protokoly dávkové úlohy bodování.
- Řešení běžných chyb
- Identifikujte nepodporovaná scénáře v dávkových koncových bodech a jejich omezeních.
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
- Otevřete úlohu v studiu pomocí hodnoty vrácené výše uvedeným příkazem.
- Volba dávkového vyhodnocování
- Otevření karty Výstupy a protokoly
- Zvolte jeden nebo více protokolů, které chcete zkontrolovat.
Principy struktury protokolu
Existují dvě složky protokolu nejvyšší úrovně a azureml-logs
logs
.
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 je600
, což je přibližně 10 minut. Pokud chcete monitorování zastavit, nastavte hodnotu na0
hodnotu . 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 jeps
pří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ů uzluprocesses_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.txt
souboru .
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ě timeout
vezmě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 file
je . 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.com
hodnotu . 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).