Capturar automaticamente logs de inferência para ter inferência em tempo real

Use a captura automática no Snowflake ML para registrar automaticamente todas as solicitações e respostas processadas por um serviço de modelo. A captura automática fornece visibilidade imediata dos sucessos das solicitações, das falhas das solicitações e das entradas por trás de previsões inesperadas.

Em vez de direcionar os dados de solicitação ou resposta para uma tabela ou exibição, você pode persistir automaticamente os dados de solicitação e resposta de inferência. Em vez de precisar criar pipelines corretamente para ingestão e monitoramento de dados, você pode usar a captura automática.

Com a captura automática, você pode fazer o seguinte:

  • Depurar rapidamente: analise dados históricos de inferência para diagnosticar casos extremos e entender o comportamento do modelo.

  • Melhorar continuamente seus modelos: use dados de produção do mundo real para criar conjuntos de dados de alta qualidade para treinar novos modelos.

  • Testar: use os dados coletados dos logs para testes A/B e testes de sombra.

Para cada solicitação de inferência, a captura automática registra o seguinte:

  • Carga útil da solicitação

  • Carga útil da resposta

  • Identificador da versão do modelo

  • Identificador do serviço

  • Metadados de roteamento do gateway

  • Carimbos de data/hora da solicitação/resposta

  • Código de resposta (como 200).

Nota

O Snowflake não captura dados para as entradas e saídas usando o mecanismo de inferência vLLM.

Esses dados são somente leitura, e os usuários não podem ser modificá-los.

O Snowflake captura apenas os dados de resposta para solicitações bem-sucedidas. Se uma solicitação falhar, o Snowflake não vai capturar nenhum dado.

Pré-requisitos e compatibilidade de versão do modelo

As seções a seguir descrevem os pré-requisitos e a compatibilidade de versão do modelo para a captura automática.

Requisitos de controle de acesso

Para configurar e acessar os dados de inferência capturados, sua função deve ter os seguintes privilégios:

Privilégio

Objeto

Notas

OWNERSHIP

Modelo

Necessário para criar um serviço com captura automática habilitada e para ler dados da tabela de inferência usando a função INFERENCE_TABLE. OWNERSHIP é um privilégio especial em um objeto que é concedido automaticamente à função que criou o objeto, mas também pode ser transferido usando o comando GRANT OWNERSHIP para uma função diferente pela função proprietária (ou qualquer função com o privilégio MANAGE GRANTS). Em um esquema de acesso gerenciado, somente o proprietário do esquema (por exemplo, a função com o privilégio OWNERSHIP no esquema) ou uma função com o privilégio MANAGE GRANTS pode conceder ou revogar privilégios em objetos no esquema, incluindo concessões futuras.

OWNERSHIP

Serviço

Necessário para listar se um serviço tem a captura automática habilitada na função list_service(). OWNERSHIP é um privilégio especial em um objeto que é concedido automaticamente à função que criou o objeto, mas também pode ser transferido usando o comando GRANT OWNERSHIP para uma função diferente pela função proprietária (ou qualquer função com o privilégio MANAGE GRANTS). Em um esquema de acesso gerenciado, somente o proprietário do esquema (por exemplo, a função com o privilégio OWNERSHIP no esquema) ou uma função com o privilégio MANAGE GRANTS pode conceder ou revogar privilégios em objetos no esquema, incluindo concessões futuras.

USAGE

Modelo, serviço, versão, gateway

Necessário para resolver entidades na função INFERENCE_TABLE.

Compatibilidade da versão do modelo

Cada modelo existe como um objeto de modelo. O objeto de modelo tem a própria tabela de inferência, que contém os dados e metadados para cada solicitação de inferência. A captura automática registra os dados da tabela de inferência do modelo. Cada serviço de modelo tem a própria tabela de inferência.

Se você estiver criando um novo modelo, a captura automática será ativada automaticamente.

Os modelos criados antes de 23 de janeiro de 2026 não são compatíveis com a captura automática. Você deve clonar o modelo e habilitar a captura automática para o serviço correspondente.

Use o seguinte comando para duplicar um modelo existente:

CREATE [ OR REPLACE ] MODEL [ IF NOT EXISTS ] <name> [ WITH VERSION <version_name> ]
FROM MODEL <source_model_name> [ VERSION <source_version_or_alias_name> ]
Copy

O modelo criado com o comando anterior tem uma tabela de inferência vazia. Para obter informações sobre como habilitar a captura automática, consulte Ativar captura automática.

Você também pode criar uma versão de modelo a partir de uma versão de modelo existente. Para obter mais informações, consulte Sintaxe da variante.

Após duplicar o modelo, você pode habilitar a captura automática seguindo as etapas em Ativar captura automática.

Ativar captura automática

Depois de criar um novo modelo ou clonar um modelo existente, habilite a captura automática para o serviço de modelo usando o SDK do Python. Para obter mais informações sobre o serviço de modelo, consulte Implantar modelos para inferência em tempo real (REST API).

Use o seguinte código Python para habilitar a captura automática:

mv.create_service(
    service_name="my_service",
    service_compute_pool="my_compute_pool",
    autocapture=True
)
Copy

A variável mv ​​é o objeto de versão do modelo. Você a definiu ao registrar o modelo no registro de modelos.

O valor padrão para captura automática é False. Certifique-se de habilitar a captura automática para um modelo que você criou após 23 de janeiro de 2026 e registrou no registro de modelos. Caso contrário, a criação do serviço falhará porque o modelo não tem uma tabela de inferência.

Importante

A configuração de captura automática é imutável. Você não pode habilitar ou desabilitar a captura automática em um serviço de modelo existente. Você deve recriar o serviço para alterar essa configuração. Se você recriar o serviço, o ponto de extremidade será alterado, a menos que você use um ponto de extremidade ou gateway estável.

Consultar dados de inferência

Para acessar seus logs, use a função INFERENCE_TABLE. Essa função retorna os logs de inferência de um modelo e permite filtrar por versão, serviço e gateway. Somente os proprietários do modelo podem visualizar os dados quando têm privilégios USAGE no gateway e no serviço.

Exemplo básico

O exemplo a seguir demonstra como recuperar todos os logs de inferência de um modelo usando a função INFERENCE_TABLE. Essa consulta retorna todos os dados de solicitação e resposta capturados para cada solicitação de inferência processada pelos serviços do modelo.

-- Fetch all inference logs for a specific model
SELECT * FROM TABLE(INFERENCE_TABLE('my_model'));
Copy

Exemplo de filtragem avançada

Você pode filtrar por versões, serviços ou gateways específicos diretamente na função INFERENCE_TABLE():

SELECT * FROM TABLE(
INFERENCE_TABLE(
'MY_MODEL',
VERSION => 'V1',
SERVICE => 'MY_PREDICTION_SERVICE',
GATEWAY => 'MY_GATEWAY'
)
);
Copy

Importante

Os argumentos de serviço, versão e gateway devem existir no momento da consulta. Se um novo serviço, versão ou gateway for criado com o mesmo nome de um que já existia, a consulta produzirá apenas dados da versão atual.

Você pode usar a seguinte cláusula de predicado para filtrar por nome de função:

WHERE RECORD_ATTRIBUTES:"snow.model_serving.function.name" = 'predict'
Copy

Nota

Para obter o melhor desempenho, filtre por um intervalo de tempo na coluna TIMESTAMP.

Consultando dados históricos para entidades excluídas

Os dados de inferência são mantidos após a exclusão de um serviço, versão ou gateway. Você ainda pode consultar esses dados históricos enquanto o modelo existir.

O exemplo a seguir retorna todos os logs de inferência de um modelo:

SELECT *
FROM TABLE(
  INFERENCE_TABLE('my_model')
);
Copy

O exemplo a seguir filtra os logs de inferência por versão do modelo:

SELECT *
FROM TABLE(
  INFERENCE_TABLE(
    'my_model',
    MODEL_VERSION => 'v1'
  )
);
Copy

O exemplo a seguir filtra os logs de inferência por versão e serviço:

SELECT *
FROM TABLE(
  INFERENCE_TABLE(
    'my_model',
    MODEL_VERSION => 'v1',
    SERVICE => 'my_service'
  )
);
Copy

O exemplo a seguir filtra os logs de inferência por versão e gateway:

SELECT *
FROM TABLE(
  INFERENCE_TABLE(
    'my_model',
    MODEL_VERSION => 'v1',
    GATEWAY => 'my_gateway'
  )
);
Copy

Esquema de dados e metadados

O Snowflake captura apenas os dados de resposta para solicitações bem-sucedidas. Se uma solicitação falhar, o Snowflake não vai capturar nenhum dado.

A seguir estão os atributos de registro que são capturados:

Campo

Descrição

snow.model_serving.request.data.<coluna>

Os recursos de entrada enviados ao modelo.

snow.model_serving.response.data.<coluna>

A saída de inferência retornada pelo modelo.

snow.model_serving.request.timestamp

Quando a solicitação atingiu o serviço de inferência.

snow.model_serving.response.code

Status HTTP (como 200 para sucesso e 5xx para erros).

snow.model_serving.truncation_policy

Indica se os dados excederam os limites de tamanho (NONE ou TRUNCATED_DEFAULT). Para obter mais informações, consulte Lógica de truncamento de dados.

snow.model_serving.last_hop_id

Reflete o último ID do gateway de onde a solicitação chegou ao serviço de inferência.

snow.model_serving.hop_ids

Reflete a lista de IDs de gateway, representando o caminho percorrido. Atualmente limitado a apenas um gateway.

Lógica de truncamento de dados

Para manter o desempenho do sistema, há um limite de 1 MB para cada evento de inferência. Se a solicitação e a resposta atingirem o limite, o Snowflake aplicará um processo de truncamento em vários estágios para preservar o máximo de utilidade possível.

A tabela a seguir mostra o processo de truncamento:

Estágio

Acionador

Ação executada

1: Redução suave

> 700 KB

Bytes brutos removidos; cadeias de caracteres > 2 KB truncadas; objetos JSON substituídos por um status TRUNCATED.

2: Agressiva

> 900 KB

Todas as cadeias de caracteres são truncadas para 256 bytes.

3: Remoção

> 900 KB*

Se ainda exceder o limite, a carga útil será descartada e substituída por um esqueleto mínimo de metadados.

*O estágio 3 ocorrerá se os metadados sozinhos excederem o limite após a redução de conteúdo.

Limites

Ao usar a captura automática, tenha em mente as seguintes limitações e considerações:

  • Suporte a LLM: a captura automática não é compatível com modelos de linguagem grandes (Large Language Models, LLMs).

  • Taxa de transferência: a captura automática foi projetada para uma taxa de transferência do sistema de aproximadamente 300 a 400 solicitações por segundo (ou 10MB/s) por serviço.

  • Replicação: não é possível replicar tabelas de inferência. Os modelos replicados não terão tabelas de inferência na conta de destino.

  • Retenção: os dados de inferência persistem mesmo se o serviço ou gateway for excluído.

  • Aviso: excluir o objeto de modelo excluirá permanentemente todos os dados de inferência associados.

  • Dados de referência: para realizar a análise de desvio, mantenha uma tabela de dados de referência separada e junte-a com a saída INFERENCE_TABLE usando IDs de solicitação comum.

  • Contas de consumidor: as contas de consumidor não podem criar um serviço com a captura automática ativada para modelos compartilhados com tabelas de inferência.

  • Desempenho: a captura automática foi projetada para não adicionar latência às solicitações de inferência. No entanto, pode haver o descarte de algumas capturas durante períodos de volume de solicitações extremamente alto.

Esquema

Como parte desse recurso, os seguintes valores são adicionados às respectivas colunas.

RESOURCE_ATTRIBUTES

A tabela a seguir descreve os campos do esquema de atributos do recurso:

Campo

Descrição

snow.model.version.id

Identificador exclusivo da versão do modelo.

snow.model.version.name

Nome da versão do modelo.

RECORD_ATTRIBUTES

A tabela a seguir descreve os campos do esquema de atributos do registro:

Campo

Descrição

snow.model_serving.function.name

Nome da função do modelo que foi chamada.

snow.model_serving.last_hop_id

O ID do último gateway que processou a solicitação.

snow.model_serving.hop_ids

Lista de IDs dos gateways que processaram a solicitação.

snow.model_serving.request.data.<coluna>

Campos de entrada, em que <column> representa nomes de campos de entrada específicos.

snow.model_serving.request.timestamp

Carimbo de data/hora de quando a solicitação foi capturada pelo serviço de inferência.

snow.model_serving.response.data.<coluna>

Dados de resposta, em que <column> contém os campos de resposta da inferência.

snow.model_serving.response.timestamp

Carimbo de data/hora de quando a resposta foi capturada pelo serviço.

snow.model_serving.response.code

Código de resposta do serviço de inferência (por exemplo, 200, 5xx).

snow.model_serving.truncation_policy

Indica se os dados foram truncados. Os valores são NONE ou TRUNCATED_DEFAULT.