Spuštění, monitorování a sledování historie spuštění

PLATÍ PRO: Python SDK azureml v1

PLATÍ PRO: Rozšíření Azure CLI ml v1

Sada Azure Machine Learning SDK pro Python v1 a Rozhraní příkazového řádku služby Machine Learning poskytuje různé metody pro monitorování, uspořádání a sledování spuštění pro trénování a experimentování. Historie spuštění ML je důležitou součástí vysvětlitelného a opakovatelného procesu vývoje ML.

Tip

Informace o používání studia najdete v tématu Sledování, monitorování a analýza spuštění pomocí studia.

Pokud používáte sadu Azure Machine Learning SDK v2, projděte si následující články:

V tomto článku se dozvíte, jak provádět následující úlohy:

  • Monitorování výkonu spuštění
  • Označte a vyhledejte spuštění.
  • Spusťte vyhledávání v historii spuštění.
  • Spuštění zrušit nebo selhat
  • Vytvoření podřízených spuštění
  • Sledujte stav spuštění e-mailem.

Tip

Pokud hledáte informace o monitorování služby Azure Machine Learning a přidružených služeb Azure, přečtěte si téma Monitorování služby Azure Machine Learning. Pokud hledáte informace o modelech monitorování nasazených jako webové služby, přečtěte si téma Shromažďování dat modelu a monitorování pomocí Application Insights.

Požadavky

Budete potřebovat následující položky:

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.

  • Pracovní prostor Azure Machine Learning.

  • Sada Azure Machine Learning SDK pro Python (verze 1.0.21 nebo novější) Pokud chcete nainstalovat nebo aktualizovat nejnovější verzi sady SDK, přečtěte si téma Instalace nebo aktualizace sady SDK.

    Pokud chcete zkontrolovat verzi sady Azure Machine Learning SDK, použijte následující kód:

    print(azureml.core.VERSION)
    
  • Rozšíření Azure CLI a rozhraní příkazového řádku pro Azure Machine Learning

    Důležité

    Některé příkazy Azure CLI v tomto článku používají azure-cli-mlrozšíření (nebo v1) pro Azure Machine Learning. Podpora rozšíření v1 skončí 30. září 2025. Do tohoto data budete moct nainstalovat a používat rozšíření v1.

    Doporučujeme přejít na mlrozšíření (nebo v2) před 30. zářím 2025. Další informace o rozšíření v2 najdete v tématu Rozšíření Azure ML CLI a Python SDK v2.

Monitorování výkonu spuštění

  • Spuštění a jeho proces protokolování

    PLATÍ PRO: Python SDK azureml v1

    1. Nastavte experiment importem tříd Workspace, Experiment, Run a ScriptRunConfig z balíčku 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. Spusťte spuštění a jeho proces protokolování pomocí start_logging() metody.

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • Monitorování stavu spuštění

    PLATÍ PRO: Python SDK azureml v1

    • Získejte stav spuštění pomocí get_status() metody.

      print(notebook_run.get_status())
      
    • K získání ID spuštění, doby provádění a dalších podrobností o spuštění použijte metodu get_details() .

      print(notebook_run.get_details())
      
    • Po úspěšném dokončení spuštění ji označte complete() jako dokončenou pomocí metody.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Pokud použijete vzor návrhu with...as Pythonu, spuštění se po vypršení rozsahu automaticky označí jako dokončené. Spuštění nemusíte ručně označit jako dokončené.

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

Označování a hledání spuštění

Ve službě Azure Machine Learning můžete pomocí vlastností a značek uspořádat a dotazovat spuštění na důležité informace.

  • Přidání vlastností a značek

    PLATÍ PRO: Python SDK azureml v1

    Pokud chcete do spuštění přidat prohledávatelná metadata, použijte metodu add_properties() . Například následující kód přidá "author" vlastnost do spuštění:

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

    Vlastnosti jsou neměnné, takže vytvoří trvalý záznam pro účely auditování. Následující příklad kódu způsobí chybu, protože jsme již přidali "azureml-user" jako "author" hodnotu vlastnosti v předchozím kódu:

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

    Na rozdíl od vlastností jsou značky proměnlivé. Pokud chcete přidat prohledávatelné a smysluplné informace pro uživatele experimentu, použijte metodu tag() .

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

    Můžete také přidat jednoduché značky řetězců. Když se tyto značky zobrazí ve slovníku značek jako klíče, mají hodnotu None.

    local_run.tag("worth another look")
    print(local_run.get_tags())
    
  • Vlastnosti a značky dotazu

    Spuštěním dotazu v rámci experimentu můžete vrátit seznam spuštění, která odpovídají konkrétním vlastnostem a značek.

    PLATÍ PRO: 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"))
    

Zrušení nebo selhání spuštění

Pokud si všimnete chyby nebo pokud dokončení běhu trvá příliš dlouho, můžete spuštění zrušit.

PLATÍ PRO: Python SDK azureml v1

Pokud chcete zrušit spuštění pomocí sady SDK, použijte metodu cancel() :

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

Pokud se spuštění dokončí, ale obsahuje chybu (například byl použit nesprávný trénovací skript), můžete ji pomocí fail() metody označit jako neúspěšnou.

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

Vytvoření podřízených spuštění

PLATÍ PRO: Python SDK azureml v1

Vytvořte podřízená spuštění, která seskupí související spuštění, například pro různé iterace ladění hyperparametrů.

Poznámka:

Podřízená spuštění je možné vytvořit pouze pomocí sady SDK.

Tento příklad kódu používá hello_with_children.py skript k vytvoření dávky pěti podřízených spuštění z odeslaného spuštění pomocí child_run() metody:

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

Poznámka:

Když se přesunou mimo rozsah, podřízená spuštění se automaticky označí jako dokončená.

Pokud chcete efektivně vytvořit mnoho podřízených spuštění, použijte metodu create_children() . Vzhledem k tomu, že každé vytvoření vede k volání sítě, je vytvoření dávky spuštění efektivnější než jejich vytvoření po druhém.

Odesílání podřízených spuštění

Podřízená spuštění je možné odeslat také z nadřazeného spuštění. Díky tomu můžete vytvářet hierarchie nadřazených a podřízených spuštění. Nelze vytvořit podřízené spuštění bez nadřazeného objektu: i když nadřazené spuštění nedělá nic, ale spouští podřízené běhy, je stále nutné vytvořit hierarchii. Stavy všech spuštění jsou nezávislé: Nadřazený objekt může být v "Completed" úspěšném stavu, i když byla zrušena nebo selhala jedna nebo více podřízených spuštění.

Možná budete chtít, aby spuštění vašeho dítěte používalo jinou konfiguraci spuštění než nadřazené spuštění. Pro nadřazený objekt můžete například použít méně výkonnou konfiguraci založenou na procesoru při použití konfigurací založených na GPU pro vaše podřízené objekty. Dalším běžným přáním je předání jednotlivých podřízených argumentů a dat. Chcete-li přizpůsobit podřízené spuštění, vytvořte ScriptRunConfig objekt pro podřízené spuštění.

Důležité

Pokud chcete odeslat podřízené spuštění z nadřazeného spuštění na vzdáleném výpočetním objektu, musíte se nejdřív přihlásit k pracovnímu prostoru v nadřazeného kódu spuštění. Ve výchozím nastavení kontextový objekt spuštění ve vzdáleném spuštění nemá přihlašovací údaje pro odesílání podřízených spuštění. Přihlaste se pomocí instančního objektu nebo přihlašovacích údajů spravované identity. Další informace o ověřování najdete v tématu nastavení ověřování.

Následující kód:

  • Načte výpočetní prostředek pojmenovaný "gpu-cluster" z pracovního prostoru. ws
  • Iteruje hodnoty různých argumentů, které mají být předány podřízeným ScriptRunConfig objektům.
  • Vytvoří a odešle nové podřízené spuštění pomocí vlastního výpočetního prostředku a argumentu.
  • Blokuje, dokud se nespustí všechna podřízená spuštění.
# 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()

Pokud chcete vytvořit mnoho podřízených spuštění s identickými konfiguracemi, argumenty a vstupy efektivně, použijte metodu create_children() . Vzhledem k tomu, že každé vytvoření vede k volání sítě, je vytvoření dávky spuštění efektivnější než jejich vytvoření po druhém.

V rámci podřízeného spuštění můžete zobrazit ID nadřazeného spuštění:

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

Dotazování podřízených spuštění

K dotazování podřízených spuštění konkrétního nadřazeného objektu použijte metodu get_children() . Argument recursive = True umožňuje dotazovat se na vnořený strom dětí a vnoučat.

print(parent_run.get_children())

Přihlášení k nadřazené nebo kořenovému spuštění

Pole můžete použít Run.parent pro přístup ke spuštění, které spustilo aktuální podřízené spuštění. Běžným případem použití pro použití Run.parent je sloučení výsledků protokolu na jednom místě. Podřízená spuštění se spouští asynchronně a neexistuje žádná záruka řazení ani synchronizace nad rámec schopnosti nadřazeného objektu čekat na dokončení podřízených spuštění.

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

Monitorování stavu spuštění e-mailem

  1. Na webu Azure Portal na levém navigačním panelu vyberte kartu Monitorování .

  2. Vyberte Nastavení diagnostiky a pak vyberte + Přidat nastavení diagnostiky.

    Snímek obrazovky s nastavením diagnostiky pro e-mailové oznámení

  3. V nastavení diagnostiky

    1. v části Podrobnosti o kategorii vyberte AmlRunStatusChangedEvent.
    2. V podrobnostech cíle vyberte pracovní prostor Odeslat do služby Log Analytics a zadejte pracovní prostor Předplatné a Log Analytics.

    Poznámka:

    Pracovní prostor Služby Azure Log Analytics je jiný typ prostředku Azure než pracovní prostor služby Azure Machine Learning. Pokud v seznamu nejsou žádné možnosti, můžete vytvořit pracovní prostor služby Log Analytics.

    Snímek obrazovky s konfigurací e-mailového oznámení

  4. Na kartě Protokoly přidejte nové pravidlo upozornění.

    Screeenshot nového pravidla upozornění.

  5. Zjistěte , jak vytvářet a spravovat upozornění protokolu pomocí služby Azure Monitor.

Příklady poznámkových bloků

Následující poznámkové bloky ukazují koncepty v tomto článku:

  • Další informace o rozhraních API protokolování najdete v poznámkovém bloku rozhraní API protokolování.

  • Další informace o správě spuštění pomocí sady Azure Machine Learning SDK najdete v poznámkovém bloku pro správu spuštění.

Další kroky