Track Azure Databricks ML experiments with MLflow and Azure Machine Learning

Az MLflow egy nyílt forráskódú kódtár a gépi tanulási kísérletek életciklusának kezelésére. Az MLflow használatával integrálhatja az Azure Databrickset az Azure Machine Tanulás, hogy a lehető legjobbat kapja mindkét terméktől.

Ebben a cikkben a következőkkel ismerkedhet meg:

Előfeltételek

Példajegyzetfüzetek

Az Azure Databricks betanítási modelljei és üzembe helyezése az Azure Machine Tanulás bemutatja, hogyan taníthat be modelleket az Azure Databricksben, és hogyan helyezheti üzembe őket az Azure Machine Tanulás. Azt is tartalmazza, hogyan kezelheti azokat az eseteket, amikor az Azure Databricks MLflow-példányával is nyomon szeretné követni a kísérleteket és modelleket, és hogyan használhatja ki az Azure Machine Tanulás üzembe helyezéshez.

Kódtárak telepítése

Ha könyvtárakat szeretne telepíteni a fürtre, lépjen a Tárak lapra, és válassza az Új telepítése lehetőséget

mlflow with azure databricks

A Csomag mezőbe írja be az azureml-mlflow parancsot, majd válassza a telepítést. Ismételje meg ezt a lépést, ha további csomagokat szeretne telepíteni a fürtre a kísérlethez.

Azure DB install mlflow library

Azure Databricks-futtatások nyomon követése az MLflow használatával

Az Azure Databricks kétféleképpen konfigurálható a kísérletek MLflow használatával történő nyomon követésére:

Az Azure Databricks-munkaterület összekapcsolásakor alapértelmezés szerint a kettős nyomon követés lesz konfigurálva.

Kettős nyomon követés az Azure Databricks és az Azure Machine Tanulás

Az ADB-munkaterület és az Azure Machine Tanulás munkaterület összekapcsolása lehetővé teszi a kísérletadatok nyomon követését az Azure Machine Tanulás-munkaterületen és az Azure Databricks-munkaterületen egyszerre. Ezt kettős nyomkövetésnek nevezzük.

Figyelmeztetés

Az Azure Machine Tanulás-munkaterületen egy privát kapcsolaton belüli kettős nyomon követés jelenleg nem támogatott. Konfiguráljon exkluzív nyomon követést az Azure Machine Tanulás-munkaterülettel.

Figyelmeztetés

A 21Vianet által üzemeltetett Microsoft Azure-ban jelenleg nem támogatott kettős nyomkövetés. Konfiguráljon exkluzív nyomon követést az Azure Machine Tanulás-munkaterülettel.

Ha az ADB-munkaterületet egy új vagy meglévő Azure Machine Tanulás-munkaterülethez szeretné kapcsolni,

  1. Sign in to Azure portal.
  2. Lépjen az ADB-munkaterület Áttekintés lapjára.
  3. Válassza az Azure Machine csatolása Tanulás munkaterület gombot a jobb alsó sarokban.

Link Azure DB and Azure Machine Learning workspaces

Miután összekapcsolta az Azure Databricks-munkaterületet az Azure Machine Tanulás-munkaterülettel, az MLflow Tracking automatikusan az alábbi helyeken lesz nyomon követve:

  • A csatolt Azure Machine Tanulás munkaterület.
  • Az eredeti ADB-munkaterület.

Az MLflow az Azure Databricksben ugyanúgy használható, mint korábban. Az alábbi példa beállítja a kísérlet nevét, ahogy az általában az Azure Databricksben történik, és elkezd naplózást végezni néhány paraméteren:

import mlflow 

experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}" 
mlflow.set_experiment(experimentName) 

with mlflow.start_run():
   mlflow.log_param('epochs', 20)
   pass

Megjegyzés:

A nyomkövetéssel ellentétben a modellregisztrációs adatbázisok nem támogatják a modellek egyidejű regisztrálását mind az Azure Machine Tanulás, mind az Azure Databricksben. Vagy az egyiket, vagy a másikat kell használni. További részletekért olvassa el a modellek regisztrálása a beállításjegyzékben az MLflow-ban című szakaszt.

Nyomon követés kizárólag az Azure Machine Tanulás-munkaterületen

Ha inkább központosított helyen szeretné kezelni a követett kísérleteket, beállíthatja, hogy az MLflow nyomon követése csak az Azure Machine Tanulás-munkaterületen legyen nyomon követve. Ez a konfiguráció azzal az előnnyel jár, hogy egyszerűbb üzembe helyezést tesz lehetővé az Azure Machine Tanulás üzembe helyezési lehetőségekkel.

Figyelmeztetés

A privát kapcsolattal kompatibilis Azure Machine Tanulás-munkaterülethez az Azure Databrickset a saját hálózatában kell üzembe helyeznie (VNet-injektálás), hogy biztosítsa a megfelelő kapcsolatot.

Az MLflow-követési URI-t úgy kell konfigurálnia, hogy kizárólag az Azure Machine Tanulás mutasson, ahogy az az alábbi példában is látható:

Nyomkövetési URI konfigurálása

  1. Kérje le a munkaterület nyomkövetési URI-ját:

    ÉRVÉNYES:Azure CLI ml-bővítmény 2-es verzió (aktuális)

    1. Jelentkezzen be és konfigurálja a munkaterületet:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. A nyomkövetési URI-t a következő paranccsal szerezheti az ml workspace be:

      az ml workspace show --query mlflow_tracking_uri
      
  2. A nyomkövetési URI konfigurálása:

    Ezután a metódus set_tracking_uri() az MLflow-követési URI-t az adott URI-ra pontokat jelölő URI-ra mutatja.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Tipp.

    Megosztott környezeteken, például Azure Databricks-fürtön, Azure Synapse Analytics-fürtön vagy hasonlókon végzett munka során hasznos, ha a környezeti változót MLFLOW_TRACKING_URI a fürt szintjén úgy állítja be, hogy automatikusan konfigurálja az MLflow-követési URI-t úgy, hogy a fürtben futó összes munkamenethez az Azure Machine Tanulás mutasson, és ne munkamenetenkénti alapon végezze el.

    Configure the environment variables in an Azure Databricks cluster

    A környezeti változó konfigurálása után az ilyen fürtön futó kísérletek nyomon lesznek követve az Azure Machine Tanulás.

Hitelesítés konfigurálása

A nyomkövetés konfigurálása után azt is konfigurálnia kell, hogy a hitelesítés hogyan történjen a társított munkaterületen. Alapértelmezés szerint az MLflow Azure Machine Tanulás beépülő modulja interaktív hitelesítést végez az alapértelmezett böngésző megnyitásával, hogy hitelesítő adatokat kérjen. Tekintse meg az MLflow konfigurálását az Azure Machine-Tanulás: Hitelesítés konfigurálása az MLflow hitelesítésének további módjaihoz az Azure Machine Tanulás-munkaterületeken.

Az olyan interaktív feladatok esetében, ahol egy felhasználó csatlakozik a munkamenethez, interaktív hitelesítésre támaszkodhat, ezért nincs szükség további műveletekre.

Figyelmeztetés

Az interaktív böngészőhitelesítés letiltja a kódvégrehajtást, amikor hitelesítő adatokat kér. Ez nem alkalmas hitelesítésre felügyelet nélküli környezetekben, például betanítási feladatokban. Javasoljuk, hogy más hitelesítési módot is konfiguráljon.

Azokban az esetekben, amikor felügyelet nélküli végrehajtásra van szükség, konfigurálnia kell egy szolgáltatásnevet az Azure Machine Tanulás való kommunikációhoz.

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

Tipp.

A megosztott környezeteken való munka során célszerű ezeket a környezeti változókat a számításnál konfigurálni. Ajánlott eljárásként titkos kulcsként kezelni őket az Azure Key Vault egy példányában, amikor csak lehetséges. Az Azure Databricksben például a fürtkonfigurációban az alábbiak szerint használhat titkos kulcsokat a környezeti változókban: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}. Az Azure Databricksben való műveletet egy környezeti változóban található titkos kódra hivatkozva, vagy a platform hasonló dokumentációjában találja.

A kísérlet nevei az Azure Machine Tanulás

Ha az MLflow úgy van konfigurálva, hogy kizárólag az Azure Machine Tanulás-munkaterületen kövesse a kísérleteket, a kísérlet elnevezési konvenciójának az Azure Machine Tanulás által használtat kell követnie. Az Azure Databricksben a kísérletek neve annak az elérési útnak a neve, ahol a kísérlet mentésre /Users/alice@contoso.com/iris-classifierkerül. Az Azure Machine Tanulás azonban közvetlenül meg kell adnia a kísérlet nevét. Az előző példához hasonlóan ugyanez a kísérlet neve is közvetlenül a következő iris-classifier :

mlflow.set_experiment(experiment_name="experiment-name")

Paraméterek, metrikák és összetevők nyomon követése

Az MLflow az Azure Databricksben ugyanúgy használható, mint korábban. További részletekért lásd: Log & view metrics and log files.

Naplózási modellek az MLflow használatával

A modell betanítása után a módszerrel naplózhatja a nyomkövetési kiszolgálóra mlflow.<model_flavor>.log_model() . <model_flavor>, a modellhez társított keretrendszerre hivatkozik. Ismerje meg, hogy milyen modellízek támogatottak. Az alábbi példában az MLLib Spark-kódtárral létrehozott modell regisztrálva van:

mlflow.spark.log_model(model, artifact_path = "model")

Érdemes megemlíteni, hogy az íz spark nem felel meg annak a ténynek, hogy egy modellt betanítunk egy Spark-fürtben, hanem a használt betanítási keretrendszer miatt (tökéletesen betaníthat egy modellt a TensorFlow és a Spark használatával, és így a használni tensorflowkívánt íz).

A modellek a nyomon követett futtatáson belül vannak naplózva. Ez azt jelenti, hogy a modellek az Azure Databricksben és az Azure Machine-Tanulás (alapértelmezett) vagy kizárólag az Azure Machine-Tanulás érhetők el, ha a nyomkövetési URI-t úgy konfigurálta, hogy rá mutasson.

Fontos

Figyelje meg, hogy itt a paraméter registered_model_name nincs megadva. Az ilyen paraméter következményeivel és a beállításjegyzék működésével kapcsolatos további részletekért olvassa el a modellek regisztrálása a beállításjegyzékben az MLflow használatával című szakaszt.

Modellek regisztrálása a beállításjegyzékben az MLflow használatával

A nyomkövetéssel ellentétben a modellregisztrációs adatbázisok nem működhetnek egyszerre az Azure Databricksben és az Azure Machine Tanulás. Vagy az egyiket, vagy a másikat kell használni. Alapértelmezés szerint az Azure Databricks-munkaterületet használják a modellregisztrációs adatbázisokhoz; hacsak nem úgy döntött, hogy az MLflow Trackingt csak az Azure Machine Tanulás munkaterületén követi nyomon, akkor a modellregisztrációs adatbázis az Azure Machine Tanulás munkaterület.

Ezt követően, figyelembe véve az alapértelmezett konfigurációt, a következő sor naplózza a modellt az Azure Databricks és az Azure Machine Tanulás megfelelő futtatásaiban, de csak az Azure Databricksben regisztrálja:

mlflow.spark.log_model(model, artifact_path = "model", 
                       registered_model_name = 'model_name')  
  • Ha a névvel rendelkező regisztrált modell nem létezik, a metódus regisztrál egy új modellt, létrehozza az 1. verziót, és visszaad egy ModelVersion MLflow objektumot.

  • Ha már létezik regisztrált modell a névvel, a metódus létrehoz egy új modellverziót, és visszaadja a verzióobjektumot.

Az Azure Machine Tanulás Registry használata az MLflow használatával

Ha az Azure Machine Tanulás Model Registryt szeretné használni az Azure Databricks helyett, javasoljuk, hogy az MLflow Trackingt csak az Azure Machine Tanulás-munkaterületén kövesse nyomon. Ezzel megszűnik a modellek regisztrációjának kétértelműsége, és egyszerűbbé válik az összetettség.

Ha azonban továbbra is a kettős követési képességeket szeretné használni, de modelleket szeretne regisztrálni az Azure Machine Tanulás, utasíthatja az MLflow-t, hogy az MLflow az Azure Machine Tanulás használja a modellregisztrációs adatbázisokhoz az MLflow Modellregisztrációs adatbázis URI-jának konfigurálásával. Ez az URI pontosan ugyanazzal a formátummal és értékkel rendelkezik, mint az MLflow tracking URI.

mlflow.set_registry_uri(azureml_mlflow_uri)

Megjegyzés:

A kapott érték azureml_mlflow_uri ugyanúgy lett lefokozva, mint a Set MLflow Trackingben, hogy csak az Azure Machine Tanulás-munkaterületen kövesse nyomon.

A forgatókönyvre vonatkozó teljes példáért tekintse meg az Azure Databricksben található betanítási modelleket, és helyezze üzembe őket az Azure Machine Tanulás.

Az Azure Machine-Tanulás regisztrált modellek üzembe helyezése és felhasználása

Az Azure Machine Tanulás Service-ben MLflow használatával regisztrált modellek a következőképpen használhatók:

  • Azure Machine-Tanulás végpont (valós idejű és köteg): Ez az üzembe helyezés lehetővé teszi az Azure Machine Tanulás üzembe helyezési képességeit az Azure Container Instances (ACI), az Azure Kubernetes (AKS) vagy a felügyelt következtetési végpontok valós idejű és kötegelt következtetéséhez.

  • MLFlow-modellobjektumok vagy Pandas UDF-ek, amelyek streamelési vagy kötegelt folyamatokban használhatók az Azure Databricks-jegyzetfüzetekben.

Modellek üzembe helyezése az Azure Machine Tanulás-végpontokon

A azureml-mlflow beépülő modul használatával üzembe helyezhet egy modellt az Azure Machine Tanulás-munkaterületen. Az MLflow-modellek üzembe helyezésének lapján részletes információkat talál arról, hogyan helyezhet üzembe modelleket a különböző célokra.

Fontos

A modelleket regisztrálni kell az Azure Machine Tanulás beállításjegyzékében az üzembe helyezésükhöz. Ha a modellek az Azure Databricks MLflow-példányában vannak regisztrálva, akkor újra regisztrálnia kell őket az Azure Machine Tanulás. Ebben az esetben tekintse meg az Azure Databricksben található példa betanítási modelleket, és helyezze üzembe őket az Azure Machine Tanulás

Modellek üzembe helyezése az ADB-ben kötegelt pontozáshoz UDF-ek használatával

A kötegelt pontozáshoz Azure Databricks-fürtöket választhat. A Mlflow használatával bármely modellt feloldhat a csatlakoztatott beállításjegyzékből. Általában az alábbi két módszer egyikét fogja használni:

  • Ha a modellt Spark-kódtárakkal (például MLLib) képezték be és készítették el, akkor mlflow.pyfunc.spark_udf a modell betöltésére és Spark Pandas UDF-ként való használatára szolgál az új adatok pontozásához.
  • Ha a modell nem Spark-kódtárakkal lett betanítve vagy felépítve, használja mlflow.pyfunc.load_model vagy mlflow.<flavor>.load_model töltse be a modellt a fürtillesztőbe. Figyelje meg, hogy ily módon a fürtön végbe kívánt párhuzamosításokat vagy munkaterjesztéseket Önnek kell vezénylnie. Figyelje meg azt is, hogy az MLflow nem telepíti a modell futtatásához szükséges kódtárat. Ezeket a kódtárakat a fürtben kell telepíteni a futtatás előtt.

Az alábbi példa bemutatja, hogyan tölthet be egy modellt a névvel ellátott uci-heart-classifier beállításjegyzékből, és hogyan használhatja azt Spark Pandas UDF-ként új adatok pontozásához.

from pyspark.sql.types import ArrayType, FloatType 

model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

Tipp.

Tekintse meg a modellek beállításjegyzékből való betöltésének további módjait a beállításjegyzékből származó modellekre való hivatkozáshoz.

Miután betöltötte a modellt, új adatokkal végezheti el a pontszámot:

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

Clean up resources

Ha meg szeretné tartani az Azure Databricks-munkaterületet, de már nincs szüksége az Azure Machine Tanulás-munkaterületre, törölheti az Azure Machine Tanulás-munkaterületet. Ez a művelet az Azure Databricks-munkaterület és az Azure Machine Tanulás-munkaterület leválasztását eredményezi.

Ha nem tervezi használni a naplózott metrikákat és összetevőket a munkaterületen, az egyesével történő törlés lehetősége jelenleg nem érhető el. Ehelyett törölje a tárfiókot és a munkaterületet tartalmazó erőforráscsoportot, így nem kell fizetnie:

  1. Az Azure Portalon válassza az Erőforráscsoportok lehetőséget a bal szélen.

    Delete in the Azure portal

  2. Válassza ki a listában az Ön által létrehozott erőforráscsoportot.

  3. Válassza az Erőforráscsoport törlése elemet.

  4. Adja meg az erőforráscsoport nevét. Ezután válassza a Törlés elemet.

További lépések