Spåra ML-experiment och modeller med MLflow

I den här artikeln får du lära dig hur du använder MLflow för att spåra dina experiment och körs på Azure Machine Learning-arbetsytor.

Spårning är processen för att spara relevant information om experiment som du kör. Den sparade informationen (metadata) varierar beroende på ditt projekt och kan innehålla:

  • Kod
  • Miljöinformation (till exempel OS-version, Python-paket)
  • Indata
  • Parameterkonfigurationer
  • Modeller
  • Utvärderingsmått
  • Utvärderingsvisualiseringar (till exempel förvirringsmatriser, prioritetsritningar)
  • Utvärderingsresultat (inklusive några utvärderingsförutsägelser)

När du arbetar med jobb i Azure Machine Learning spårar Azure Machine Learning automatiskt viss information om dina experiment, till exempel kod, miljö och indata och utdata. Men för andra som modeller, parametrar och mått måste modellbyggaren konfigurera spårningen, eftersom de är specifika för det specifika scenariot.

Kommentar

Om du vill spåra experiment som körs på Azure Databricks kan du läsa Spåra Azure Databricks ML-experiment med MLflow och Azure Machine Learning. Mer information om hur du spårar experiment som körs i Azure Synapse Analytics finns i Spåra ML-experiment för Azure Synapse Analytics med MLflow och Azure Machine Learning.

Fördelar med spårningsexperiment

Vi rekommenderar starkt att maskininlärningsutövare spårar experiment, oavsett om du tränar med jobb i Azure Machine Learning eller tränar interaktivt i notebook-filer. Med experimentspårning kan du:

  • Organisera alla dina maskininlärningsexperiment på en enda plats. Du kan sedan söka efter och filtrera experiment och öka detaljnivån för att se information om experimenten som du körde tidigare.
  • Jämför experiment, analysera resultat och felsöka modellträning med lite extra arbete.
  • Återskapa eller köra experiment igen för att verifiera resultaten.
  • Förbättra samarbetet eftersom du kan se vad andra teammedlemmar gör, dela experimentresultat och komma åt experimentdata programmatiskt.

Varför ska du använda MLflow för att spåra experiment?

Azure Machine Learning-arbetsytor är MLflow-kompatibla, vilket innebär att du kan använda MLflow för att spåra körningar, mått, parametrar och artefakter i dina Azure Machine Learning-arbetsytor. En stor fördel med att använda MLflow för spårning är att du inte behöver ändra dina träningsrutiner för att arbeta med Azure Machine Learning eller mata in någon molnspecifik syntax.

Mer information om alla MLflow- och Azure Machine Learning-funktioner som stöds finns i MLflow och Azure Machine Learning.

Begränsningar

Vissa metoder som är tillgängliga i MLflow-API:et kanske inte är tillgängliga när de är anslutna till Azure Machine Learning. Mer information om åtgärder som stöds och som inte stöds finns i Supportmatris för frågekörningar och experiment.

Förutsättningar

  • Installera MLflow SDK-paketet mlflow och Azure Machine Learning-plugin-programmet för MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Dricks

    Du kan använda mlflow-skinny paketet, som är ett enkelt MLflow-paket utan SQL-lagring, server, användargränssnitt eller datavetenskapsberoenden. mlflow-skinny rekommenderas för användare som främst behöver MLflows spårnings- och loggningsfunktioner utan att importera hela sviten med funktioner, inklusive distributioner.

  • En Azure Machine Learning-arbetsyta. Du kan skapa en genom att följa självstudien Skapa maskininlärningsresurser.

  • Om du utför fjärrspårning (d.v.s. spårningsexperiment som körs utanför Azure Machine Learning) konfigurerar du MLflow så att det pekar på spårnings-URI:n för din Azure Machine Learning-arbetsyta. Mer information om hur du ansluter MLflow till din arbetsyta finns i Konfigurera MLflow för Azure Machine Learning.

Konfigurera experimentet

MLflow organiserar information i experiment och körningar (körningar kallas jobb i Azure Machine Learning). Som standard loggas körningar till ett experiment med namnet Standard som skapas automatiskt åt dig. Du kan konfigurera experimentet där spårning sker.

För interaktiv träning, till exempel i en Jupyter-anteckningsbok, använder du MLflow-kommandot mlflow.set_experiment(). Följande kodfragment konfigurerar till exempel ett experiment:

experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)

Konfigurera körningen

Azure Machine Learning spårar alla träningsjobb i vad MLflow anropar en körning. Använd körningar för att samla in all bearbetning som jobbet utför.

När du arbetar interaktivt börjar MLflow spåra din träningsrutin så snart du försöker logga information som kräver en aktiv körning. Till exempel startar MLflow-spårning när du loggar ett mått, en parameter eller startar en träningscykel och Mlflows autologgningsfunktion är aktiverad. Det är dock vanligtvis bra att starta körningen explicit, särskilt om du vill samla in den totala tiden för experimentet i fältet Varaktighet . Om du vill starta körningen explicit använder du mlflow.start_run().

Oavsett om du startar körningen manuellt eller inte måste du stoppa körningen så att MLflow vet att experimentkörningen är klar och kan markera körningens status som Slutförd. Om du vill stoppa en körning använder du mlflow.end_run().

Vi rekommenderar starkt att du startar körningar manuellt, så att du inte glömmer att avsluta dem när du arbetar i notebook-filer.

  • Starta en körning manuellt och avsluta den när du är klar med att arbeta i notebook-filen:

    mlflow.start_run()
    
    # Your code
    
    mlflow.end_run()
    
  • Det är vanligtvis bra att använda context manager-paradigmet för att komma ihåg att avsluta körningen:

    with mlflow.start_run() as run:
        # Your code
    
  • När du startar en ny körning med mlflow.start_run()kan det vara användbart att ange parametern run_name som senare översätts till namnet på körningen i Azure Machine Learning-användargränssnittet och hjälper dig att identifiera körningen snabbare:

    with mlflow.start_run(run_name="hello-world-example") as run:
        # Your code
    

Aktivera automatisk MLflow-loggning

Du kan logga mått, parametrar och filer med MLflow manuellt. Du kan dock också förlita dig på MLflows automatiska loggningsfunktion. Varje maskininlärningsramverk som stöds av MLflow bestämmer vad du ska spåra automatiskt åt dig.

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

mlflow.autolog()

Visa mått och artefakter på din arbetsyta

Mått och artefakter från MLflow-loggning spåras på din arbetsyta. Du kan visa och komma åt dem i studion när som helst eller komma åt dem programmässigt via MLflow SDK.

Så här visar du mått och artefakter i studion:

  1. Gå till Azure Machine Learning-studio.

  2. Gå till din arbetsyta.

  3. Hitta experimentet efter namn på din arbetsyta.

  4. Välj de loggade måtten för att återge diagram till höger. Du kan anpassa diagrammen genom att använda utjämning, ändra färg eller rita flera mått i en enda graf. Du kan också ändra storlek på och ordna om layouten som du vill.

  5. När du har skapat önskad vy sparar du den för framtida användning och delar den med dina teammedlemmar med hjälp av en direktlänk.

    Skärmbild av måttvyn.

Om du vill komma åt eller fråga efter mått, parametrar och artefakter programatiskt via MLflow SDK använder du mlflow.get_run().

import mlflow

run = mlflow.get_run("<RUN_ID>")

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

print(metrics, params, tags)

Dricks

För mått returnerar den föregående exempelkoden endast det sista värdet för ett visst mått. Om du vill hämta alla värden för ett visst mått använder du mlflow.get_metric_history metoden. Mer information om hur du hämtar värden för ett mått finns i Hämta params och mått från en körning.

Om du vill ladda ned artefakter som du har loggat, till exempel filer och modeller, använder du mlflow.artifacts.download_artifacts().

mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")

Mer information om hur du hämtar eller jämför information från experiment och körs i Azure Machine Learning med hjälp av MLflow finns i Fråga och jämföra experiment och körningar med MLflow.