Pular para o conteúdo principal

Depurar timeouts do modelo de serviço

Este artigo descreve os diferentes tempos limite que o senhor pode encontrar ao usar o endpoint do modelo servindo e como lidar com eles. Ele abrange os tempos limite de implantação do modelo, os tempos limite do lado do servidor e os tempos limite do lado do cliente.

Tempos limite de implantação do modelo

Quando o senhor implanta um modelo ou atualiza uma implantação existente usando o site Mosaic AI Model Serving, o processo pode expirar por vários motivos. As mensagens de tempo limite são registradas em Events tab da página servindo modelo endpoint, pesquise "timed out" para encontrá-las.

nota

O processo de implementação atinge o tempo limite se a construção do contêiner e a implementação do modelo excederem uma determinada duração que depende da configuração da carga de trabalho do endpoint. Verifique sua configuração antes da implantação e compare-a com implantações anteriores bem-sucedidas.

A construção do contêiner não tem limite rígido, mas tenta novamente até 3 vezes. A implantação após a criação do contêiner aguardará até 30 minutos para cargas de trabalho de CPU, 60 minutos para cargas de trabalho pequenas ou médias de GPU e 120 minutos para cargas de trabalho grandes de GPU antes de expirar.

Servindo a guia Eventos do endpoint do modelo

Se for encontrada uma mensagem de "timed out" , navegue até os registros tab e examine a compilação logs para determinar a causa. Os exemplos incluem problemas de dependência de biblioteca, restrições de recurso, problemas de configuração e assim por diante.

servindo modelo endpoint Build logs

Veja a depuração após falha na construção do contêiner.

Tempos limite do lado do servidor

Se o seu endpoint estiver íntegro de acordo com a guia Events and logs do seu servidor endpoint, mas o senhor tiver timeouts quando fizer chamadas para o endpoint, o timeout pode estar no lado do servidor. O tempo limite do default varia de acordo com o tipo de modelo de serviço endpoint. A tabela a seguir mostra os tempos limite do servidor default para solicitações enviadas ao endpoint servindo modelo.

Tipo de endpoint

Limite de tempo limite da solicitação (segundos)

Notas

Ponto de extremidade de serviço de CPU ou GPU

padrão: 120

O limite máximo de tempo limite é de 250 segundos. Entre em contato com a equipe do Databricks account para registrar um tíquete de suporte para alterar o limite de tempo limite do default.

Foundation servindo modelo endpoint

padrão 297

Esse limite não pode ser aumentado.

Para determinar se o senhor teve um tempo limite do lado do servidor, verifique se as solicitações estão atingindo o tempo limite antes ou depois dos limites listados acima.

  • Se sua solicitação falhar consistentemente no limite, é provável que seja um tempo limite do lado do servidor.
  • Se sua solicitação falhar antes do limite, pode ser devido a problemas de configuração.
    • Verifique o serviço logs para determinar se há outros erros.
    • Confirme se o modelo funcionou localmente, como em um Notebook, ou em solicitações anteriores em versões anteriores.

Tempo limite do lado do cliente: Configuração do MLflow

Os tempos limite do lado do cliente normalmente retornam mensagens de erro que dizem que " expirou " ou 4xx Bad Request. As causas comuns desses tempos limite são as configurações de MLflow variável de ambiente. A seguir, os mais comuns MLflow variável de ambiente para timeouts. Para ver a lista completa de variáveis de tempo limite, consulte a documentação mlflow.environment_variables.

  • MLFLOW_HTTP_REQUEST_TIMEOUT : Especifica o tempo limite em segundos para as solicitações HTTP do MLflow. tempo limite padrão de 120 segundos.
  • MLFLOW_HTTP_REQUEST_MAX_RETRIES : Especifica o número máximo de novas tentativas com backoff exponencial para solicitações HTTP do MLflow. O padrão é 7 segundos.
nota

O tempo limite da solicitação HTTP no lado do cliente é definido como 120 segundos, o que corresponde ao tempo limite do lado do servidor default para o endpoint de atendimento da CPU e da GPU. Se o senhor aumentar o tempo limite no lado do servidor, também deverá ajustar o MLflow variável de ambiente de acordo.

Execute uma das seguintes ações para determinar se o tempo limite é causado por uma configuração de variável de ambiente do MLflow:

  • Teste o modelo localmente usando entradas de amostra, como em um Notebook, para confirmar que ele funciona conforme o esperado antes de registrar o modelo e implantá-lo.

    • Examine o tempo necessário para processar as solicitações.
      • Se as solicitações demorarem mais do que o tempo limite default para MLflow variável de ambiente ou se o senhor receber uma mensagem de "timed out" no Notebook. O exemplo " atingiu o tempo limite da mensagem " :
      • Timed out while evaluating the model. Verify that the model evaluates within the timeout.
  • Teste o modelo de serviço endpoint usando solicitações POST.

Configurar MLflow variável de ambiente

Configure o MLflow variável de ambiente usando a UI do Serving ou programaticamente usando o Python.

You can configure environment variables for a model deployment

  1. Select the endpoint that you want to configure an environment variable for.
  2. On the endpoint's page, select Edit on the top right.
  3. In "Entity Details", expand Advanced configuration to add the relevant MLflow timeout environment variable.

See Add plain text environment variables.

Tempo limite no lado do cliente: APIs de clientes de terceiros

Os tempos limite do lado do cliente normalmente retornam mensagens de erro que dizem que " expirou " ou 4xx Bad Request. Semelhante às configurações do MLflow, as APIs de clientes de terceiros podem causar timeouts no lado do cliente, dependendo de sua configuração. Isso pode afetar o endpoint do modelo de serviço que consiste em um pipeline que usa esse cliente de terceiros APIs. Veja modelos personalizados do PyFunc e agentes de esquema personalizados do PyFunc.

Semelhante às instruções de depuração da configuração do MLflow, faça o seguinte para determinar se o tempo limite é causado por APIs de clientes de terceiros usadas no pipeline do modelo:

  • Teste o modelo localmente com entradas de amostra em um Notebook.

    • Se o senhor vir uma mensagem "timed out" no Notebook, ajuste todos os parâmetros relevantes para a janela de tempo limite do cliente de terceiros.
    • O exemplo " atingiu o tempo limite da mensagem " : APITimeoutError: Request timed out.
  • Teste o modelo de serviço endpoint usando solicitações POST.

Exemplo de cliente OpenAI

Ao estabelecer um cliente OpenAI, você pode configurar o parâmetro timeout para alterar o tempo máximo antes que uma solicitação expire no lado do cliente. O default e o tempo limite máximo para um cliente OpenAI é de 10 minutos.

O exemplo a seguir mostra como o senhor pode configurar um tempo limite de APIs de clientes de terceiros.

Python
%pip install openai
dbutils.library.restartPython()

from openai import OpenAI
import os

# How to get your Databricks token: https://docs.databricks.com/en/dev-tools/auth/pat.html
DATABRICKS_TOKEN = os.environ.get('DATABRICKS_TOKEN')
client = OpenAI(
timeout=10, # Number of seconds before client times out
api_key=DATABRICKS_TOKEN,
base_url="<WORKSPACE_URL>/serving-endpoints"
)

chat_completion = client.chat.completions.create(
messages=[
{
"role": "system",
"content": "You are an AI assistant"
},
{
"role": "user",
"content": "Tell me about Large Language Models."
}
],
model="model_name",
max_tokens=256
)
nota

Para o cliente OpenAI, o senhor pode contornar a janela de tempo limite máximo ativando a transmissão.

Outros tempos limite

aquecimento do ponto final parado

Se um endpoint for dimensionado para 0 e receber uma solicitação que o aqueça, isso poderá levar a um tempo limite do lado do cliente se demorar muito para aquecer. Isso pode ser a causa de timeouts em pipelines que utilizam etapas como chamadas para o endpoint de provisionamento ou índices de pesquisa de vetores, conforme mencionado acima.

Tempo limite de conexão

Os tempos limite de conexão estão relacionados ao tempo que um cliente espera para estabelecer uma conexão com o servidor. Se a conexão não for estabelecida dentro desse período, o cliente cancela a tentativa. É importante estar ciente dos clientes usados em seu modelo pipeline e verificar o serviço logs e as tabelas de inferência do modelo de serviço endpoint para verificar se há algum tempo limite de conexão. As mensagens variam de acordo com o serviço.

  • Por exemplo, um SocketTimeout (para um serviço de leitura/gravação em um SQL endpoint por meio de uma conexão JDBC ) pode ter a seguinte aparência:

    • jdbc:spark://<server-hostname>:443;HttpPath=<http-path>;TransportMode=http;SSL=1[;property=value[;property=value]];SocketTimeout=300
  • Para encontrá-las, procure mensagens de erro contendo o termo " timed out " ou *** " timeout " ***.

Limites de taxa

Várias solicitações feitas acima do limite de taxa de um endpoint podem levar à falha de solicitações adicionais. Consulte limites de recurso e de carga útil para ver os limites de taxa com base nos tipos de endpoint. Para clientes de terceiros, a Databricks recomenda que o senhor examine a documentação do cliente de terceiros que estiver usando.