自动捕获推理日志以进行实时推理¶
使用 Snowflake ML 中的自动捕获自动记录模型服务处理的每个请求和响应。自动捕获可立即查看请求成功、请求失败以及意外预测背后的输入。
您可以自动保留推理请求和响应数据,而不是将请求或响应数据通过管道传输到表或视图中。您可以使用自动捕获,而无需为数据引入和监控正确创建管道。
使用自动捕获,您可以执行以下操作:
快速调试:分析历史推理数据以诊断边缘情况并了解模型行为。
持续改进模型:使用真实世界的生产数据创建高质量数据集来训练新模型。
测试:使用从 A/B 测试和影子测试日志中收集的数据。
对于每个推理请求,自动捕获会记录以下内容:
请求有效负载
响应有效负载
模型版本标识符
服务标识符
网关路由元数据
请求/响应时间戳
响应代码(例如 200)。
备注
Snowflake 不会使用 vLLM 推理引擎来捕获输入和输出数据。
此数据是只读数据,用户无法修改。
Snowflake 仅捕获成功请求的响应数据。如果请求失败,Snowflake 不会捕获任何数据。
先决条件和模型版本兼容性¶
以下部分介绍了自动捕获的先决条件和模型版本兼容性。
访问控制要求¶
要配置和访问捕获的推理数据,您的角色必须具有以下权限:
权限 |
对象 |
备注 |
|---|---|---|
OWNERSHIP |
模型 |
创建启用了自动捕获的服务,并使用 INFERENCE_TABLE 函数读取推理表数据时需要。OWNERSHIP 是对对象的特殊权限,会自动授予创建该对象的角色,但拥有角色(或任何具有 MANAGEGRANTS 权限的角色)也可以使用 GRANT OWNERSHIP 命令转让给不同的角色。在托管访问架构中,只有架构所有者(例如,对架构具有 OWNERSHIP 权限的角色)或具有 MANAGE GRANTS 权限的角色可以授予或撤销对架构中对象的权限,包括未来授权。 |
OWNERSHIP |
服务 |
列出服务是否在 list_service() 函数中启用了自动捕获时需要。OWNERSHIP 是对对象的特殊权限,会自动授予创建该对象的角色,但拥有角色(或任何具有 MANAGE GRANTS 权限的角色)也可以使用 GRANT OWNERSHIP 命令转让给不同的角色。在托管访问架构中,只有架构所有者(例如,对架构具有 OWNERSHIP 权限的角色)或具有 MANAGE GRANTS 权限的角色可以授予或撤销对架构中对象的权限,包括未来授权。 |
USAGE |
模型、服务、版本、网关 |
解析 INFERENCE_TABLE 函数中的实体时需要。 |
模型版本兼容性¶
每个模型都作为模型对象存在。模型对象有自己的推理表,其中包含每个推理请求的数据和元数据。自动捕获会记录模型推理表中的数据。每个模型服务都有自己的推理表。
如果您正在创建新模型,则会自动启用自动捕获。
2026 年 1 月 23 日之前创建的模型不支持自动捕获。您必须克隆模型,并为其服务启用自动捕获。
使用以下命令复制现有模型:
CREATE [ OR REPLACE ] MODEL [ IF NOT EXISTS ] <name> [ WITH VERSION <version_name> ]
FROM MODEL <source_model_name> [ VERSION <source_version_or_alias_name> ]
使用上述命令创建的模型具有一个空推理表。有关启用自动捕获的信息,请参阅 激活自动捕获。
您还可以使用现有模型版本来创建模型版本。有关更多信息,请参阅 变体语法。
复制模型后,您可以按照 激活自动捕获 中的以下步骤启用自动捕获。
激活自动捕获¶
After you've created a new model or cloned an existing model, enable Auto Capture for the model service using the Python SDK. For more information about the model service, see 为实时推理部署模型 (REST API).
使用以下 Python 代码启用自动捕获:
mv.create_service(
service_name="my_service",
service_compute_pool="my_compute_pool",
autocapture=True
)
mv 变量是模型版本对象。您在将模型记录到模型注册表时定义了该变量。
自动捕获的默认值为 False。确保为 2026 年 1 月 23 日之后创建并记录到模型注册表的模型启用自动捕获。否则,服务创建将失败,因为模型没有推理表。
重要
自动捕获设置不可变。您无法对现有模型服务启用或禁用自动捕获。您必须重新创建服务才能更改此配置。如果重新创建服务,除非您使用稳定端点或网关,否则端点会发生变化。
查询推理数据¶
要访问日志,请使用 INFERENCE_TABLE 函数。此函数返回模型的推理日志,并支持按版本、服务和网关进行筛选。只有对网关和服务具有 USAGE 权限的模型所有者才能查看数据。
基本示例¶
以下示例演示了如何使用 INFERENCE_TABLE 函数检索模型的所有推理日志。此查询返回模型服务处理的每个推理请求的所有捕获的请求和响应数据。
-- Fetch all inference logs for a specific model
SELECT * FROM TABLE(INFERENCE_TABLE('my_model'));
高级筛选示例¶
您可以直接在 INFERENCE_TABLE() 函数中筛选具体的版本、服务或网关:
SELECT * FROM TABLE(
INFERENCE_TABLE(
'MY_MODEL',
VERSION => 'V1',
SERVICE => 'MY_PREDICTION_SERVICE',
GATEWAY => 'MY_GATEWAY'
)
);
重要
服务、版本和网关实参在查询时必须存在。如果创建的新服务、版本或网关与之前存在的服务、版本或网关同名,则查询仅生成当前版本的数据。
您可以使用以下谓词子句,按函数名称进行筛选:
WHERE RECORD_ATTRIBUTES:"snow.model_serving.function.name" = 'predict'
备注
为获得最佳性能,请在 TIMESTAMP 列筛选时间范围。
查询已删除实体的历史数据¶
删除服务、版本或网关后,推理数据仍将保留。只要模型仍然存在,您就可以查询这些历史数据。
以下示例返回模型的所有推理日志:
SELECT *
FROM TABLE(
INFERENCE_TABLE('my_model')
);
以下示例按模型版本筛选推理日志:
SELECT *
FROM TABLE(
INFERENCE_TABLE(
'my_model',
MODEL_VERSION => 'v1'
)
);
以下示例按版本和服务筛选推理日志:
SELECT *
FROM TABLE(
INFERENCE_TABLE(
'my_model',
MODEL_VERSION => 'v1',
SERVICE => 'my_service'
)
);
以下示例按版本和网关筛选推理日志:
SELECT *
FROM TABLE(
INFERENCE_TABLE(
'my_model',
MODEL_VERSION => 'v1',
GATEWAY => 'my_gateway'
)
);
数据架构和元数据¶
Snowflake 仅捕获成功请求的响应数据。如果请求失败,Snowflake 不会捕获任何数据。
以下是捕获的记录属性:
字段 |
描述 |
|---|---|
|
发送到模型的输入特征。 |
|
模型返回的推理输出。 |
|
当请求到达推理服务时。 |
|
HTTP 状态(例如 200 表示成功,5xx 表示错误)。 |
|
指示数据是否超出大小限制(NONE 或 TRUNCATED_DEFAULT)。有关更多信息,请参阅 数据截断逻辑。 |
|
反映从请求到达推理服务的最后一个网关 ID。 |
|
反映网关 ID 列表,描述遍历路径。目前仅限于一个网关。 |
数据截断逻辑¶
为了保持系统性能,每个推理事件有个 1 MB 的限制。如果请求和响应达到限制,Snowflake 会应用多暂存区截断过程,以保留尽可能多的实用性。
下表显示了截断过程:
暂存区 |
触发器 |
采取的操作 |
|---|---|---|
1:软缩减 |
> 700 KB |
移除了原始字节;截断 > 2 KB 的字符串;JSON 对象替换为 |
2:硬缩减 |
> 900 KB |
所有字符串进一步截断为 256 字节。 |
3:移除 |
> 900 KB* |
如果仍然超过限制,则删除有效负载并替换为最小的元数据框架。 |
*如果内容缩减后,仅元数据仍然超过阈值,则进入第 3 阶段。
Limits¶
使用自动捕获时,请记住以下限制和注意事项:
LLM 支持:大型语言模型 (LLMs) 不支持自动捕获。
吞吐量:自动捕获专为每个服务每秒大约 300-400 个请求(或 10MB/s)的系统吞吐量而设计。
复制:无法复制推理表。复制的模型在目标账户中没有推理表。
保留:即使服务或网关被删除,推理数据仍然存在。
警告:删除模型对象将永久删除所有关联的推理数据。
标准答案:要执行偏移分析,请维护一个单独的标准答案表,并使用通用请求 IDs 将其与 INFERENCE_TABLE 输出联接。
使用者账户:使用者账户无法为具有推理表的共享模型创建启用了自动捕获的服务。
性能:自动捕获旨在不增加推理请求的延迟。但是,在请求量极高的时期,它可能会删除一些捕获。
架构¶
作为此功能的一部分,以下值将添加到相应的列中。
RESOURCE_ATTRIBUTES¶
下表描述了资源属性架构字段:
字段 |
描述 |
|---|---|
|
模型版本的唯一标识符。 |
|
模型版本的名称。 |
RECORD_ATTRIBUTES¶
下表描述了记录属性架构字段:
字段 |
描述 |
|---|---|
|
调用的模型函数的名称。 |
|
处理请求的最后一个网关的 ID。 |
|
处理请求的网关 IDs 列表。 |
|
输入字段,其中 |
|
推理服务捕获请求时的时间戳。 |
|
响应数据,其中 |
|
服务捕获响应时的时间戳。 |
|
来自推理服务的响应代码(例如 200、5xx)。 |
|
指示数据是否被截断。值为 |