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-ml
Azure 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
ml
extensã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
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")
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 trabalhows
- 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
No portal do Azure, na barra de navegação esquerda, selecione a guia Monitor.
Selecione Configurações de diagnóstico e, em seguida, selecione + Adicionar configuração de diagnóstico.
Na configuração de diagnóstico,
- em Detalhes da categoria, selecione AmlRunStatusChangedEvent.
- 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.
Na guia Logs, adicione uma nova regra de alerta.
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:
Para saber mais sobre as APIs de registro, consulte o bloco de anotações da API de registro.
Para obter mais informações sobre como gerenciar execuções com o SDK do Azure Machine Learning, consulte o bloco de anotações gerenciar execuções.
Próximos passos
- Para saber como registrar métricas para seus experimentos, consulte Registrar métricas durante execuções de treinamento.
- Para saber como monitorar recursos e logs do Azure Machine Learning, consulte Monitorando o Azure Machine Learning.