Resolver problemas com pontos finais em lote
APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)
Saiba como solucionar problemas e resolver erros comuns que você pode encontrar ao usar pontos de extremidade em lote para pontuação em lote. Neste artigo você aprende:
- Como os logs de um trabalho de pontuação em lote são organizados.
- Como resolver erros comuns.
- Identifique cenários não suportados em pontos de extremidade em lote e suas limitações.
Noções básicas sobre logs de um trabalho de pontuação em lote
Obter registos
Depois de invocar um ponto de extremidade em lote usando a CLI ou REST do Azure, o trabalho de pontuação em lote será executado de forma assíncrona. Há duas opções para obter os logs para um trabalho de pontuação em lote.
Opção 1: Transmitir logs para o console local
Você pode executar o seguinte comando para transmitir logs gerados pelo sistema para o console. Somente os azureml-logs
logs na pasta são transmitidos.
az ml job stream --name <job_name>
Opção 2: Ver registos no estúdio
Para obter o link para a execução em estúdio, execute:
az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
- Abra o trabalho no estúdio usando o valor retornado pelo comando acima.
- Escolha a pontuação em lote
- Abra a guia Saídas + logs
- Escolha um ou mais registos que pretende rever
Compreender a estrutura do log
Há duas pastas azureml-logs
de log de nível superior e logs
.
O arquivo ~/azureml-logs/70_driver_log.txt
contém informações do controlador que inicia o script de pontuação.
Devido à natureza distribuída dos trabalhos de pontuação em lote, há logs de várias fontes diferentes. No entanto, dois arquivos combinados são criados que fornecem informações de alto nível:
~/logs/job_progress_overview.txt
: Este arquivo fornece informações de alto nível sobre o número de minilotes (também conhecidos como tarefas) criados até agora e o número de minilotes processados até agora. À medida que os minilotes terminam, o log registra os resultados do trabalho. Se o trabalho falhar, ele mostra a mensagem de erro e onde iniciar a solução de problemas.~/logs/sys/master_role.txt
: Este arquivo fornece a visualização do nó principal (também conhecido como orquestrador) do trabalho em execução. Este log fornece informações sobre a criação de tarefas, monitoramento de progresso, o resultado do trabalho.
Para uma compreensão concisa dos erros em seu script há:
~/logs/user/error.txt
: Este arquivo tentará resumir os erros em seu script.
Para obter mais informações sobre erros em seu script, há:
~/logs/user/error/
: Este arquivo contém rastreamentos de pilha completa de exceções lançadas durante o carregamento e execução do script de entrada.
Quando você precisar de uma compreensão completa de como cada nó executou o script de pontuação, examine os logs de processo individuais para cada nó. Os logs de sys/node
processo podem ser encontrados na pasta, agrupados por nós de trabalho:
~/logs/sys/node/<ip_address>/<process_name>.txt
: Este arquivo fornece informações detalhadas sobre cada minilote à medida que é coletado ou concluído por um trabalhador. Para cada minilote, este ficheiro inclui:- O endereço IP e o PID do processo de trabalho.
- O número total de itens, o número de itens processados com êxito e o número de itens com falha.
- A hora de início, duração, tempo do processo e tempo do método de execução.
Você também pode exibir os resultados de verificações periódicas do uso de recursos para cada nó. Os arquivos de log e os arquivos de instalação estão nesta pasta:
~/logs/perf
: Defina--resource_monitor_interval
para alterar o intervalo de verificação em segundos. O intervalo padrão é600
, que é de aproximadamente 10 minutos. Para interromper o monitoramento, defina o valor como0
. Cada<ip_address>
pasta inclui:os/
: Informações sobre todos os processos em execução no nó. Uma verificação executa um comando do sistema operacional e salva o resultado em um arquivo. No Linux, o comando éps
.%Y%m%d%H
: O nome da subpasta é o tempo até a hora.processes_%M
: O ficheiro termina com o minuto da hora de verificação.
node_disk_usage.csv
: Uso detalhado do disco do nó.node_resource_usage.csv
: Visão geral do uso de recursos do nó.processes_resource_usage.csv
: Visão geral do uso de recursos de cada processo.
Como fazer login no script de pontuação
Você pode usar o log Python em seu script de pontuação. Os logs são armazenados no logs/user/stdout/<node_id>/processNNN.stdout.txt
.
import argparse
import logging
# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)
# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")
Problemas comuns
A seção a seguir contém problemas e soluções comuns que você pode ver durante o desenvolvimento e consumo de pontos finais em lote.
Nenhum módulo chamado 'azureml'
Mensagem registada: No module named 'azureml'
.
Motivo: as implantações em lote do Azure Machine Learning exigem que o pacote azureml-core
seja instalado.
Solução: Adicione azureml-core
ao seu arquivo de dependências conda.
A saída já existe
Motivo: a Implantação em Lote do Azure Machine Learning não pode substituir o predictions.csv
arquivo gerado pela saída.
Solução: Se for indicado um local de saída para as previsões, verifique se o caminho leva a um arquivo inexistente.
A função run() no script de entrada tinha tempo limite para [número] vezes
Mensagem registada: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.
Motivo: as implantações em lote podem ser configuradas com um timeout
valor que indica a quantidade de tempo que a implantação deve aguardar que um único lote seja processado. Se a execução do lote demorar mais do que esse valor, a tarefa será anulada. As tarefas anuladas podem ser repetidas até um máximo de vezes que também podem ser configuradas. Se ocorrer em timeout
cada nova tentativa, o trabalho de implantação falhará. Essas propriedades podem ser configuradas para cada implantação.
Solução: aumente o timemout
valor da implantação atualizando-a. Essas propriedades são configuradas no parâmetro retry_settings
. Por padrão, a timeout=30
e retries=3
está configurado. Ao decidir o valor do timeout
, leve em consideração o número de arquivos que estão sendo processados em cada lote e o tamanho de cada um desses arquivos. Você também pode diminuí-los para contabilizar mais mini-lotes de tamanho menor e, portanto, mais rápido para executar.
ScriptExecution.StreamAccess.Authentication
Mensagem registrada: ScriptExecutionException foi causada por StreamAccessException. StreamAccessException foi causada por AuthenticationException.
Motivo: o cluster de computação onde a implantação está sendo executada não pode montar o armazenamento onde o ativo de dados está localizado. A identidade gerenciada da computação não tem permissões para executar a montagem.
Soluções: Certifique-se de que a identidade associada ao cluster de computação em que a implantação está sendo executada tenha, pelo menos , acesso ao Leitor de Dados de Blob de Armazenamento à conta de armazenamento. Apenas os proprietários de contas de armazenamento podem alterar o seu nível de acesso através do portal do Azure.
Falha na inicialização do conjunto de dados
Mensagem registrada: Falha na inicialização do conjunto de dados: UserErrorException: Mensagem: Não é possível montar Dataset(id='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', name='None', version=None). A fonte do conjunto de dados não está acessível ou não contém quaisquer dados.
Motivo: o cluster de computação onde a implantação está sendo executada não pode montar o armazenamento onde o ativo de dados está localizado. A identidade gerenciada da computação não tem permissões para executar a montagem.
Soluções: Certifique-se de que a identidade associada ao cluster de computação em que a implantação está sendo executada tenha, pelo menos , acesso ao Leitor de Dados de Blob de Armazenamento à conta de armazenamento. Apenas os proprietários de contas de armazenamento podem alterar o seu nível de acesso através do portal do Azure.
Data set node [code] referencia parâmetro dataset_param
que não tem um valor especificado ou um valor padrão
Mensagem registrada: nó do conjunto de dados [código] referencia parâmetro dataset_param
que não tem um valor especificado ou um valor padrão.
Motivo: o ativo de dados de entrada fornecido ao ponto de extremidade em lote não é suportado.
Solução: Certifique-se de que está a fornecer uma entrada de dados suportada para pontos finais em lote.
O programa de usuário falhou com exceção: Falha na execução, verifique os logs para obter detalhes
Mensagem registrada: O programa de usuário falhou com exceção: Falha na execução, verifique os logs para obter detalhes. Você pode verificar logs/readme.txt para o layout dos logs.
Motivo: houve um erro ao executar a init()
função ou run()
do script de pontuação.
Solução: Vá para Saídas + Logs e abra o arquivo em logs > user > error > 10.0.0.X > process000.txt
. Você vê a mensagem de init()
erro gerada pelo método ou run()
.
ValueError: Nenhum objeto para concatenar
Mensagem registrada: ValueError: Nenhum objeto a ser concatenado.
Motivo: Todos os arquivos no minilote gerado são corrompidos ou tipos de arquivo não suportados. Lembre-se de que os modelos MLflow suportam um subconjunto de tipos de arquivo, conforme documentado em Considerações ao implantar na inferência em lote.
Solução: Vá para o arquivo logs/usr/stdout/<process-number>/process000.stdout.txt
e procure entradas como ERROR:azureml:Error processing input file
. Se o tipo de ficheiro não for suportado, reveja a lista de ficheiros suportados. Talvez seja necessário alterar o tipo de arquivo dos dados de entrada ou personalizar a implantação fornecendo um script de pontuação, conforme indicado em Usando modelos MLflow com um script de pontuação.
Não há nenhum item de mini lote bem-sucedido retornado de run()
Mensagem registrada: Não há nenhum item de mini lote bem-sucedido retornado de run(). Por favor, verifique 'response: run()' em https://aka.ms/batch-inference-documentation.
Motivo: O ponto de extremidade em lote não conseguiu fornecer dados no formato esperado para o run()
método. Pode ser devido a arquivos corrompidos sendo lidos ou incompatibilidade dos dados de entrada com a assinatura do modelo (MLflow).
Solução: Para entender o que pode estar acontecendo, vá para Saídas + Logs e abra o arquivo em logs > user > stdout > 10.0.0.X > process000.stdout.txt
. Procure entradas de erro como Error processing input file
. Você deve encontrar detalhes sobre por que o arquivo de entrada não pode ser lido corretamente.
Audiências no JWT não são permitidas
Contexto: Ao invocar um ponto de extremidade em lote usando suas APIs REST.
Motivo: o token de acesso usado para invocar a API REST para o ponto de extremidade/implantação está indicando um token emitido para um público/serviço diferente. Os tokens Microsoft Entra são emitidos para ações específicas.
Solução: Ao gerar um token de autenticação a ser usado com a API REST do ponto de extremidade em lote, verifique se o resource
parâmetro está definido como https://ml.azure.com
. Observe que esse recurso é diferente do recurso que você precisa indicar para gerenciar o ponto de extremidade usando a API REST. Todos os recursos do Azure (incluindo pontos de extremidade em lote) usam o recurso https://management.azure.com
para gerenciá-los. Certifique-se de usar o URI de recurso correto em cada caso. Observe que, se você quiser usar a API de gerenciamento e a API de invocação de trabalho ao mesmo tempo, precisará de dois tokens. Para obter detalhes, consulte: Autenticação em pontos de extremidade de lote (REST).
Não há implantações válidas para rotas. Verifique se o ponto de extremidade tem pelo menos uma implantação com valores de peso positivos ou use um cabeçalho específico de implantação para rotear.
Motivo: a implantação em lote padrão não está definida corretamente.
Solução: verifique se a implantação em lote padrão está definida corretamente. Talvez seja necessário atualizar a implantação em lote padrão. Para obter detalhes, consulte: Atualizar a implantação em lote padrão
Limitações e cenários não suportados
Ao projetar soluções de aprendizado de máquina que dependem de pontos de extremidade em lote, algumas configurações e cenários podem não ser suportados.
Não há suporte para as seguintes configurações de espaço de trabalho:
- Espaços de trabalho configurados com um recurso Registros de Contêiner do Azure com o recurso Quarentena habilitado.
- Espaços de trabalho com chaves gerenciadas pelo cliente (CMK).
As seguintes configurações de computação não são suportadas:
- Clusters Kubernetes do Azure ARC.
- Solicitação de recurso granular (memória, vCPU, GPU) para clusters Kubernetes do Azure. Somente a contagem de instâncias pode ser solicitada.
Os seguintes tipos de entrada não são suportados:
- Conjuntos de dados tabulares (V1).
- Pastas e conjuntos de dados de arquivos (V1).
- MLtable (V2).
Próximos passos
- Crie scripts de pontuação para implantações em lote.
- Autenticação em pontos de extremidade de lote.
- Isolamento de rede em pontos de extremidade em lote.