Partilhar via


Iniciar, monitorar e acompanhar o histórico de execução

APLICA-SE A: Python SDK azureml v1

APLICA-SE A: Azure CLI ml extension v1

O SDK do Azure Machine Learning para Python v1 e a CLI do Machine Learning fornecem vários métodos para monitorar, organizar e acompanhar suas execuções para treinamento e experimentação. Seu histórico de execução de ML é uma parte importante de um processo de desenvolvimento de ML explicável e repetível.

Gorjeta

Para obter informações sobre como usar o studio, consulte Rastrear, monitorar e analisar execuções com o studio.

Se você estiver usando o SDK do Azure Machine Learning v2, consulte os seguintes artigos:

Este artigo mostra como executar as seguintes tarefas:

  • Monitore o desempenho da execução.
  • Marque e encontre execuções.
  • Execute a pesquisa sobre o histórico de execuções.
  • Cancelar ou falhar execuções.
  • Crie execuções filhas.
  • Monitore o status da execução por notificação por e-mail.

Gorjeta

Se você estiver procurando informações sobre como monitorar o serviço Azure Machine Learning e os serviços associados do Azure, consulte Como monitorar o Azure Machine Learning. Se você estiver procurando informações sobre modelos de monitoramento implantados como serviços Web, consulte Coletar dados de modelo e Monitorar com o Application Insights.

Pré-requisitos

Você precisará dos seguintes itens:

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning .

  • Um espaço de trabalho do Azure Machine Learning.

  • O SDK do Azure Machine Learning para Python (versão 1.0.21 ou posterior). Para instalar ou atualizar para a versão mais recente do SDK, consulte Instalar ou atualizar o SDK.

    Para verificar sua versão do SDK do Azure Machine Learning, use o seguinte código:

    print(azureml.core.VERSION)
    
  • A extensão CLI e CLI do Azure para o Azure Machine Learning.

    Importante

    Alguns dos comandos da CLI do Azure neste artigo usam a extensão , ou v1, para o azure-cli-mlAzure Machine Learning. O suporte para a extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.

    Recomendamos que você faça a transição para a mlextensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, consulte Extensão CLI do Azure ML e Python SDK v2.

Monitorar o desempenho da execução

  • Iniciar uma execução e seu processo de registro

    APLICA-SE A: Python SDK azureml v1

    1. Configure seu experimento importando as classes Workspace, Experiment, Run e ScriptRunConfig do pacote 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. Inicie uma execução e seu processo de registro com o start_logging() método.

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • Monitorar o status de uma execução

    APLICA-SE A: Python SDK azureml v1

    • Obtenha o status de uma execução com o get_status() método.

      print(notebook_run.get_status())
      
    • Para obter o ID de execução, o tempo de execução e outros detalhes sobre a execução, use o get_details() método.

      print(notebook_run.get_details())
      
    • Quando a execução for concluída com êxito, use o complete() método para marcá-la como concluída.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Se você usar o padrão de design do with...as Python, a execução marcará automaticamente como concluída quando estiver fora do escopo. Não é necessário marcar manualmente a execução como concluída.

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

Marcar e localizar execuções

No Azure Machine Learning, você pode usar propriedades e marcas para ajudar a organizar e consultar suas execuções para obter informações importantes.

  • Adicionar propriedades e tags

    APLICA-SE A: Python SDK azureml v1

    Para adicionar metadados pesquisáveis às suas execuções, use o add_properties() método. Por exemplo, o código a seguir adiciona a "author" propriedade à execução:

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

    As propriedades são imutáveis, por isso criam um registro permanente para fins de auditoria. O exemplo de código a seguir resulta em um erro, porque já adicionamos "azureml-user" como o valor da "author" propriedade no código anterior:

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

    Ao contrário das propriedades, as tags são mutáveis. Para adicionar informações pesquisáveis e significativas para os consumidores do seu experimento, use o tag() método.

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

    Você também pode adicionar tags de cadeia de caracteres simples. Quando essas tags aparecem no dicionário de tags como chaves, elas têm um valor de None.

    local_run.tag("worth another look")
    print(local_run.get_tags())
    
  • Propriedades e tags de consulta

    Você pode consultar execuções dentro de um experimento para retornar uma lista de execuções que correspondem a propriedades e tags específicas.

    APLICA-SE A: 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"))
    

Cancelar ou falhar execuções

Se notar um erro ou se a sua corrida estiver a demorar demasiado tempo a terminar, pode cancelar a corrida.

APLICA-SE A: Python SDK azureml v1

Para cancelar uma execução usando o SDK, use o cancel() método:

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

Se a execução terminar, mas contiver um erro (por exemplo, o script de treinamento incorreto foi usado), você poderá usar o fail() método para marcá-lo como falha.

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

Criar execuções filho

APLICA-SE A: Python SDK azureml v1

Crie execuções filho para agrupar execuções relacionadas, como para diferentes iterações de ajuste de hiperparâmetros.

Nota

As execuções filho só podem ser criadas usando o SDK.

Este exemplo de código usa o hello_with_children.py script para criar um lote de cinco execuções filho de dentro de uma execução enviada usando o child_run() método:

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

Nota

À medida que saem do escopo, as execuções filho são automaticamente marcadas como concluídas.

Para criar muitas execuções filho de forma eficiente, use o create_children() método. Como cada criação resulta em uma chamada de rede, criar um lote de execuções é mais eficiente do que criá-las uma a uma.

Enviar execuções secundárias

As execuções filho também podem ser enviadas a partir de uma execução pai. Isso permite que você crie hierarquias de execuções pai e filho. Você não pode criar uma execução filho sem pai: mesmo que a execução pai não faça nada além de iniciar execuções filhas, ainda é necessário criar a hierarquia. Os status de todas as execuções são independentes: um pai pode estar no "Completed" estado bem-sucedido mesmo se uma ou mais execuções filho tiverem sido canceladas ou falhadas.

Você pode desejar que seu filho execute uma configuração de execução diferente da execução pai. Por exemplo, você pode usar uma configuração menos poderosa baseada em CPU para o pai, enquanto usa configurações baseadas em GPU para seus filhos. Outro desejo comum é passar a cada criança argumentos e dados diferentes. Para personalizar uma execução filha, crie um ScriptRunConfig objeto para a execução filha.

Importante

Para enviar uma execução filho de uma execução pai em uma computação remota, você deve entrar no espaço de trabalho no código de execução pai primeiro. Por padrão, o objeto de contexto de execução em uma execução remota não tem credenciais para enviar execuções filhas. Use uma entidade de serviço ou credenciais de identidade gerenciadas para entrar. Para obter mais informações sobre autenticação, consulte Configurar autenticação.

O código abaixo:

  • Recupera um recurso de computação nomeado "gpu-cluster" do espaço de trabalho ws
  • Itera sobre diferentes valores de argumento a serem passados para os objetos filhos ScriptRunConfig
  • Cria e envia uma nova execução filho, usando o recurso de computação personalizado e o argumento
  • Bloqueia até que toda a criança seja concluída
# 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()

Para criar muitas execuções filho com configurações, argumentos e entradas idênticas de forma eficiente, use o create_children() método. Como cada criação resulta em uma chamada de rede, criar um lote de execuções é mais eficiente do que criá-las uma a uma.

Dentro de uma execução filho, você pode exibir o ID de execução pai:

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

O filho da consulta é executado

Para consultar as execuções filho de um pai específico, use o get_children() método. O recursive = True argumento permite consultar uma árvore aninhada de filhos e netos.

print(parent_run.get_children())

Log para execução pai ou raiz

Você pode usar o Run.parent campo para acessar a execução que iniciou a execução filho atual. Um caso de uso comum para usar Run.parent é combinar os resultados do log em um único local. As execuções filho são executadas de forma assíncrona e não há garantia de ordenação ou sincronização além da capacidade do pai de aguardar a conclusão das execuções filhas.

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

Monitorar o status de execução por notificação por e-mail

  1. No portal do Azure, na barra de navegação esquerda, selecione a guia Monitor.

  2. Selecione Configurações de diagnóstico e, em seguida, selecione + Adicionar configuração de diagnóstico.

    Captura de ecrã das definições de diagnóstico para notificação por e-mail.

  3. Na configuração de diagnóstico,

    1. em Detalhes da categoria, selecione AmlRunStatusChangedEvent.
    2. Nos detalhes de destino, selecione o espaço de trabalho Enviar para o Log Analytics e especifique o espaço de trabalho Assinatura e Log Analytics.

    Nota

    O Espaço de Trabalho do Azure Log Analytics é um tipo diferente de Recurso do Azure que o Espaço de Trabalho do serviço Azure Machine Learning. Se não houver opções nessa lista, você poderá criar um espaço de trabalho do Log Analytics.

    Captura de ecrã a mostrar a configuração da notificação por e-mail.

  4. Na guia Logs, adicione uma nova regra de alerta.

    Screeenshot da nova regra de alerta.

  5. Veja como criar e gerenciar alertas de log usando o Azure Monitor.

Blocos de notas de exemplo

Os seguintes blocos de notas demonstram os conceitos deste artigo:

Próximos passos