Encontrar a causa dos erros que surgem durante o treinamento do seu modelo ou receber predições na nuvem pode ser difícil. Nesta página, descrevemos como detectar e depurar problemas ocorridos no IA Platform Prediction. Caso você detecte problemas com o framework de machine learning que está usando, leia a documentação pertinente.
Ferramenta de linha de comando
- ERROR: (gcloud) Invalid choice: 'ai-platform'.
Esse erro significa que é preciso atualizar a gcloud. Para isso, execute o seguinte comando:
gcloud components update
- ERROR: (gcloud) unrecognized arguments: --framework=SCIKIT_LEARN.
Esse erro significa que é preciso atualizar a gcloud. Para isso, execute o seguinte comando:
gcloud components update
- ERROR: (gcloud) unrecognized arguments: --framework=XGBOOST.
Esse erro significa que é preciso atualizar a gcloud. Para isso, execute o seguinte comando:
gcloud components update
- ERROR: (gcloud) Failed to load model: Could not load the model: /tmp/model/0001/model.pkl. '\x03'. (Error code: 0)
Esse erro significa que uma biblioteca incorreta foi usada para exportar o modelo. Para corrigir isso, exporte novamente o modelo usando a biblioteca correta. Por exemplo, exporte modelos no formato
model.pkl
com a bibliotecapickle
e modelos no formatomodel.joblib
com a bibliotecajoblib
.- ERROR: (gcloud.ai-platform.jobs.submit.prediction) argument --data-format: Invalid choice: 'json'.
Esse erro significa que você especificou
json
como valor da sinalização--data-format
ao enviar um job de previsão em lote. Para usar o formato de dadosJSON
, você precisa fornecertext
como o valor da sinalização--data-format
.
Versões do Python
- ERROR: Bad model detected with error: "Failed to load model: Could not load the
- model: /tmp/model/0001/model.pkl. unsupported pickle protocol: 3. Please make
- sure the model was exported using python 2. Otherwise, please specify the
- correct 'python_version' parameter when deploying the model. Currently,
- 'python_version' accepts 2.7 and 3.5. (Error code: 0)"
- Esse erro significa que um arquivo de modelo exportado com o Python 3 foi implantado em um recurso de versão do modelo do AI Platform Prediction com uma configuração do Python 2.7.
Para solucioná-lo:
- crie um novo recurso de versão de modelo e defina 'python_version' como 3.5;
- Implante o mesmo arquivo no novo recurso de versão do modelo.
Comando virtualenv
não encontrado
Se você recebeu esse erro ao tentar ativar virtualenv
, uma solução possível é adicionar o diretório contendo virtualenv
à sua variável de ambiente $PATH
. Quando essas variáveis são modificadas, você consegue usar os comandos do virtualenv
sem digitar o caminho completo do arquivo.
Primeiro, instale virtualenv
executando o seguinte comando:
pip install --user --upgrade virtualenv
O instalador solicita que você modifique a variável de ambiente $PATH
e fornece o caminho para o script virtualenv
. No macOS, isso é semelhante a /Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin
.
Abra o arquivo em que o shell carrega variáveis de ambiente. Normalmente, é ~/.bashrc
ou ~/.bash_profile
no macOS.
Adicione a seguinte linha, substituindo [VALUES-IN-BRACKETS]
pelos valores apropriados:
export PATH=$PATH:/Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin
Por fim, execute o seguinte comando para carregar .bashrc
(ou .bash_profile
):
source ~/.bashrc
Como usar registros de jobs
Um bom local para iniciar a solução de problemas é nos registros de jobs capturados pelo Cloud Logging.
Como gerar registros para os diferentes tipos de operação
A experiência de geração de registros varia de acordo com o tipo de operação, conforme mostrado nas seções a seguir.
Registros de previsão em lote
Todos os jobs de predição em lote são registrados.
Registros de predição on-line
As solicitações de previsão on-line não geram registros por padrão. É possível ativar o Cloud Logging ao criar o recurso do modelo:
gcloud
Inclua a sinalização --enable-logging
ao executar
gcloud ai-platform models create
.
Python
Defina onlinePredictionLogging
como True
no recurso Model
que
você usa em sua
chamada para projects.models.create
.
Como encontrar registros
Os registros dos jobs contêm todos os eventos para a operação, incluindo eventos de todos os processos no cluster durante o uso do treinamento distribuído. Caso esteja executando um job de treinamento distribuído, os registros de nível de jobs serão relatados para o processo do worker mestre. Normalmente, a primeira etapa para corrigir erros é examinar os registros desse processo, filtrando eventos registrados para outros processos em seu cluster. Os exemplos desta seção mostram essa filtragem.
É possível filtrar os registros na linha de comando ou na seção Cloud Logging do console do Google Cloud. Nos dois casos, use estes valores de metadados no seu filtro conforme necessário:
Item de metadados | Filtro para mostrar quando o item for... |
---|---|
resource.type | igual a "cloud_ml_job"; |
resource.labels.job_id | igual ao nome do job; |
resource.labels.task_name | igual a "master-replica-0" para ler apenas as entradas de registros para o worker mestre; |
severity | maior que ou igual a ERROR para ler apenas as entradas de registros correspondentes a condições de erro. |
Linha de comando
Use gcloud beta logging read para gerar uma consulta que atenda as suas necessidades. Veja alguns exemplos:
Cada exemplo depende destas variáveis de ambiente:
PROJECT="my-project-name"
JOB="my_job_name"
Se preferir, insira no lugar o literal de string.
Para imprimir os registros do job na tela:
gcloud ai-platform jobs stream-logs $JOB
Veja todas as opções para gcloud ai-platform jobs stream-logs.
Imprimir o registro do worker mestre na tela
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\""
Para imprimir apenas erros registrados do worker mestre na tela:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\" and severity>=ERROR"
Os exemplos anteriores representam os casos mais comuns de filtragem dos registros do seu job de treinamento do AI Platform Prediction. O Cloud Logging fornece muitas opções eficientes de filtragem que podem ser usadas para refinar sua pesquisa. Essas opções são descritas detalhadamente na documentação de filtragem avançada.
Console
Abra a página Jobs do AI Platform Prediction no console do Google Cloud.
Selecione o job com falha na lista da página Jobs para ver detalhes.
- Clique em Ver registros para abrir o Cloud Logging.
É possível ir diretamente ao Cloud Logging, mas é necessário adicionar uma etapa para encontrar seu job:
- Expanda o seletor de recursos.
- Expanda o job do AI Platform Prediction na lista de recursos.
- Encontre o nome do job na lista job_id. Insira as primeiras letras do nome dele na caixa de pesquisa para restringir os jobs exibidos.
- Expanda a entrada do job e selecione
master-replica-0
na lista de tarefas.
Como conseguir informações dos registros
Depois de encontrar o registro correto para o job e filtrá-lo para master-replica-0
, é possível examinar os eventos registrados para encontrar a origem do problema. Use o procedimento de depuração padrão do Python e lembre-se:
- Os eventos têm diversos níveis de gravidade. Faça a filtragem para ver apenas eventos de um determinado nível, por exemplo, erros ou erros e avisos.
- Um problema que faz com que seu treinador saia com uma condição de erro irrecuperável (código de retorno > 0) é registrado como uma exceção precedida pelo stack trace:
- Veja mais informações expandindo os objetos na mensagem JSON registrada (denotada por uma seta para a direita e com conteúdo listado como {...}). Por exemplo, é possível expandir jsonPayload para ver o stack trace em um formato mais legível do que é fornecido na descrição do erro principal:
- Alguns erros mostram instâncias de erros passíveis de repetição. Em geral, eles não incluem rastreamento de pilha e são mais difíceis de diagnosticar.
Como aproveitar ao máximo a geração de registros
O serviço de treinamento do AI Platform Prediction registra automaticamente estes eventos:
- Informações de status internas ao serviço.
- Mensagens que o aplicativo do treinador envia para
stderr
. - Texto de saída que o aplicativo do treinador envia para o
stdout
.
Simplifique a solução de erros no aplicativo do treinador seguindo as práticas recomendadas de programação:
- Envie mensagens significativas para stderr (com logging, por exemplo).
- Crie a exceção mais lógica e descritiva quando algo der errado.
- Adicione strings descritivas aos objetos de exceção.
A documentação do Python fornece mais informações sobre exceções.
Como resolver problemas de previsões
Veja nesta seção alguns problemas comuns encontrados ao receber predições.
Como lidar com condições específicas para predição on-line
Nesta seção, você encontra orientações sobre algumas condições de erro de predição on-line conhecidas por afetarem alguns usuários.
Predições com longo período de conclusão (de 30 a 180 segundos)
A causa mais comum de uma predição on-line lenta é o escalonamento de nós de processamento a partir do zero. Caso o modelo tenha solicitações de predição regulares feitas em relação a ele, o sistema mantém um ou mais nós prontos para veicular as predições. Quando o modelo não veicula nenhuma predição durante um longo período de tempo, o serviço "diminui" para zero nós prontos. A próxima solicitação de predição depois dessa redução de escala levará muito mais tempo para retornar do que o habitual, porque o serviço tem que providenciar nós para lidar com isso.
Códigos de status HTTP
Quando ocorre um erro com uma solicitação de previsão on-line, geralmente você recebe um código de status HTTP do serviço. Estes são alguns dos códigos comumente encontrados e os respectivos significados no contexto da predição on-line:
- 429 - Memória insuficiente
O nó de processamento ficou sem memória durante a execução do modelo. Não há como aumentar a memória alocada para os nós de predição nesse momento. Tente estas alternativas para a execução do modelo:
- Reduza o tamanho do modelo:
- usando variáveis menos precisas;
- quantificando os dados contínuos;
- reduzindo o tamanho de outros recursos de entrada (usando tamanhos menores de vocabulário, por exemplo);
- enviando a solicitação novamente com um lote menor de instâncias.
- Reduza o tamanho do modelo:
- 429 - Muitas solicitações pendentes
O modelo está recebendo mais solicitações do que consegue processar. Se você estiver usando o escalonamento automático, as solicitações vão ser recebidas mais rápido do que o suportado pelo sistema. Além disso, se o valor mínimo de nós for 0, essa configuração pode levar a um cenário de inicialização a frio, em que a taxa de erro de 100% é observada até que o primeiro nó seja viável.
Com o escalonamento automático, tente reenviar solicitações com espera exponencial. Com isso, o sistema ganha tempo para se ajustar.
Por padrão, o escalonamento automático é acionado pela utilização da CPU acima de 60%, e é configurável.
- 429: cota
Seu projeto do Google Cloud Platform é limitado a 10.000 solicitações a cada 100 segundos, ou seja, cerca de 100 por segundo. Se você receber esse erro em picos temporários, tente novamente com a retirada exponencial para processar todas as solicitações a tempo. Se você receber esse código constantemente, solicite um aumento de cota. Consulte a página de cotas para saber mais.
- 503 - Nossos sistemas detectaram tráfego incomum a partir de sua rede de computadores
A incidência de solicitações recebidas pelo modelo a partir de um único IP é tão alta que o sistema suspeita de um ataque de negação de serviço. Pare de enviar solicitações por um minuto e retome o envio com uma frequência mais baixa.
- 500 - Não foi possível carregar o modelo
O sistema teve problemas para carregar o modelo. Siga estas etapas:
- Veja se o seu treinador está exportando o modelo certo.
- Tente fazer uma previsão de teste com o comando
gcloud ai-platform local predict
. - Exporte o modelo e tente novamente.
Erros de formatação para solicitações de predição
Todas estas mensagens têm a ver com sua entrada de predição.
- "Empty or malformed/invalid JSON in request body"
- O serviço não conseguiu analisar a JSON na sua solicitação ou a solicitação está vazia. Verifique se a mensagem contém erros ou omissões que invalidem a JSON.
- "Missing 'instances' field in request body"
- O corpo da solicitação não segue o formato correto. Ele precisa ser um objeto JSON com uma chave única chamada
"instances"
que contém uma lista com todas as suas instâncias de entrada. - Erro de codificação JSON ao criar uma solicitação
Sua solicitação inclui dados codificados em base64, mas não no formato JSON apropriado. Cada string codificada em base64 precisa ser representada por um objeto com uma chave única chamada
"b64"
. Exemplo:{"b64": "an_encoded_string"}
Outro erro de base64 ocorre quando você tem dados binários não codificados em base64. Codifique os dados e os formate da seguinte maneira:
{"b64": base64.b64encode(binary_data)}
Veja mais informações sobre formatação e codificação de dados binários.
A predição na nuvem demora mais do que no computador
A predição on-line é projetada para ser um serviço escalonável que atende rapidamente uma alta taxa de solicitações. O serviço é otimizado para o desempenho agregado em todas as solicitações de disponibilização. A ênfase na escalonabilidade leva a características de desempenho diferentes em comparação com a geração de um pequeno número de predições na sua máquina local.
A seguir
- Receba suporte.
- Saiba mais sobre o modelo de erro das APIs do Google, principalmente os códigos de erros canônicos definidos em
google.rpc.Code
e os detalhes de erros padrão definidos em google/rpc/error_details.proto (links em inglês). - Saiba como monitorar os jobs de treinamento.
- Consulte Solução de problemas e perguntas frequentes da Cloud TPU para ajudar a diagnosticar e resolver problemas ao executar o AI Platform Prediction com a Cloud TPU.