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> ]
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
)
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'));
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'
)
);
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'
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')
);
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'
)
);
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'
)
);
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'
)
);
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 |
|---|---|
|
Os recursos de entrada enviados ao modelo. |
|
A saída de inferência retornada pelo modelo. |
|
Quando a solicitação atingiu o serviço de inferência. |
|
Status HTTP (como 200 para sucesso e 5xx para erros). |
|
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. |
|
Reflete o último ID do gateway de onde a solicitação chegou ao serviço de inferência. |
|
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 |
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 |
|---|---|
|
Identificador exclusivo da versão do modelo. |
|
Nome da versão do modelo. |
RECORD_ATTRIBUTES¶
A tabela a seguir descreve os campos do esquema de atributos do registro:
Campo |
Descrição |
|---|---|
|
Nome da função do modelo que foi chamada. |
|
O ID do último gateway que processou a solicitação. |
|
Lista de IDs dos gateways que processaram a solicitação. |
|
Campos de entrada, em que |
|
Carimbo de data/hora de quando a solicitação foi capturada pelo serviço de inferência. |
|
Dados de resposta, em que |
|
Carimbo de data/hora de quando a resposta foi capturada pelo serviço. |
|
Código de resposta do serviço de inferência (por exemplo, 200, 5xx). |
|
Indica se os dados foram truncados. Os valores são |