Delen via


De 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 bieden verschillende methoden voor het bewaken, organiseren en bijhouden van uw uitvoeringen voor training en experimenten. Uw ML-uitvoeringsgeschiedenis is een belangrijk onderdeel van een verklaarbaar 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 de uitvoering bewaken.
  • Uitvoeringen taggen en zoeken.
  • Voer de zoekactie uit op 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 bewakingsmodellen die zijn geïmplementeerd als webservices, raadpleegt u Modelgegevens verzamelen en Bewaken met Application Insights.

Vereisten

U hebt de volgende items nodig:

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 uit 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 de methode om de uitvoerings-id, uitvoeringstijd en andere details over de uitvoering op te get_details() 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 als voltooid te markeren.

      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 ordenen en er query's op uit te voeren voor belangrijke informatie.

  • Eigenschappen en tags toevoegen

    VAN TOEPASSING OP:Python SDK azureml v1

    Gebruik de add_properties() methode om doorzoekbare metagegevens toe te voegen aan uw uitvoeringen. Met de volgende code wordt bijvoorbeeld de "author" eigenschap 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 de "author" eigenschapswaarde 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 gebruikers 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 de waarde None.

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

    U kunt een query uitvoeren binnen 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 het te lang duurt voordat de uitvoering is voltooid, 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 dat het onjuiste trainingsscript is gebruikt), kunt u de methode gebruiken om deze fail() 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, bijvoorbeeld voor verschillende iteraties voor het afstemmen van 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 verzonden 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 vallen, worden onderliggende uitvoeringen automatisch gemarkeerd als voltooid.

Gebruik de create_children() methode om veel onderliggende uitvoeringen efficiënt te maken. Omdat elke creatie resulteert in een netwerkoproep, is het maken van een batch uitvoeringen efficiënter dan ze een voor een te maken.

Onderliggende uitvoeringen verzenden

Onderliggende uitvoeringen kunnen ook worden verzonden vanuit 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 alleen maar onderliggende uitvoeringen start, 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 een andere uitvoeringsconfiguratie gebruikt 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 veel voorkomende 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 van een bovenliggende uitvoering op een externe berekening wilt verzenden, moet u zich eerst aanmelden bij de werkruimte in de bovenliggende uitvoeringscode. Standaard heeft het uitvoeringscontextobject in een externe uitvoering geen referenties voor het verzenden van onderliggende uitvoeringen. Gebruik een service-principal of referenties voor beheerde identiteit om u aan te melden. Zie Verificatie instellen voor meer informatie over verificatie.

De onderstaande code:

  • Haalt een rekenresource met de naam "gpu-cluster" op uit de werkruimte ws
  • Itereert verschillende argumentwaarden die moeten worden doorgegeven aan de onderliggende ScriptRunConfig objecten
  • Maakt en verzendt een nieuwe onderliggende uitvoering met behulp van de aangepaste rekenresource en het argument
  • Blokkeert 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()

Gebruik de create_children() methode om veel onderliggende uitvoeringen met identieke configuraties, argumenten en invoer efficiënt te maken. Omdat elke creatie resulteert in een netwerkoproep, is het maken van een batch uitvoeringen efficiënter dan ze een voor een te maken.

Binnen een onderliggende uitvoering kunt u de bovenliggende uitvoerings-id weergeven:

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

Onderliggende uitvoeringen van query's uitvoeren

Gebruik de methode om een query uit te voeren op de get_children() onderliggende uitvoeringen van een specifiek bovenliggend item. 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 voor toegang tot de uitvoering waarmee de huidige onderliggende uitvoering is gestart. Een veelvoorkomende use-case voor 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 tot 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 bewaken via e-mailmelding

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

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

    Schermopname van diagnostische instellingen voor e-mailmeldingen.

  3. In de diagnostische instelling,

    1. selecteer onder Categoriedetails de optie 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 Azure Machine Learning Service-werkruimte. Als deze lijst geen opties bevat, 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. Meer informatie over het maken en beheren van logboekwaarschuwingen met behulp van Azure Monitor.

Voorbeeldnotebooks

De volgende notebooks laten de concepten in dit artikel zien:

Volgende stappen