Share via


Lekérdezés > kísérletek és futtatások összehasonlítása az MLflow használatával

Az Azure Machine Tanulás kísérletei és feladatai lekérdezhetők az MLflow használatával. Nem kell külön SDK-t telepítenie a betanítási feladatokon belüli folyamatok kezeléséhez, így zökkenőmentesebb átmenetet hozhat létre a helyi futtatások és a felhő között a felhőspecifikus függőségek eltávolításával. Ebben a cikkben megtudhatja, hogyan kérdezhet le és hasonlíthat össze kísérleteket és futtathat a munkaterületen az Azure Machine Tanulás és az MLflow SDK használatával Pythonban.

Az MLflow lehetővé teszi a következőt:

  • Kísérletek létrehozása, lekérdezése, törlése és keresése egy munkaterületen.
  • Futtatások lekérdezése, törlése és keresése egy munkaterületen.
  • Metrikák, paraméterek, összetevők és modellek nyomon követése és lekérése a futtatásokból.

A nyílt forráskódú MLflow és az MLflow közötti részletes összehasonlítása az Azure Machine-Tanulás való csatlakozáskor: Támogatási mátrix az Azure Machine-Tanulás futtatások és kísérletek lekérdezéséhez.

Feljegyzés

Az Azure Machine Tanulás Python SDK v2 nem biztosít natív naplózási vagy nyomkövetési képességeket. Ez nem csak a naplózásra, hanem a naplózott metrikák lekérdezésére is vonatkozik. Ehelyett az MLflow használatával kezelheti a kísérleteket és futtatásokat. Ez a cikk bemutatja, hogyan kezelhetők az MLflow kísérletek és futtatások az Azure Machine Tanulás.

A kísérleteket az MLflow REST API használatával is lekérdezheti és keresheti. Az MLflow REST használata az Azure Machine Tanulás használatával című cikkben talál egy példát a használatukról.

Előfeltételek

  • Telepítse az MLflow SDK-csomagot mlflow és az Azure Machine Tanulás beépülő modult az MLflow-hozazureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Tipp.

    Használhatja a mlflow-skinny csomagot, amely egy egyszerű MLflow-csomag SQL Storage, kiszolgáló, felhasználói felület vagy adatelemzési függőségek nélkül. mlflow-skinny Azoknak a felhasználóknak ajánlott, akiknek elsősorban az MLflow nyomkövetési és naplózási képességeire van szükségük anélkül, hogy importálni kellene a teljes szolgáltatáscsomagot, beleértve az üzembe helyezéseket is.

  • Egy Azure Machine Learning-munkaterület. Létrehozhat egyet a Gépi tanulási erőforrások létrehozása oktatóanyagot követve.

  • Ha távoli nyomkövetést végez (vagyis az Azure Machine Tanulás kívül futó nyomkövetési kísérleteket), az MLflow konfigurálása az Azure Machine Tanulás-munkaterület nyomon követésére mutató URI-jára mutat. További információ az MLflow munkaterülethez való csatlakoztatásáról: MLflow konfigurálása az Azure Machine Tanulás.

Lekérdezési és keresési kísérletek

Az MLflow használatával kísérleteket kereshet a munkaterületen belül. Lásd az alábbi példákat:

  • Az összes aktív kísérlet lekérése:

    mlflow.search_experiments()
    

    Feljegyzés

    Az MLflow (<2.0) régebbi verzióiban használja inkább a metódust mlflow.list_experiments() .

  • Szerezze be az összes kísérletet, beleértve az archivált kísérleteket is:

    from mlflow.entities import ViewType
    
    mlflow.search_experiments(view_type=ViewType.ALL)
    
  • Adott kísérlet lekérése név szerint:

    mlflow.get_experiment_by_name(experiment_name)
    
  • Adott kísérlet lekérése azonosító alapján:

    mlflow.get_experiment('1234-5678-90AB-CDEFG')
    

Keresési kísérletek

A search_experiments() Mlflow 2.0 óta elérhető metódus lehetővé teszi, hogy olyan kísérleteket keressen, amelyek megfelelnek a feltételeknek a használatával filter_string.

  • Több kísérlet lekérése az azonosítójuk alapján:

    mlflow.search_experiments(filter_string="experiment_id IN ("
        "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')"
    )
    
  • Az adott idő elteltével létrehozott összes kísérlet lekérése:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
    
  • Az összes kísérlet lekérése egy adott címkével:

    mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
    

Lekérdezések és keresések futtatása

Az MLflow lehetővé teszi a futtatások keresését bármely kísérletben, beleértve egyszerre több kísérletet is. A metódus mlflow.search_runs() elfogadja az argumentumot experiment_ids , és experiment_name jelzi, hogy mely kísérletekben szeretne keresni. Azt is jelezheti search_all_experiments=True , hogy a munkaterület összes kísérletében szeretne-e keresni:

  • Kísérlet neve szerint:

    mlflow.search_runs(experiment_names=[ "my_experiment" ])
    
  • Kísérletazonosító szerint:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
    
  • Keresés a munkaterület összes kísérletében:

    mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
    

Figyelje meg, hogy experiment_ids támogatja a kísérletek tömbjének biztosítását, így szükség esetén több kísérletben is kereshet. Ez akkor lehet hasznos, ha egy modell futásait szeretné összehasonlítani, amikor különböző kísérletekben (például különböző személyek vagy különböző projekt iterációk) naplózzák.

Fontos

Ha experiment_ids, experiment_namesvagy search_all_experiments nincs megadva, akkor az MLflow alapértelmezés szerint keres az aktuális aktív kísérletben. Az aktív kísérletet a következővel mlflow.set_experiment()állíthatja be: .

Az MLflow alapértelmezés szerint Pandas Dataframe formátumban adja vissza az adatokat, ami hasznos lehet a futtatások elemzésének további feldolgozásakor. A visszaadott adatok az alábbi oszlopokat tartalmazzák:

  • Alapvető információk a futtatásról.
  • Az oszlop nevével params.<parameter-name>rendelkező paraméterek.
  • Metrikák (mindegyik utolsó naplózott értéke) az oszlop nevével metrics.<metric-name>.

A rendszer minden metrikát és paramétert a lekérdezés futtatásakor is visszaad. A több értéket (például veszteséggörbét vagy PR-görbét) tartalmazó metrikák esetében azonban a rendszer csak a metrika utolsó értékét adja vissza. Ha egy adott metrika összes értékét le szeretné kérni, használja a metódust mlflow.get_metric_history . Példa: Paramok és metrikák lekérése futtatásból .

Rendelésfuttatások

Alapértelmezés szerint a kísérletek csökkenő sorrendben start_timevannak, ez az az idő, amikor a kísérlet várólistára lett állítva az Azure Machine Tanulás. Ezt az alapértelmezett beállítást azonban a paraméterrel order_bymódosíthatja.

  • A sorrend attribútumok szerint fut, például start_time:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
                       order_by=["attributes.start_time DESC"])
    
  • A rendelésfuttatások és az eredmények korlátozása. Az alábbi példa a kísérlet utolsó egyszeri futtatását adja vissza:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       max_results=1, order_by=["attributes.start_time DESC"])
    
  • A sorrend az attribútum durationszerint fut:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       order_by=["attributes.duration DESC"])
    

    Tipp.

    attributes.durationnem található meg az MLflow OSS-ben, de az Azure Machine Tanulás biztosítja a kényelem érdekében.

  • A sorrend a metrika értékei alapján fut:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
    

    Figyelmeztetés

    A order_by paramétert order_by tartalmazó metrics.*params.*tags.* kifejezések használata jelenleg nem támogatott. Ehelyett használja a order_values Pandas metódusát a példában látható módon.

Szűrőfuttatások

A paraméterrel filter_stringmegkeresheti a hiperparaméterek adott kombinációjával rendelkező futtatást is. A params futtatás paramétereinek elérése, metrics a futtatásban naplózott metrikák elérése és attributes a futtatási információk részleteinek elérése. Az MLflow támogatja az AND kulcsszóhoz csatlakoztatott kifejezéseket (a szintaxis nem támogatja az OR függvényt):

  • A keresés egy paraméter értéke alapján fut:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="params.num_boost_round='100'")
    

    Figyelmeztetés

    Csak operátorok =, likeés != a szűrés parametersis támogatott.

  • A keresés egy metrika értéke alapján fut:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="metrics.auc>0.8")
    
  • A keresés egy adott címkével fut:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="tags.framework='torch'")
    
  • Adott felhasználó által létrehozott keresések:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.user_id = 'John Smith'")
    
  • A keresés sikertelen volt. A lehetséges értékek szűrése állapot szerint:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.status = 'Failed'")
    
  • Adott időpont után létrehozott keresések:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")
    

    Tipp.

    A kulcs attributesesetében az értékeknek mindig sztringeknek kell lenniük, ezért idézőjelek között kell kódolniuk.

  • Az egy óránál hosszabb ideig tartó keresések:

    duration = 360 * 1000 # duration is in milliseconds
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.duration > '{duration}'")
    

    Tipp.

    attributes.durationnem található meg az MLflow OSS-ben, de az Azure Machine Tanulás biztosítja a kényelem érdekében.

  • Olyan keresések futnak, amelyek egy adott készletben rendelkeznek az azonosítóval:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
    

Szűrési futtatások állapot szerint

Ha állapot szerint szűri a futtatásokat, az MLflow egy másik konvencióval adja meg a futtatás lehetséges állapotát az Azure Machine Tanulás képest. Az alábbi táblázat a lehetséges értékeket mutatja be:

Azure Machine Tanulás feladat állapota MLFlow-k attributes.status Értelmezés
Nem kezdődött el Scheduled A feladatot/futtatás az Azure Machine Tanulás kapta.
Feldolgozási sor Scheduled A feladat/futtatás futásra van ütemezve, de még nem indult el.
Előkészítése Scheduled A feladat/futtatás még nem kezdődött el, de a rendszer kiosztott egy számítást a végrehajtásához, és előkészíti a környezetet és a bemeneteket.
Futó Running A feladat/futtatás jelenleg aktív végrehajtás alatt áll.
Befejeződött Finished A feladat/futtatás hiba nélkül befejeződött.
Sikertelen Failed A feladat/futtatás hibákkal fejeződött be.
Visszavont Killed A feladatot/futtatásokat a felhasználó megszakította, vagy a rendszer leállt.

Példa:

mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                   filter_string="attributes.status = 'Failed'")

Metrikák, paraméterek, összetevők és modellek lekérése

A metódus search_runs alapértelmezés szerint korlátozott mennyiségű információt tartalmazó Pandas-t Dataframe ad vissza. Szükség esetén Python-objektumokat is lekérhet, ami hasznos lehet a részletek lekéréséhez. A paraméter használatával szabályozhatja a output_format kimenet visszaadása módját:

runs = mlflow.search_runs(
    experiment_ids=[ "1234-5678-90AB-CDEFG" ],
    filter_string="params.num_boost_round='100'",
    output_format="list",
)

A részletek ezután elérhetők a info tagtól. Az alábbi minta bemutatja, hogyan szerezheti be a következőt run_id:

last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)

Paramok és metrikák lekérése futtatásból

A futtatások visszaadásakor output_format="list"a kulcs datahasználatával egyszerűen elérheti a paramétereket:

last_run.data.params

Ugyanígy lekérdezheti a metrikákat:

last_run.data.metrics

Több értéket (például veszteséggörbét vagy PR-görbét) tartalmazó metrikák esetén a rendszer csak a metrika utolsó naplózott értékét adja vissza. Ha egy adott metrika összes értékét le szeretné kérni, használja a metódust mlflow.get_metric_history . Ehhez a metódushoz a MlflowClientkövetkezőt kell használnia:

client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")

Összetevők lekérése futtatásból

Az MLflow lekérdezheti a futtatás által naplózott összetevőket. Az összetevők nem érhetők el a futtatási objektummal, és ehelyett az MLflow-ügyfelet kell használni:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")

Az előző módszer felsorolja a futtatás során naplózott összes összetevőt, de az összetevők tárolójában (Azure Machine Tanulás storage) maradnak tárolva. Bármelyik letöltéséhez használja a következő módszert download_artifact:

file_path = mlflow.artifacts.download_artifacts(
    run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)

Feljegyzés

Az MLflow régebbi verzióiban (<2.0) használja inkább a metódust MlflowClient.download_artifacts() .

Modellek lekérése futtatásból

A modellek futtatáskor is naplózhatók, majd közvetlenül onnan kérhetők le. A modell lekéréséhez ismernie kell annak az összetevőnek az elérési útját, ahol a rendszer tárolja. A metódussal list_artifacts megkereshetők a modellnek megfelelő összetevők, mivel az MLflow-modellek mindig mappák. A modell letöltéséhez adja meg a modell tárolási útvonalát a download_artifact következő módszerrel:

artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
  run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)

Ezután betöltheti a modellt a letöltött összetevőkből az ízspecifikus névtér tipikus függvényével load_model . Az alábbi példa a következőket használja xgboost:

model = mlflow.xgboost.load_model(model_local_path)

Az MLflow lehetővé teszi mindkét művelet egyszerre történő végrehajtását, valamint a modell egyetlen utasításban való letöltését és betöltését. Az MLflow letölti a modellt egy ideiglenes mappába, és onnan tölti be. A metódus load_model egy URI-formátumot használ annak jelzésére, hogy honnan kell lekérni a modellt. Ha futtatásból tölt be egy modellt, az URI-struktúra a következő:

model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")

Tipp.

A modellregisztrációs adatbázisban regisztrált modellek lekérdezéséhez és betöltéséhez lásd: Modellregisztrációs adatbázisok kezelése az Azure Machine Tanulás MLflow használatával.

Gyermekfuttatások lekérése (beágyazott)

Az MLflow támogatja a gyermek (beágyazott) futtatások fogalmát. Ezek a futtatások akkor hasznosak, ha olyan betanítási rutinokat kell kiváltania, amelyeket a fő betanítási folyamattól függetlenül kell nyomon követni. A hiperparaméterek finomhangolási optimalizálási folyamatai vagy az Azure Machine Tanulás-folyamatok tipikus példák több gyermekfuttatást generáló feladatokra. Egy adott futtatás összes gyermekfuttatását lekérdezheti a szülőfuttatás futtatási azonosítóját tartalmazó tulajdonságcímkével mlflow.parentRunId.

hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
    filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)

Feladatok és modellek összehasonlítása az Azure Machine Tanulás Studióban (előzetes verzió)

Az Azure Machine Tanulás Studióban a feladatok és modellek minőségének összehasonlításához és értékeléséhez használja az előnézeti panelt a funkció engedélyezéséhez. Ha engedélyezve van, összehasonlíthatja a paramétereket, metrikákat és címkéket a kiválasztott feladatok és/vagy modellek között.

Fontos

A cikkben megjelölt (előzetes verziójú) elemek jelenleg nyilvános előzetes verzióban érhetők el. Az előzetes verzió szolgáltatásszint-szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Képernyőkép az előnézeti panelről, amely bemutatja, hogyan hasonlíthatja össze a feladatokat és modelleket az Azure Machine Tanulás Studióban.

Az Azure Machine Tanulás-jegyzetfüzetekkel rendelkező MLflow bemutatja és kibővíti a cikkben ismertetett fogalmakat.

Támogatási mátrix a futtatások és kísérletek lekérdezéséhez

Az MLflow SDK számos metódust tesz elérhetővé a futtatások lekéréséhez, többek között a visszaadott adatok és azok módjának szabályozását. Az alábbi táblázatból megtudhatja, hogy az MLflow jelenleg mely metódusokat támogatja az Azure Machine Tanulás csatlakoztatva:

Szolgáltatás Az MLflow támogatja Az Azure Machine Tanulás támogatja
A sorrendi futtatások attribútumok szerint
A rendezés metrikák szerint fut 1
A rendelési futtatások paraméterek szerint 1
A rendezés címkék szerint fut 1
Szűrési futtatások attribútumok szerint
A szűrés metrikák szerint fut
A szűrés speciális karakterekkel rendelkező metrikák szerint fut (szökött)
A szűrés paraméterek szerint fut
Szűrés címkék szerint
A szűrés numerikus összehasonlítókkal (metrikákkal) fut, beleértve =a , !=, >, >=, és <<=
A szűrés sztring-összehasonlítókkal (paramokkal, címkékkel és attribútumokkal) fut: = és != ✓2
A szűrés sztring-összehasonlítókkal (paramokkal, címkékkel és attribútumokkal) fut: LIKE/ILIKE
A szűrés komparátorokkal fut AND
A szűrés komparátorokkal fut OR
Kísérletek átnevezése

Feljegyzés

  • 1 Az Azure Machine Tanulás ugyanazokkal a funkciókkal kapcsolatos utasításokért és példákért tekintse meg a Rendezés című szakaszt.
  • 2!= a nem támogatott címkék esetében.