Batch-végpontok hibaelhárítása
ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)
Ez a cikk útmutatást nyújt a batch-végpontok Azure Machine Learningben történő kötegelt pontozáshoz való használatakor előforduló gyakori hibák elhárításához. A következő szakaszok ismertetik, hogyan elemezhetők a kötegpontozási naplók a lehetséges problémák és a nem támogatott forgatókönyvek azonosítása érdekében. A gyakori hibák megoldásához az ajánlott megoldásokat is áttekintheti.
Naplók lekérése kötegelt pontozási feladatokhoz
Miután meghív egy batch-végpontot az Azure CLI vagy a REST API használatával, a kötegpontozási feladat aszinkron módon fut. A kötegelt pontozási feladat naplóinak lekérésére két lehetőség van:
1. lehetőség: Feladatnaplók streamelése egy helyi konzolra. A rendszer csak az azureml-logs mappában lévő naplókat streameli.
Futtassa a következő parancsot a rendszer által létrehozott naplók konzolra való streameléséhez. Cserélje le a
<job_name>
paramétert a kötegelt pontozási feladat nevére:az ml job stream --name <job_name>
2. lehetőség: Feladatnaplók megtekintése az Azure Machine Learning Studióban.
Futtassa a következő parancsot a stúdióban használni kívánt feladathivatkozás lekéréséhez. Cserélje le a
<job_name>
paramétert a kötegelt pontozási feladat nevére:az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
Nyissa meg a feladathivatkozást a stúdióban.
A feladat gráfjában válassza ki a batchscoring lépést.
A Kimenetek + naplók lapon válasszon ki egy vagy több áttekintendő naplót.
Naplófájlok áttekintése
Az Azure Machine Learning számos típusú naplófájlt és egyéb adatfájlt biztosít, amelyekkel elháríthatja a kötegelt pontozási feladatokat.
A kötegelt pontozási naplók két legfelső szintű mappája az azureml-naplók és a naplók. A pontozószkriptet megnyitó vezérlő információi a ~/azureml-logs/70_driver_log.txt fájlban vannak tárolva.
Magas szintű információk vizsgálata
A kötegelt pontozási feladatok elosztott jellege különböző forrásokból származó naplókat eredményez, de két kombinált fájl magas szintű információt nyújt:
Fájl | Leírás |
---|---|
~/naplók/job_progress_overview.txt | A létrehozott mini kötegek (más néven feladatok) aktuális számával és a feldolgozott mini kötegek aktuális számával kapcsolatos magas szintű információkat nyújt. Mivel a mini kötegek feldolgozása véget ér, a napló rögzíti a feladat eredményeit. Ha a feladat meghiúsul, a napló megjeleníti a hibaüzenetet, és azt, hogy hol kezdje el a hibaelhárítást. |
~/logs/sys/master_role.txt | Megadja a futó feladat fő csomópontjának (más néven vezénylőjének) nézetét. Ez a napló a tevékenység létrehozásával, a folyamatfigyeléssel és a feladat eredményével kapcsolatos információkat tartalmazza. |
Verem nyomkövetési adatainak vizsgálata hibák esetén
Más fájlok információt nyújtanak a szkript lehetséges hibáiról:
Fájl | Leírás |
---|---|
~/logs/user/error.txt | A szkript hibáinak összegzését tartalmazza. |
~/logs/user/error/* | A bejegyzésszkript betöltése és futtatása során kidobott kivételek teljes veremkövetkezőit tartalmazza. |
Folyamatnaplók vizsgálata csomópontonként
Ha szeretné megismerni, hogy az egyes csomópontok hogyan hajtják végre a pontszámszkriptet, vizsgálja meg az egyes csomópontok egyes folyamatnaplóit. A folyamatnaplók a ~/logs/sys/node mappában vannak tárolva, és feldolgozó csomópontok szerint vannak csoportosítva.
A mappa egy <ip_address>/ almappát tartalmaz, amely egy <process_name>.txt fájlt tartalmaz, amely részletes információkat tartalmaz az egyes mini kötegekről. A mappa tartalma akkor frissül, ha egy feldolgozó kiválasztja vagy befejezi a mini köteget. Minden mini köteghez a naplófájl a következőket tartalmazza:
- A feldolgozó folyamat IP-címe és folyamatazonosítója (PID).
- Az elemek teljes száma, a sikeresen feldolgozott elemek száma és a sikertelen elemek száma.
- A kezdési idő, az időtartam, a folyamat ideje és a futtatási módszer ideje.
Csomópontonkénti rendszeres ellenőrzések vizsgálata
Megtekintheti az egyes csomópontok erőforrás-használatának rendszeres ellenőrzésének eredményeit is. A naplófájlokat és a telepítőfájlokat a ~/logs/perf mappában tárolja a rendszer.
A paraméter használatával --resource_monitor_interval
másodpercek alatt módosíthatja az ellenőrzési időközt:
- Alapértelmezett érték: Az alapértelmezett időköz 600 másodperc (körülbelül 10 perc).
- Leállítási ellenőrzések: Állítsa az értéket 0 értékre, hogy ne futtassa az ellenőrzéseket a csomóponton.
A mappa egy <ip_address>/ almappát tartalmaz az egyes mini kötegekről. A mappa tartalma akkor frissül, ha egy feldolgozó kiválasztja vagy befejezi a mini köteget. Minden mini köteghez a mappa a következő elemeket tartalmazza:
Fájl vagy mappa | Leírás |
---|---|
operációs rendszer/ | A csomóponton futó összes folyamat adatait tárolja. Az egyik ellenőrzés futtat egy operációsrendszer-parancsot, és menti az eredményt egy fájlba. Linuxon a parancs a .ps A mappa a következő elemeket tartalmazza: - %Y%m%d%H: Egy vagy több folyamatellenőrzési fájlt tartalmazó almappa. Az almappák neve az ellenőrzés létrehozási dátuma és időpontja (Év, Hónap, Nap, Óra). processes_%M: Fájl az almappában. A fájl a folyamatellenőrzés részleteit jeleníti meg. A fájlnév az ellenőrzés létrehozási idejéhez viszonyított ellenőrzési idővel (perc) végződik. |
node_disk_usage.csv | A csomópont részletes lemezhasználatát jeleníti meg. |
node_resource_usage.csv | Megadja a csomópont erőforrás-használati áttekintését. |
processes_resource_usage.csv | Az egyes folyamatok erőforrás-használati áttekintését nyújtja. |
Naplózás hozzáadása pontozási szkripthez
Python-naplózást használhat a pontozószkriptben. Ezek a naplók a naplók/felhasználó/stdout/<node_id>/folyamatszám<>.stdout.txt fájlban vannak tárolva.
Az alábbi kód bemutatja, hogyan vehet fel naplózást a szkriptbe:
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")
Gyakori hibák elhárítása
A következő szakaszok a kötegelt végpontok fejlesztése és használata során előforduló gyakori hibákat, valamint a megoldás lépéseit ismertetik.
Nincs azureml nevű modul
Az Azure Machine Learning-köteg üzembe helyezéséhez az azureml-core csomagra van szükség a telepítésben.
Naplózott üzenet: "Nincs ." nevű azureml
modul.
Ok: Úgy azureml-core
tűnik, hogy a csomag hiányzik a telepítésből.
Megoldás: Adja hozzá a csomagot a azureml-core
conda dependencies fájlhoz.
Nincs kimenet az előrejelzési fájlban
A Batch üzembe helyezése azt várja, hogy egy üres mappa tárolja a predictions.csv fájlt. Amikor az üzembe helyezés egy meglévő fájllal találkozik a megadott mappában, a folyamat nem cseréli le a fájl tartalmát az új kimenetre, és nem hoz létre új fájlt az eredményekkel.
Naplózott üzenet: Nincs konkrét naplózott üzenet.
Ok: A Batch üzembe helyezése nem tudja felülírni a meglévő predictions.csv fájlokat.
Megoldás: Ha a folyamat kimeneti mappahelyet ad meg az előrejelzésekhez, győződjön meg arról, hogy a mappa nem tartalmaz meglévő predictions.csv fájlt.
A batch-folyamat időtúllépése
A Batch üzembe helyezése egy timeout
érték alapján határozza meg, hogy az üzembe helyezés mennyi ideig várjon az egyes kötegfolyamatok befejezésére. Ha egy köteg végrehajtása túllépi a megadott időtúllépést, a köteg üzembe helyezése megszakítja a folyamatot.
A megszakított folyamatok újrapróbálkozottak az értékben max_retries
megadott maximális számú kísérletig. Ha minden újrapróbálkozási kísérletnél időtúllépési hiba történik, az üzembe helyezési feladat meghiúsul.
A paraméterrel retry_settings
konfigurálhatja az timeout
egyes üzemelő példányok tulajdonságait és max_retries
tulajdonságait.
A naplózott üzenet: "Nincs állapotfrissítés [szám] másodpercben. Ebben az ellenőrzésben nincs állapotfrissítés. Várjon [szám] másodpercet a legutóbbi frissítés óta."
Ok: A kötegelt végrehajtás túllépi a megadott időtúllépést és az újrapróbálkozási kísérletek maximális számát. Ez a művelet a bejegyzésszkriptben run()
található függvény hibájának felel meg.
Megoldás: Növelje az timeout
üzembe helyezés értékét. Alapértelmezés szerint az timeout
érték 30, az max_retries
érték pedig 3. Az üzembe helyezés megfelelő timeout
értékének meghatározásához vegye figyelembe az egyes kötegeken feldolgozandó fájlok számát és a fájlméreteket. Csökkentheti a feldolgozandó fájlok számát, és kisebb méretű mini kötegeket hozhat létre. Ez a megközelítés gyorsabb végrehajtást eredményez.
Kivétel a ScriptExecution.StreamAccess.Authentication alkalmazásban
Ahhoz, hogy a kötegelt üzembe helyezés sikeres legyen, a számítási fürt felügyelt identitásának engedéllyel kell rendelkeznie az adategység-tároló csatlakoztatásához. Ha a felügyelt identitás nem rendelkezik megfelelő engedélyekkel, a szkript kivételt okoz. Ez a hiba azt is okozhatja, hogy az adategység-tároló nem csatlakoztatható.
A naplózott üzenet: "A ScriptExecutionException-t a StreamAccessException okozta. A StreamAccessException-t az AuthenticationException okozta."
Ok: Az üzembe helyezést futtató számítási fürt nem tudja csatlakoztatni azt a tárolót, ahol az adategység található. A számítás felügyelt identitása nem rendelkezik a csatlakoztatás végrehajtásához szükséges engedélyekkel.
Megoldás: Győződjön meg arról, hogy annak a számítási fürtnek a felügyelt identitása, amelyen az üzemelő példány fut, legalább Storage Blob Data Reader hozzáféréssel rendelkezik a tárfiókhoz. Csak az Azure Storage-fióktulajdonosok módosíthatják a hozzáférési szintet az Azure Portalon.
Az adathalmaz inicializálása nem sikerült, nem sikerült csatlakoztatni az adathalmazt
A kötegelt üzembehelyezési folyamathoz csatlakoztatott tároló szükséges az adategységhez. Ha a tároló nem csatlakozik, az adathalmaz nem inicializálható.
A naplózott üzenet: "Az adathalmaz inicializálása nem sikerült: UserErrorException: Üzenet: Nem lehet csatlakoztatni az adatkészletet(ID='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', name='None', version=None). Az adathalmaz forrása vagy nem érhető el, vagy nem tartalmaz adatokat."
Ok: Az üzembe helyezést futtató számítási fürt nem tudja csatlakoztatni azt a tárolót, ahol az adategység található. A számítás felügyelt identitása nem rendelkezik a csatlakoztatás végrehajtásához szükséges engedélyekkel.
Megoldás: Győződjön meg arról, hogy annak a számítási fürtnek a felügyelt identitása, amelyen az üzemelő példány fut, legalább Storage Blob Data Reader hozzáféréssel rendelkezik a tárfiókhoz. Csak az Azure Storage-fióktulajdonosok módosíthatják a hozzáférési szintet az Azure Portalon.
dataset_param nem rendelkezik megadott értékkel vagy alapértelmezett értékkel
A kötegelt üzembe helyezés során az adatkészlet-csomópont hivatkozik a paraméterre dataset_param
. Az üzembe helyezés folytatásához a paraméternek hozzárendelt vagy megadott alapértelmezett értékkel kell rendelkeznie.
Naplózott üzenet: "Az adatkészlet csomópontja [kód] hivatkozik a paraméterre dataset_param
, amely nem rendelkezik megadott értékkel vagy alapértelmezett értékkel."
Ok: A kötegvégpontnak biztosított bemeneti adategység nem támogatott.
Megoldás: Győződjön meg arról, hogy az üzembehelyezési szkript támogatja a kötegelt végpontok adatbevitelét.
A felhasználói program sikertelen, a futtatás sikertelen
A kötegelt üzembe helyezés parancsfájl-végrehajtása során, ha a vagy run()
függvény init()
hibát tapasztal, a felhasználói program vagy a futtatás meghiúsulhat. A hiba részleteit egy létrehozott naplófájlban tekintheti át.
Naplózott üzenet: "A felhasználói program kivétellel meghiúsult: A futtatás sikertelen. Részletekért tekintse meg a naplókat. A naplók elrendezését a naplók/readme.txt ellenőrizheti."
Ok: A init()
vagy run()
függvény hibát okoz a pontozási szkript végrehajtása során.
Megoldás: A függvényhibák részleteinek megkereséséhez kövesse az alábbi lépéseket:
Az Azure Machine Learning Studióban lépjen a sikertelen kötegelt üzembe helyezési feladat futtatására, és válassza a Kimenetek + naplók lapot.
Nyissa meg a fájlnaplók felhasználói>hibáját><>node_identifier>>folyamatszámot><.txt.
Keresse meg a vagy
run()
függvényinit()
által létrehozott hibaüzenetet.
ValueError: Nincsenek összefűzendő objektumok
Ahhoz, hogy a köteg üzembe helyezése sikeres legyen, a mini köteg minden fájljának érvényesnek kell lennie, és egy támogatott fájltípust kell implementálnia. Ne feledje, hogy az MLflow-modellek csak a fájltípusok egy részét támogatják. További információ: Megfontolandó szempontok a kötegelt következtetésre való üzembe helyezéskor.
A naplózott üzenet: "ValueError: Nincs összefűzendő objektum."
Ok: A létrehozott mini köteg összes fájlja sérült vagy nem támogatott fájltípus.
Megoldás: A sikertelen fájlok részleteinek megkereséséhez kövesse az alábbi lépéseket:
Az Azure Machine Learning Studióban lépjen a sikertelen kötegelt üzembe helyezési feladat futtatására, és válassza a Kimenetek + naplók lapot.
Nyissa meg a fájlnaplók >felhasználói>node_identifier><>>folyamatszámát<>.txt.
Keresse meg a fájlbemeneti hibát leíró bejegyzéseket, például : "ERROR:azureml:Error processing input file".
Ha a fájltípus nem támogatott, tekintse át a támogatott fájlok listáját. Előfordulhat, hogy módosítania kell a bemeneti adatok fájltípusát, vagy testre kell szabnia az üzembe helyezést egy pontozószkript biztosításával. További tudnivalókért lásd: MLflow-modellek pontozószkripttel való használata.
Nem sikerült mini-köteg
A kötegelt üzembehelyezési folyamat megköveteli, hogy a kötegelt végpontok a függvény által run()
várt formátumban adjanak meg adatokat. Ha a bemeneti fájlok sérült fájlok, vagy nem kompatibilisek a modell aláírásával, a run()
függvény nem ad vissza egy sikeres miniköteget.
Naplózott üzenet: "A futtatásból() visszaadott mini kötegelem nem sikerült. Ellenőrizze a "response: run()" (válasz: run()) kifejezést a következőben https://aka.ms/batch-inference-documentation
: ."
Ok: A kötegvégpont nem tudta a függvénynek a várt formátumban megadni az run()
adatokat. Ez a probléma azt eredményezheti, hogy sérült fájlok olvashatók, vagy a bemeneti adatok nem kompatibilisek a modell aláírásával (MLflow).
Megoldás: A sikertelen miniköteg részleteinek megkereséséhez kövesse az alábbi lépéseket:
Az Azure Machine Learning Studióban lépjen a sikertelen kötegelt üzembe helyezési feladat futtatására, és válassza a Kimenetek + naplók lapot.
Nyissa meg a fájlnaplók >felhasználói>node_identifier><>>folyamatszámát<>.txt.
Keressen olyan bejegyzéseket, amelyek a mini köteg bemeneti fájljának hibáját írják le, például "Hiba a bemeneti fájl feldolgozásakor". A részleteknek le kell írniuk, hogy a bemeneti fájl miért nem olvasható megfelelően.
Célközönség vagy szolgáltatás nem engedélyezett
A Microsoft Entra-jogkivonatok az engedélyezett felhasználókat (célközönséget), szolgáltatást és erőforrásokat azonosító konkrét műveletekhez vannak kiadva. A Batch Endpoint REST API hitelesítési jogkivonatának a paramétert a resource
következőre kell állítania https://ml.azure.com
: .
Naplózott üzenet: Nincs konkrét naplózott üzenet.
Ok: Megkísérli meghívni a REST API-t a kötegelt végponthoz és az üzembe helyezéshez egy másik célközönség vagy szolgáltatás számára kiadott jogkivonattal.
Megoldás: A hitelesítési probléma megoldásához kövesse az alábbi lépéseket:
Amikor hitelesítési jogkivonatot hoz létre a Batch Endpoint REST API-hoz, állítsa a paramétert a
resource
következőrehttps://ml.azure.com
: .Figyelje meg, hogy ez az erőforrás eltér a REST API végpontjának kezeléséhez használt erőforrástól. Az összes Azure-erőforrás (beleértve a kötegelt végpontokat is) az erőforrást
https://management.azure.com
használja a felügyelethez.Amikor meghívja a REST API-t egy kötegelt végponthoz és üzembe helyezéshez, ügyeljen arra, hogy a Batch Endpoint REST API-hoz kiadott jogkivonatot használja, ne pedig egy másik célközönség vagy szolgáltatás számára kiadott jogkivonatot. Minden esetben ellenőrizze, hogy a megfelelő erőforrás-URI-t használja-e.
Ha egyszerre szeretné használni a felügyeleti API-t és a feladathívási API-t, két jogkivonatra van szüksége. További információ: Hitelesítés kötegelt végpontokon (REST).
Nincs érvényes üzembe helyezés az átirányításhoz
Ahhoz, hogy a kötegelt üzembe helyezés sikeres legyen, a kötegvégpontnak legalább egy érvényes üzembehelyezési útvonalsal kell rendelkeznie. A standard módszer az alapértelmezett kötegtelepítés meghatározása a defaults.deployment_name
paraméter használatával.
A naplózott üzenet: "Nincs érvényes üzembe helyezés az útvonalhoz. Ellenőrizze, hogy a végpont rendelkezik-e legalább egy pozitív súlyértékekkel rendelkező üzembe helyezéssel, vagy használjon üzembe helyezésre vonatkozó fejlécet az átirányításhoz."
Ok: Az alapértelmezett kötegtelepítés nincs megfelelően beállítva.
Megoldás: Az útválasztási probléma megoldásához használja az alábbi módszerek egyikét:
Győződjön meg arról, hogy a
defaults.deployment_name
paraméter a megfelelő alapértelmezett kötegtelepítést határozza meg. További információ: Az alapértelmezett kötegtelepítés frissítése.Adja meg az útvonalat egy üzemelő példányra vonatkozó fejléccel.
Korlátozások és nem támogatott forgatókönyvek
Amikor kötegelt végpontokra támaszkodó gépi tanulási üzembehelyezési megoldásokat tervez, vegye figyelembe, hogy egyes konfigurációk és forgatókönyvek nem támogatottak. A következő szakaszok nem támogatott munkaterületeket és számítási erőforrásokat, valamint a bemeneti fájlok érvénytelen típusait azonosítják.
Nem támogatott munkaterület-konfigurációk
A kötegelt üzembe helyezéshez a következő munkaterület-konfigurációk nem támogatottak:
- Az Azure Container Registries szolgáltatással konfigurált munkaterületek engedélyezve van a Karantén funkcióval
- Ügyfél által felügyelt kulcsokkal rendelkező munkaterületek
Nem támogatott számítási konfigurációk
A kötegelt üzembe helyezéshez a következő számítási konfigurációk nem támogatottak:
- Azure ARC Kubernetes-fürtök
- Részletes erőforrás-kérés (memória, vCPU, GPU) az Azure Kubernetes-fürtökhöz (csak példányszám kérhető)
Nem támogatott bemeneti fájltípusok
A kötegelt telepítéshez a következő bemeneti fájltípusok nem támogatottak:
- Táblázatos adatkészletek (V1)
- Mappák és fájladatkészletek (V1)
- MLtable (V2)