De run history starten, bewaken en bijhouden

De Azure Machine Learning-SDKvoor Python, Machine Learning CLIen Azure Machine Learning Studio bieden verschillende methoden om uw runs voor training en experimenten te bewaken, te organiseren en bij te houden. Uw ML-run history is een belangrijk onderdeel van een uitlegbaar en herhaalbaar ML ontwikkelingsproces.

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

  • Prestaties van uitvoering bewaken.
  • Weergavenaam van run toevoegen.
  • Maak een aangepaste weergave.
  • Voeg een beschrijving van de run toe.
  • Tag en zoek runs.
  • Voer een zoekopdracht uit in de geschiedenis van uw run.
  • Annuleren of mislukken.
  • Onderliggende runs maken.
  • Controleer de status van de run via een e-mailmelding.

Tip

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

Vereisten

U hebt de volgende items nodig:

Prestaties van uitvoering bewaken

  • Een run en het logboekregistratieproces starten

    1. Stel uw experiment in door de klassen Werkruimte, Experiment, Uitvoerenen 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 run en het logboekregistratieproces met de start_logging() methode .

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

    • Haal de status van een run 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 run is voltooid, gebruikt u de complete() methode om deze te markeren als voltooid.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Als u het ontwerppatroon van Python gebruikt, wordt de uitvoering automatisch als voltooid markeren with...as wanneer de uitvoering buiten het bereik valt. U hoeft de run 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())
      

Weergavenaam uitvoeren

De weergavenaam van de run is een optionele en aanpasbare naam die u voor de run kunt verstrekken. De weergavenaam van de run bewerken:

  1. Navigeer naar de lijst met runs.

  2. Selecteer de run om de weergavenaam te bewerken op de pagina met details van de run.

  3. Selecteer de knop Bewerken om de weergavenaam van de run te bewerken.

Schermopname: de weergavenaam bewerken

Aangepaste weergave

Uw runs weergeven in de studio:

  1. Navigeer naar het tabblad Experimenten.

  2. Selecteer Alle experimenten om alle runs in een experiment te bekijken of selecteer Alle runs om alle runs te bekijken die in de werkruimte zijn ingediend.

Op de pagina Alle runs kunt u de lijst met runs filteren op tags, experimenten, rekendoel en meer om uw werk beter te organiseren en het bereik ervan te verbeteren.

  1. Breng aanpassingen aan op de pagina door runs te selecteren om te vergelijken, grafieken toe te voegen of filters toe te passen. Deze wijzigingen kunnen worden opgeslagen als een aangepaste weergave, zodat u eenvoudig kunt terugkeren naar uw werk. Gebruikers met werkruimtemachtigingen kunnen de aangepaste weergave bewerken of weergeven. Deel ook de aangepaste weergave met teamleden voor verbeterde samenwerking door Weergave delen te selecteren.

  2. Als u de runlogboeken wilt weergeven, selecteert u een specifieke run en op het tabblad Uitvoer en logboeken vindt u diagnostische logboeken en foutlogboeken voor uw run.

Schermopname: een aangepaste weergave maken

Beschrijving van de run

Een beschrijving van de run kan worden toegevoegd aan een run om meer context en informatie te bieden voor de run. U kunt ook zoeken op deze beschrijvingen in de lijst met runs en de beschrijving van de run toevoegen als een kolom in de lijst met runs.

Navigeer naar de pagina Details uitvoeren voor de run en selecteer het bewerkings- of potloodpictogram om beschrijvingen voor de run toe te voegen, te bewerken of te verwijderen. Als u de wijzigingen in de lijst met runs wilt bewaren, moet u de wijzigingen in uw bestaande aangepaste weergave of een nieuwe aangepaste weergave opslaan. De Markdown-indeling wordt ondersteund voor run-beschrijvingen, waardoor afbeeldingen kunnen worden ingesloten en deep linking zoals hieronder wordt weergegeven.

Schermopname: een beschrijving van de run maken

Runs taggen en zoeken

In Azure Machine Learning kunt u eigenschappen en tags gebruiken om uw runs te organiseren en op te vragen voor belangrijke informatie.

  • Eigenschappen en tags toevoegen

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

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

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

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

    In tegenstelling tot eigenschappen zijn tags veranderlijk. Gebruik de methode om doorzoekbare en zinvolle informatie toe te voegen voor gebruikers van uw tag() 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 in de tagwoordenlijst als sleutels worden weergegeven, hebben ze de waarde None .

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

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

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

Runs annuleren of mislukken

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

Als u een run 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 run is uitgevoerd, maar deze een fout bevat (bijvoorbeeld omdat het onjuiste trainingsscript is gebruikt), kunt u de methode gebruiken om deze als fail() mislukt te markeren.

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

Onderliggende runs maken

Onderliggende runs maken om gerelateerde runs te groeperen, zoals voor verschillende hyperparameter-afstemmings iteraties.

Notitie

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

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

!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 onderliggende runs buiten het bereik vallen, worden ze automatisch gemarkeerd als voltooid.

Als u veel onderliggende runs efficiënt wilt maken, gebruikt u de create_children() methode . Omdat elke aanroep resulteert in een netwerk-aanroep, is het efficiënter om een batch met runs te maken dan ze een voor een te maken.

Onderliggende runs verzenden

Onderliggende runs kunnen ook worden verzonden vanuit een bovenliggende run. Hiermee kunt u hiërarchieën van bovenliggende en onderliggende runs maken. U kunt geen onderliggende run zonder bovenliggende gegevens maken: zelfs als de bovenliggende run alleen onderliggende runs start, is het nog steeds nodig om de hiërarchie te maken. De statussen van alle runs zijn onafhankelijk: een bovenliggend kan de status Geslaagd hebben, zelfs als een of meer onderliggende runs "Completed" zijn geannuleerd of mislukt.

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

Belangrijk

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

De onderstaande code:

  • Haalt een rekenresource met de "gpu-cluster" naam op uit de werkruimte ws
  • Door itereert verschillende argumentwaarden die moeten worden doorgegeven aan de objecten van de ScriptRunConfig kinderen
  • Hiermee maakt en verstuurt u een nieuwe onderliggende run met behulp van de aangepaste rekenresource en het aangepaste argument
  • Blokkeert totdat alle onderliggende runs 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 elke aanroep resulteert in een netwerk-aanroep, is het efficiënter om een batch met runs te maken dan ze een voor een te maken.

Binnen een onderliggende run kunt u de bovenliggende run-id weergeven:

## 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 runs van een specifiek bovenliggend bovenliggend, gebruikt u de get_children() methode . Met recursive = True het argument kunt u een query uitvoeren op een geneste structuur van kinderen en grootsgeplaatst.

print(parent_run.get_children())

Aanmelden bij bovenliggende of hoofduit voeren

U kunt het veld gebruiken Run.parent om toegang te krijgen tot de run die de huidige onderliggende run heeft gestart. Een veelvoorkomende use-case voor het Run.parent gebruik van is het combineren van logboekresultaten op één plek. Onderliggende uitvoeringen worden asynchroon uitgevoerd en er is geen garantie voor volgorde of synchronisatie, behalve de mogelijkheid van de bovenliggende taak 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 status van de run controleren via e-mailmelding

  1. Selecteer in Azure Portalin de linkernavigatiebalk het tabblad Controleren.

  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 het abonnement en de Log Analytics-werkruimte op.

    Notitie

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

    Waar kunt u een e-mailmelding opslaan?

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

    Nieuwe waarschuwingsregel

  5. Zie logboekwaarschuwingen maken en beheren met behulp van Azure Monitor.

Voorbeeldnotebooks

In de volgende notebooks worden de concepten in dit artikel gedemonstreerd:

Volgende stappen