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:
Een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.
De Azure Machine Learning SDK voor Python (versie 1.0.21 of hoger). Zie De SDK installeren of bijwerken als u de nieuwste versie van de SDK wilt installerenof bijwerken.
Als u uw versie van de Azure Machine Learning SDK wilt controleren, gebruikt u de volgende code:
print(azureml.core.VERSION)
Prestaties van uitvoering bewaken
Een run en het logboekregistratieproces starten
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")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...aswanneer 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:
Navigeer naar de lijst met runs.
Selecteer de run om de weergavenaam te bewerken op de pagina met details van de run.
Selecteer de knop Bewerken om de weergavenaam van de run te bewerken.
Aangepaste weergave
Uw runs weergeven in de studio:
Navigeer naar het tabblad Experimenten.
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.
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.
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.
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.
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.
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 werkruimtews - Door itereert verschillende argumentwaarden die moeten worden doorgegeven aan de objecten van de
ScriptRunConfigkinderen - 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
Selecteer in Azure Portalin de linkernavigatiebalk het tabblad Controleren.
Selecteer Diagnostische instellingen en selecteer vervolgens + Diagnostische instelling toevoegen.

In de diagnostische instelling
- selecteer onder Categoriedetails de optie AmlRunStatusChangedEvent.
- 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.

Voeg op het tabblad Logboeken een nieuwe waarschuwingsregel toe.

Zie logboekwaarschuwingen maken en beheren met behulp van Azure Monitor.
Voorbeeldnotebooks
In de volgende notebooks worden de concepten in dit artikel gedemonstreerd:
Zie het logboekregistratie-API-notebookvoor meer informatie over de API's voor logboekregistratie.
Zie voor meer informatie over het beheren van runs Azure Machine Learning SDK, het notebook voor het beheren van runs.
Volgende stappen
- Zie Metrische logboekgegevens tijdens trainings runs voor meer informatie over het logboeken van metrische gegevens voor uw experimenten.
- Zie Bewaking van resources en logboeken van Azure Machine Learning voor meer informatie Azure Machine Learning.