Dela via


Spåra ML-modeller med MLflow och Azure Mašinsko učenje

GÄLLER FÖR: Python SDK azureml v1

I den här artikeln får du lära dig hur du aktiverar MLflow Tracking för att ansluta Azure Mašinsko učenje som serverdel för dina MLflow-experiment.

MLflow är ett bibliotek med öppen källkod för att hantera livscykeln för dina maskininlärningsexperiment. MLflow Tracking är en komponent i MLflow som loggar och spårar dina träningskörningsmått och modellartefakter, oavsett experimentets miljö – lokalt på datorn, på ett fjärrberäkningsmål, en virtuell dator eller ett Azure Databricks-kluster.

Se MLflow och Azure Mašinsko učenje för alla MLflow- och Azure-Mašinsko učenje funktioner som stöds, inklusive stöd för MLflow-projekt (förhandsversion) och modelldistribution.

Dricks

Om du vill spåra experiment som körs på Azure Databricks eller Azure Synapse Analytics kan du läsa de dedikerade artiklarna Spåra Azure Databricks ML-experiment med MLflow och Azure Mašinsko učenje eller Spåra ML-experiment för Azure Synapse Analytics med MLflow och Azure Mašinsko učenje.

Kommentar

Informationen i det här dokumentet är främst avsedd för dataforskare och utvecklare som vill övervaka modellträningsprocessen. Om du är administratör och är intresserad av att övervaka resursanvändning och händelser från Azure Mašinsko učenje, till exempel kvoter, slutförda träningsjobb eller slutförda modelldistributioner, kan du läsa Övervaka Azure Mašinsko učenje.

Förutsättningar

Spåra körningar från din lokala dator eller fjärrberäkning

Med hjälp av MLflow med Azure Mašinsko učenje kan du lagra loggade mått och artefakter som kördes på din lokala dator på din Azure Mašinsko učenje-arbetsyta.

Konfigurera spårningsmiljö

För att spåra en körning som inte körs på Azure Mašinsko učenje beräkning (från och med nu kallas "lokal beräkning") måste du peka din lokala beräkning till Azure Mašinsko učenje MLflow Tracking URI.

Kommentar

När du kör på Azure Compute (Azure Notebooks, Jupyter Notebooks som finns på Azure Compute Instances eller Compute Clusters) behöver du inte konfigurera spårnings-URI:n. Den konfigureras automatiskt åt dig.

GÄLLER FÖR: Python SDK azureml v1

Du kan hämta Azure Mašinsko učenje MLflow-spårnings-URI:n med hjälp av Azure Mašinsko učenje SDK v1 för Python. Kontrollera att biblioteket azureml-sdk är installerat i klustret som du använder. Följande exempel hämtar den unika MLFLow-spårnings-URI som är associerad med din arbetsyta. Sedan pekar metoden set_tracking_uri() MLflow-spårnings-URI:n till den URI:n.

  1. Använd konfigurationsfilen för arbetsytan:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Dricks

    Du kan ladda ned arbetsytans konfigurationsfil genom att:

    1. Gå till Azure Mašinsko učenje Studio
    2. Klicka på det överordnade högra hörnet på sidan –> Ladda ned konfigurationsfilen.
    3. Spara filen config.json i samma katalog som du arbetar med.
  2. Använd prenumerations-ID, resursgruppsnamn och arbetsytenamn:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Ange experimentnamn

Alla MLflow-körningar loggas till det aktiva experimentet. Som standard loggas körningar till ett experiment med namnet Default som skapas automatiskt åt dig. För att konfigurera experimentet som du vill arbeta med använder du MLflow-kommandot mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Dricks

När du skickar jobb med Azure Mašinsko učenje SDK kan du ange experimentnamnet med hjälp av egenskapen experiment_name när du skickar det. Du behöver inte konfigurera det i träningsskriptet.

Starta träningskörning

När du har angett MLflow-experimentnamnet kan du starta träningskörningen med start_run(). Använd log_metric() sedan för att aktivera MLflow-loggnings-API:et och börja logga dina träningskörningsmått.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Mer information om hur du loggar mått, parametrar och artefakter i en körning med MLflow-vyn Så här loggar och visar du mått.

Spåra körningar som körs på Azure Mašinsko učenje

GÄLLER FÖR: Python SDK azureml v1

Med fjärrkörningar (jobb) kan du träna dina modeller på ett mer robust och repetitivt sätt. De kan också använda mer kraftfulla beräkningar, till exempel Mašinsko učenje Compute-kluster. Mer information om olika beräkningsalternativ finns i Använda beräkningsmål för modellträning .

När du skickar körningar konfigurerar Azure Mašinsko učenje automatiskt MLflow så att det fungerar med arbetsytan som körningen körs i. Det innebär att du inte behöver konfigurera URI:n för MLflow-spårning. Dessutom namnges experiment automatiskt baserat på information om experimentöverföringen.

Viktigt!

När du skickar träningsjobb till Azure Mašinsko učenje behöver du inte konfigurera URI:n för MLflow-spårning på din träningslogik eftersom den redan har konfigurerats åt dig. Du behöver inte heller konfigurera experimentnamnet i träningsrutinen.

Skapa en träningsrutin

Först bör du skapa en src underkatalog och skapa en fil med träningskoden i en train.py fil i underkatalogen src . All träningskod kommer att gå till underkatalogen src , inklusive train.py.

Träningskoden hämtas från det här MLflow-exemplet i Azure Mašinsko učenje exempellagringsplats.

Kopiera den här koden till filen:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Konfigurera experimentet

Du måste använda Python för att skicka experimentet till Azure Mašinsko učenje. Konfigurera din beräknings- och träningskörningsmiljö med Environment klassen i en notebook- eller Python-fil.

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

ScriptRunConfig Skapa sedan med fjärrberäkningen som beräkningsmål.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

Med den här konfigurationen Experiment.submit() för beräknings- och träningskörningar använder du metoden för att skicka en körning. Den här metoden anger automatiskt MLflow-spårnings-URI:n och dirigerar loggningen från MLflow till din arbetsyta.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Visa mått och artefakter på din arbetsyta

Mått och artefakter från MLflow-loggning spåras på din arbetsyta. Om du vill visa dem när som helst går du till din arbetsyta och hittar experimentet efter namn på din arbetsyta i Azure Mašinsko učenje studio. Eller kör koden nedan.

Hämta körningsmått med MLflow get_run().

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Om du vill visa artefakterna för en körning kan du använda MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Om du vill ladda ned en artefakt till den aktuella katalogen kan du använda MLFlowClient.download_artifacts()

client.download_artifacts(run_id, "helloworld.txt", ".")

Mer information om hur du hämtar information från experiment och körs i Azure Mašinsko učenje med MLflow-vyn Hantera experiment och körningar med MLflow.

Jämför och fråga

Jämför och fråga alla MLflow-körningar i din Azure Mašinsko učenje-arbetsyta med följande kod. Läs mer om hur du kör frågor mot körningar med MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Automatisk loggning

Med Azure Mašinsko učenje och MLFlow kan användarna logga mått, modellparametrar och modellartefakter automatiskt när de tränar en modell. En mängd populära maskininlärningsbibliotek stöds.

Om du vill aktivera automatisk loggning infogar du följande kod före träningskoden:

mlflow.autolog()

Läs mer om automatisk loggning med MLflow.

Hantera modeller

Registrera och spåra dina modeller med Azure Mašinsko učenje-modellregistret, som stöder MLflow-modellregistret. Azure Mašinsko učenje-modeller är anpassade till MLflow-modellschemat, vilket gör det enkelt att exportera och importera dessa modeller i olika arbetsflöden. MLflow-relaterade metadata, till exempel körnings-ID, spåras också med den registrerade modellen för spårning. Användare kan skicka träningskörningar, registrera och distribuera modeller som skapats från MLflow-körningar.

Om du vill distribuera och registrera din produktionsklara modell i ett steg kan du läsa Distribuera och registrera MLflow-modeller.

Om du vill registrera och visa en modell från en körning använder du följande steg:

  1. När en körning är klar anropar du register_model() metoden.

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Visa den registrerade modellen på din arbetsyta med Azure Mašinsko učenje studio.

    I följande exempel har den registrerade modellen my-model MLflow-spårningsmetadata taggade.

    register-mlflow-model

  3. Välj fliken Artefakter för att se alla modellfiler som överensstämmer med MLflow-modellschemat (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Välj MLmodel för att se MLmodel-filen som genereras av körningen.

    MLmodel-schema

Rensa resurser

Om du inte planerar att använda de loggade måtten och artefakterna på din arbetsyta är möjligheten att ta bort dem individuellt för närvarande inte tillgänglig. Ta i stället bort resursgruppen som innehåller lagringskontot och arbetsytan, så att du inte debiteras några avgifter:

  1. I Azure-portalen väljer du Resursgrupper längst till vänster.

    Ta bort i Azure Portal

  2. Välj den resursgrupp i listan som du har skapat.

  3. Välj Ta bort resursgrupp.

  4. Ange resursgruppsnamnet. Välj sedan ta bort.

Exempelnotebook-filer

MLflow med Azure Mašinsko učenje notebook-filer visar och utökar begrepp som presenteras i den här artikeln. Se även den communitydrivna lagringsplatsen AzureML-Examples.

Nästa steg