Dela via


Starta, övervaka och spåra körningshistorik

GÄLLER FÖR: Python SDK azureml v1

GÄLLER FÖR: Azure CLI ml-tillägget v1

Azure Mašinsko učenje SDK för Python v1 och Mašinsko učenje CLI tillhandahåller olika metoder för att övervaka, organisera och spåra dina körningar för träning och experimentering. Din ML-körningshistorik är en viktig del av en förklarande och repeterbar ML-utvecklingsprocess.

Dricks

Information om hur du använder studio finns i Spåra, övervaka och analysera körningar med studio.

Om du använder Azure Mašinsko učenje SDK v2 kan du läsa följande artiklar:

Den här artikeln visar hur du utför följande uppgifter:

  • Övervaka körningsprestanda.
  • Tagga och hitta körningar.
  • Kör sökningen över körningshistoriken.
  • Avbryt eller misslyckas.
  • Skapa underordnade körningar.
  • Övervaka körningsstatusen via e-postavisering.

Dricks

Om du letar efter information om övervakning av Azure Mašinsko učenje-tjänsten och associerade Azure-tjänster kan du läsa Övervaka Azure Mašinsko učenje. Om du letar efter information om övervakningsmodeller som distribuerats som webbtjänster kan du läsa Samla in modelldata och Övervaka med Application Insights.

Förutsättningar

Du behöver följande:

Övervaka körningsprestanda

  • Starta en körning och dess loggningsprocess

    GÄLLER FÖR: Python SDK azureml v1

    1. Konfigurera experimentet genom att importera klasserna Workspace, Experiment, Run och ScriptRunConfig från azureml.core-paketet .

      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. Starta en körning och dess loggningsprocess med start_logging() metoden .

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • Övervaka status för en körning

    GÄLLER FÖR: Python SDK azureml v1

    • Hämta status för en körning med get_status() -metoden.

      print(notebook_run.get_status())
      
    • Använd metoden för att hämta körnings-ID, körningstid och annan information om körningen get_details() .

      print(notebook_run.get_details())
      
    • När körningen complete() har slutförts använder du metoden för att markera den som slutförd.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Om du använder Pythons designmönster markeras with...as själva körningen automatiskt som slutförd när körningen är utanför omfånget. Du behöver inte markera körningen som slutförd manuellt.

      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())
      

Tagga och hitta körningar

I Azure Mašinsko učenje kan du använda egenskaper och taggar för att organisera och fråga efter viktig information.

  • Lägga till egenskaper och taggar

    GÄLLER FÖR: Python SDK azureml v1

    Om du vill lägga till sökbara metadata i dina körningar använder du add_properties() metoden . Följande kod lägger "author" till egenskapen till körningen:

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

    Egenskaper är oföränderliga, så de skapar en permanent post i granskningssyfte. Följande kodexempel resulterar i ett fel eftersom vi redan har lagt till "azureml-user" som "author" egenskapsvärde i föregående kod:

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

    Till skillnad från egenskaper är taggar föränderliga. Om du vill lägga till sökbar och meningsfull information för användarna av experimentet tag() använder du metoden.

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

    Du kan också lägga till enkla strängtaggar. När dessa taggar visas i taggordlistan som nycklar har de värdet None.

    local_run.tag("worth another look")
    print(local_run.get_tags())
    
  • Frågeegenskaper och taggar

    Du kan köra frågor mot körningar i ett experiment för att returnera en lista över körningar som matchar specifika egenskaper och taggar.

    GÄLLER FÖR: 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"))
    

Avbryt eller misslyckas

Om du märker ett misstag eller om körningen tar för lång tid att slutföra kan du avbryta körningen.

GÄLLER FÖR: Python SDK azureml v1

Om du vill avbryta en körning med hjälp av SDK använder du cancel() metoden:

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())

Om körningen är klar, men den innehåller ett fel (till exempel det felaktiga träningsskriptet användes), kan du använda metoden för att markera den fail() som misslyckad.

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

Skapa underordnade körningar

GÄLLER FÖR: Python SDK azureml v1

Skapa underordnade körningar för att gruppera relaterade körningar, till exempel för olika iterationer med hyperparameterjustering.

Kommentar

Underordnade körningar kan bara skapas med hjälp av SDK:et.

I det här kodexemplet används skriptet hello_with_children.py för att skapa en batch med fem underordnade körningar inifrån en skickad körning med hjälp child_run() av metoden:

!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)

Kommentar

När de flyttas från omfånget markeras underordnade körningar automatiskt som slutförda.

Använd metoden för create_children() att skapa många underordnade körningar effektivt. Eftersom varje skapande resulterar i ett nätverksanrop är det mer effektivt att skapa en batch med körningar än att skapa dem en i taget.

Skicka underordnade körningar

Underordnade körningar kan också skickas från en överordnad körning. På så sätt kan du skapa hierarkier med överordnade och underordnade körningar. Du kan inte skapa en överordnad underordnad körning: även om den överordnade körningen inte gör något annat än att starta underordnade körningar är det fortfarande nödvändigt att skapa hierarkin. Statusen för alla körningar är oberoende: en överordnad "Completed" kan vara i ett lyckat tillstånd även om en eller flera underordnade körningar avbröts eller misslyckades.

Du kanske vill att dina underordnade körningar ska använda en annan körningskonfiguration än den överordnade körningen. Du kan till exempel använda en mindre kraftfull, CPU-baserad konfiguration för den överordnade konfigurationen när du använder GPU-baserade konfigurationer för dina underordnade. En annan vanlig önskan är att skicka olika argument och data för varje barn. Om du vill anpassa en underordnad körning skapar du ett ScriptRunConfig objekt för den underordnade körningen.

Viktigt!

Om du vill skicka en underordnad körning från en överordnad körning på en fjärrberäkning måste du logga in på arbetsytan i den överordnade körningskoden först. Som standard har körningskontextobjektet i en fjärrkörning inte autentiseringsuppgifter för att skicka underordnade körningar. Använd autentiseringsuppgifterna för tjänstens huvudnamn eller hanterade identitet för att logga in. Mer information om autentisering finns i Konfigurera autentisering.

Koden nedan:

  • Hämtar en beräkningsresurs med namnet "gpu-cluster" från arbetsytan ws
  • Itererar över olika argumentvärden som ska skickas till underordnade ScriptRunConfig objekt
  • Skapar och skickar en ny underordnad körning med hjälp av den anpassade beräkningsresursen och argumentet
  • Blockerar tills alla underordnade körningar har slutförts
# 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()

Om du vill skapa många underordnade körningar med identiska konfigurationer, argument och indata effektivt använder du create_children() metoden. Eftersom varje skapande resulterar i ett nätverksanrop är det mer effektivt att skapa en batch med körningar än att skapa dem en i taget.

Inom en underordnad körning kan du visa det överordnade körnings-ID:t:

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

Fråga underordnade körningar

Om du vill köra frågor mot underordnade körningar av en viss överordnad get_children() , använder du metoden . Med recursive = True argumentet kan du köra frågor mot ett kapslat träd med barn och barnbarn.

print(parent_run.get_children())

Logga till överordnad eller rotkörning

Du kan använda fältet Run.parent för att komma åt körningen som startade den aktuella underordnade körningen. Ett vanligt användningsfall för användning Run.parent är att kombinera loggresultat på en enda plats. Underordnade körningar körs asynkront och det finns ingen garanti för ordning eller synkronisering utöver möjligheten för den överordnade att vänta tills dess underordnade körningar har slutförts.

# 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}")

Övervaka körningsstatusen via e-postavisering

  1. I det vänstra navigeringsfältet i Azure-portalen väljer du fliken Övervaka .

  2. Välj Diagnostikinställningar och välj sedan + Lägg till diagnostikinställning.

    Skärmbild av diagnostikinställningar för e-postavisering.

  3. I diagnostikinställningen

    1. under Kategoriinformation väljer du AmlRunStatusChangedEvent.
    2. I målinformationen väljer du arbetsytan Skicka till Log Analytics och anger arbetsytan Prenumeration och Log Analytics.

    Kommentar

    Azure Log Analytics-arbetsytan är en annan typ av Azure-resurs än Azure Mašinsko učenje-tjänstens arbetsyta. Om det inte finns några alternativ i listan kan du skapa en Log Analytics-arbetsyta.

    Skärmbild av hur du konfigurerar e-postmeddelandet.

  4. På fliken Loggar lägger du till en ny aviseringsregel.

    Skärmbild av den nya aviseringsregeln.

  5. Se hur du skapar och hanterar loggaviseringar med Hjälp av Azure Monitor.

Exempelnotebook-filer

Följande notebook-filer visar begreppen i den här artikeln:

  • Mer information om loggnings-API:er finns i loggnings-API-notebook-filen.

  • Mer information om hur du hanterar körningar med Azure Mašinsko učenje SDK finns i notebook-filen hantera körningar.

Nästa steg