Delen via


Uitvoeringsgeschiedenis starten, bewaken en bijhouden

VAN TOEPASSING OP: Python SDK azureml v1

VAN TOEPASSING OP: Azure CLI ml-extensie v1

De Azure Machine Learning SDK voor Python v1 en Machine Learning CLI biedt verschillende methoden voor het bewaken, organiseren en bijhouden van uw uitvoeringen voor training en experimenten. Uw ML-uitvoeringsgeschiedenis is een belangrijk onderdeel van een uitlegbaar en herhaalbaar ML-ontwikkelingsproces.

Tip

Zie Uitvoeringen bijhouden, bewaken en analyseren met studio voor meer informatie over het gebruik van studio.

Als u Azure Machine Learning SDK v2 gebruikt, raadpleegt u de volgende artikelen:

In dit artikel wordt beschreven hoe u de volgende taken uitvoert:

  • Prestaties van uitvoering bewaken.
  • Tag- en zoekuitvoeringen.
  • Voer de zoekactie uit over uw uitvoeringsgeschiedenis.
  • Uitvoeringen annuleren of mislukken.
  • Onderliggende uitvoeringen maken.
  • Bewaak de uitvoeringsstatus per e-mailmelding.

Tip

Als u op zoek bent naar informatie over het bewaken van de Azure Machine Learning-service en de bijbehorende Azure-services, raadpleegt u Azure Machine Learning bewaken. Als u op zoek bent naar informatie over het bewaken van modellen die zijn geïmplementeerd als webservices, raadpleegt u Modelgegevens verzamelen en Bewaken met Application Insights.

Vereisten

U hebt de volgende items nodig:

  • Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.

  • Een Azure Machine Learning-werkruimte.

  • De Azure Machine Learning SDK voor Python (versie 1.0.21 of hoger). Als u de SDK wilt installeren of bijwerken naar de nieuwste versie van de SDK, raadpleegt u De SDK installeren of bijwerken.

    Gebruik de volgende code om uw versie van de Azure Machine Learning SDK te controleren:

    print(azureml.core.VERSION)
    
  • De Azure CLI - en CLI-extensie voor Azure Machine Learning.

    Belangrijk

    Sommige Azure CLI-opdrachten in dit artikel gebruiken de azure-cli-mlextensie (of v1) voor Azure Machine Learning. Ondersteuning voor de v1-extensie eindigt op 30 september 2025. U kunt de v1-extensie tot die datum installeren en gebruiken.

    U wordt aangeraden vóór 30 september 2025 over te stappen op de mlextensie of v2. Zie de Azure ML CLI-extensie en Python SDK v2 voor meer informatie over de v2-extensie.

Uitvoeringsprestaties bewaken

  • Een uitvoering en het bijbehorende logboekregistratieproces starten

    VAN TOEPASSING OP: Python SDK azureml v1

    1. Stel uw experiment in door de klassen Workspace, Experiment, Run en ScriptRunConfig te importeren vanuit het pakket azureml.core .

      import azureml.core
      from azureml.core import Workspace, Experiment, Run
      from azureml.core import ScriptRunConfig
      
      ws = Workspace.from_config()
      exp = Experiment(workspace=ws, name="explore-runs")
      
    2. Start een uitvoering en het bijbehorende logboekregistratieproces met de start_logging() methode.

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • De status van een uitvoering bewaken

    VAN TOEPASSING OP: Python SDK azureml v1

    • Haal de status van een uitvoering op met de get_status() methode.

      print(notebook_run.get_status())
      
    • Gebruik get_details() de methode om de uitvoerings-id, uitvoeringstijd en andere details over de uitvoering op te halen.

      print(notebook_run.get_details())
      
    • Wanneer de uitvoering is voltooid, gebruikt u de complete() methode om deze als voltooid te markeren.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Als u het ontwerppatroon van with...as Python gebruikt, wordt de uitvoering automatisch gemarkeerd als voltooid wanneer de uitvoering buiten het bereik valt. U hoeft de uitvoering niet handmatig te markeren als voltooid.

      with exp.start_logging() as notebook_run:
          notebook_run.log(name="message", value="Hello from run!")
          print(notebook_run.get_status())
      
      print(notebook_run.get_status())
      

Uitvoeringen taggen en zoeken

In Azure Machine Learning kunt u eigenschappen en tags gebruiken om uw uitvoeringen te organiseren en er query's op uit te voeren voor belangrijke informatie.

  • Eigenschappen en tags toevoegen

    VAN TOEPASSING OP: Python SDK azureml v1

    Als u doorzoekbare metagegevens aan uw uitvoeringen wilt toevoegen, gebruikt u de add_properties() methode. Met de volgende code wordt de "author" eigenschap bijvoorbeeld toegevoegd aan de uitvoering:

    local_run.add_properties({"author":"azureml-user"})
    print(local_run.get_properties())
    

    Eigenschappen zijn onveranderbaar, dus ze maken een permanente record voor controledoeleinden. Het volgende codevoorbeeld resulteert in een fout, omdat we al als eigenschapswaarde "author" in de voorgaande code hebben toegevoegd"azureml-user":

    try:
        local_run.add_properties({"author":"different-user"})
    except Exception as e:
        print(e)
    

    In tegenstelling tot eigenschappen zijn tags veranderlijk. Gebruik de tag() methode om doorzoekbare en zinvolle informatie toe te voegen voor consumenten van uw experiment.

    local_run.tag("quality", "great run")
    print(local_run.get_tags())
    
    local_run.tag("quality", "fantastic run")
    print(local_run.get_tags())
    

    U kunt ook eenvoudige tekenreekstags toevoegen. Wanneer deze tags als sleutels in de tagwoordenlijst worden weergegeven, hebben ze een waarde van None.

    local_run.tag("worth another look")
    print(local_run.get_tags())
    
  • Query-eigenschappen en -tags

    U kunt query's uitvoeren in een experiment om een lijst met uitvoeringen te retourneren die overeenkomen met specifieke eigenschappen en tags.

    VAN TOEPASSING OP: Python SDK azureml v1

    list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"}))
    list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
    

Uitvoeringen annuleren of mislukken

Als u een fout ziet of als de uitvoering te lang duurt, kunt u de uitvoering annuleren.

VAN TOEPASSING OP: Python SDK azureml v1

Als u een uitvoering wilt annuleren met behulp van de SDK, gebruikt u de cancel() methode:

src = ScriptRunConfig(source_directory='.', script='hello_with_delay.py')
local_run = exp.submit(src)
print(local_run.get_status())

local_run.cancel()
print(local_run.get_status())

Als de uitvoering is voltooid, maar deze een fout bevat (bijvoorbeeld het onjuiste trainingsscript is gebruikt), kunt u de fail() methode gebruiken om deze als mislukt te markeren.

local_run = exp.submit(src)
local_run.fail()
print(local_run.get_status())

Onderliggende uitvoeringen maken

VAN TOEPASSING OP: Python SDK azureml v1

Maak onderliggende uitvoeringen om gerelateerde uitvoeringen te groeperen, zoals voor verschillende iteraties voor hyperparameters.

Notitie

Onderliggende uitvoeringen kunnen alleen worden gemaakt met behulp van de SDK.

In dit codevoorbeeld wordt het hello_with_children.py script gebruikt om een batch van vijf onderliggende uitvoeringen te maken vanuit een ingediende uitvoering met behulp van de child_run() methode:

!more hello_with_children.py
src = ScriptRunConfig(source_directory='.', script='hello_with_children.py')

local_run = exp.submit(src)
local_run.wait_for_completion(show_output=True)
print(local_run.get_status())

with exp.start_logging() as parent_run:
    for c,count in enumerate(range(5)):
        with parent_run.child_run() as child:
            child.log(name="Hello from child run", value=c)

Notitie

Wanneer ze buiten het bereik komen, worden onderliggende uitvoeringen automatisch gemarkeerd als voltooid.

Gebruik de create_children() methode om efficiënt veel onderliggende uitvoeringen te maken. Omdat elk maken resulteert in een netwerkoproep, is het maken van een batch met uitvoeringen efficiënter dan het maken ervan één voor één.

Onderliggende uitvoeringen verzenden

Onderliggende uitvoeringen kunnen ook worden verzonden vanaf een bovenliggende uitvoering. Hiermee kunt u hiërarchieën maken van bovenliggende en onderliggende uitvoeringen. U kunt geen bovenliggende onderliggende uitvoering maken: zelfs als de bovenliggende uitvoering niets doet dan onderliggende uitvoeringen starten, is het nog steeds nodig om de hiërarchie te maken. De statussen van alle uitvoeringen zijn onafhankelijk: een bovenliggend item kan de "Completed" status Geslaagd hebben, zelfs als een of meer onderliggende uitvoeringen zijn geannuleerd of mislukt.

Mogelijk wilt u dat uw kind wordt uitgevoerd met een andere uitvoeringsconfiguratie dan de bovenliggende uitvoering. U kunt bijvoorbeeld een minder krachtige, OP CPU gebaseerde configuratie gebruiken voor het bovenliggende item, terwijl u gpu-configuraties gebruikt voor uw kinderen. Een andere veelvoorkomende wens is om elk kind verschillende argumenten en gegevens door te geven. Als u een onderliggende uitvoering wilt aanpassen, maakt u een ScriptRunConfig object voor de onderliggende uitvoering.

Belangrijk

Als u een onderliggende uitvoering wilt verzenden vanaf een bovenliggende uitvoering op een externe berekening, moet u zich eerst aanmelden bij de werkruimte in de bovenliggende uitvoeringscode. Het uitvoeringscontextobject in een externe uitvoering heeft standaard geen referenties voor het verzenden van onderliggende uitvoeringen. Gebruik een service-principal of beheerde identiteitsreferenties om u aan te melden. Zie Verificatie instellen voor meer informatie over verificatie.

De onderstaande code:

  • Hiermee haalt u een rekenresource op met de naam "gpu-cluster" uit de werkruimte ws
  • Hiermee worden verschillende argumentwaarden herhaald die moeten worden doorgegeven aan de onderliggende ScriptRunConfig objecten
  • Hiermee maakt en verzendt u een nieuwe onderliggende uitvoering met behulp van de aangepaste rekenresource en het argument
  • Blokken totdat alle onderliggende uitvoeringen zijn voltooid
# parent.py
# This script controls the launching of child scripts
from azureml.core import Run, ScriptRunConfig

compute_target = ws.compute_targets["gpu-cluster"]

run = Run.get_context()

child_args = ['Apple', 'Banana', 'Orange']
for arg in child_args: 
    run.log('Status', f'Launching {arg}')
    child_config = ScriptRunConfig(source_directory=".", script='child.py', arguments=['--fruit', arg], compute_target=compute_target)
    # Starts the run asynchronously
    run.submit_child(child_config)

# Experiment will "complete" successfully at this point. 
# Instead of returning immediately, block until child runs complete

for child in run.get_children():
    child.wait_for_completion()

Als u veel onderliggende uitvoeringen met identieke configuraties, argumenten en invoer efficiënt wilt maken, gebruikt u de create_children() methode. Omdat elk maken resulteert in een netwerkoproep, is het maken van een batch met uitvoeringen efficiënter dan het maken ervan één voor één.

In een onderliggende uitvoering kunt u de bovenliggende uitvoerings-id bekijken:

## In child run script
child_run = Run.get_context()
child_run.parent.id

Onderliggende query's uitvoeren

Als u een query wilt uitvoeren op de onderliggende uitvoeringen van een specifiek bovenliggend item, gebruikt u de get_children() methode. Met recursive = True het argument kunt u een query uitvoeren op een geneste boom van kinderen en kleinkinderen.

print(parent_run.get_children())

Aanmelden bij bovenliggende of hoofduitvoering

U kunt het Run.parent veld gebruiken om toegang te krijgen tot de uitvoering waarmee de huidige onderliggende uitvoering is gestart. Een veelvoorkomende use-case voor het gebruik Run.parent is het combineren van logboekresultaten op één plaats. Onderliggende uitvoeringen worden asynchroon uitgevoerd en er is geen garantie voor volgorde of synchronisatie buiten de mogelijkheid van het bovenliggende item om te wachten totdat de onderliggende uitvoeringen zijn voltooid.

# in child (or even grandchild) run

def root_run(self : Run) -> Run :
    if self.parent is None : 
        return self
    return root_run(self.parent)

current_child_run = Run.get_context()
root_run(current_child_run).log("MyMetric", f"Data from child run {current_child_run.id}")

De uitvoeringsstatus per e-mailmelding bewaken

  1. Selecteer in Azure Portal in de linkernavigatiebalk het tabblad Monitor .

  2. Selecteer Diagnostische instellingen en selecteer vervolgens + Diagnostische instelling toevoegen.

    Schermopname van diagnostische instellingen voor e-mailmelding.

  3. In de diagnostische instelling,

    1. selecteer onder de categoriedetails de AmlRunStatusChangedEvent.
    2. Selecteer in de doeldetails de werkruimte Verzenden naar Log Analytics en geef de werkruimte Abonnement en Log Analytics op.

    Notitie

    De Azure Log Analytics-werkruimte is een ander type Azure-resource dan de Werkruimte van de Azure Machine Learning-service. Als er geen opties in die lijst staan, kunt u een Log Analytics-werkruimte maken.

    Schermopname van het configureren van de e-mailmelding.

  4. Voeg op het tabblad Logboeken een nieuwe waarschuwingsregel toe.

    Schermafbeelding van de nieuwe waarschuwingsregel.

  5. Lees hoe u logboekwaarschuwingen maakt en beheert met behulp van Azure Monitor.

Voorbeeldnotebooks

De volgende notebooks laten de concepten in dit artikel zien:

Volgende stappen