服务管理和扩展¶
将模型部署到 Snowpark Container Services (SPCS) 后,您必须管理其生命周期、资源消耗和可靠性。本页面介绍标准操作、可观察性以及为生产工作负载配置高可用性。
管理服务¶
Snowpark Container Services 提供用于管理服务的 SQL 界面。您可以像管理任何其他 SPCS 服务一样,对由 Snowflake Model Serving 创建的 SPCS 服务使用 DESCRIBE SERVICE 和 ALTER SERVICE 命令。例如,您可以:
更改服务的 MIN_INSTANCES 和其他属性
删除服务
将服务共享到另一个账户
更改服务的所有权(新所有者必须模型的 READ 访问权限)
备注
如果服务的所有者因任何原因而失去了对底层模型的访问权限,服务将在重新启动后停止工作。它在重新启动之前会继续运行。
为确保可重现性和可调试性,您无法更改现有推理服务的规范。但您可以复制规范,对其进行定制,然后使用定制的规范创建自己的服务来托管模型。不过,这种方法不能防止底层模型被删除。此外,它不会跟踪沿袭。最好允许 Snowflake Model Serving 创建服务。
扩展服务¶
备注
从 snowflake-ml-python 1.25.0 开始,您可以通过在 create_service 方法中设置 min_instances 和 max_instances 来定义推理服务的扩展边界。
自动扩缩的工作原理¶
该服务使用 min_instances 中指定的节点数进行初始化,并根据实时流量和硬件利用率在定义的范围内动态扩展。
缩放到零(自动暂停): 如果 min_instances 设置为 0(默认值),则若 30 分钟内未检测到流量,服务将自动暂停。
扩缩延迟: 扩缩触发器通常在满足所需条件一分钟后激活。请注意,总启动时间包括此触发期加上预置和初始化新服务实例所需的时间。
配置最佳实践¶
参数 |
推荐策略 |
|---|---|
min_instances |
对于生产工作负载,设置为 1 或更多,以确保立即可用性并避免冷启动延迟。 |
max_instances |
设置为适应峰值需求,同时保持资源消耗和成本上限。 |
暂停服务¶
默认 min_instances=0 设置允许服务在 30 分钟不活动后自动暂停。传入请求将触发恢复,总延迟由计算池可用性和模型的加载时间(启动延迟)决定。
要手动暂停或恢复服务,请使用 ALTER SERVICE 命令。
ALTER SERVICE my_service [ SUSPEND | RESUME ];
删除模型¶
您可以像往常一样使用 SQL 界面或 Python API 管理模型和模型版本,但有一个限制条件,即不能删除服务正在使用的模型或模型版本(无论是运行中的还是已暂停的)。要删除某个模型或模型版本,请先删除服务。
监控服务¶
在 Snowpark Container Services 中运行模型时,您可以通过访问容器日志和指标来监控服务运行状况并排查问题。模型服务会生成日志,帮助您了解服务行为、诊断错误和优化性能。
有关监控 SPCS 服务(包括访问指标和日志)的全面信息,请参阅 监控服务。
在 Snowsight 中¶
您可以在 Snowsight 中监控模型服务:
在导航菜单中,选择 Monitoring » Services & jobs。
在 Services 选项卡上,选择您的服务以查看服务详细信息页面。
Overview 选项卡显示服务信息,包括计算池、端点和实例计数。
Logs、Metrics 和 Events 选项卡提供日志、性能指标和服务事件(例如实例预置和关闭)。根据需要按实例和容器名称筛选结果。
访问服务日志¶
您可以使用以下任一方法访问模型服务日志:
使用服务辅助函数¶
模型服务包括一个内置的辅助函数,用于从事件表中检索正在运行或暂停的服务的日志:
-- Retrieve logs using the service helper function
SELECT * FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_LOGS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
直接查询事件表¶
如果您为账户配置了事件表,则可以直接查询以检索服务日志:
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service logs
SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, RECORD_ATTRIBUTES, VALUE
FROM <current_event_table_for_your_account>
WHERE timestamp > dateadd(hour, -1, current_timestamp())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'LOG'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 10;
使用系统函数(仅限运行实例)¶
要实时调试活动容器,您可以使用 SYSTEM$GET_SERVICE_LOGS 函数:
-- Retrieve logs from a specific service instance
SELECT SYSTEM$GET_SERVICE_LOGS('model_service_name', '0', 'model-inference', 10);
备注
模型推理服务的容器名称为 model-inference。要对镜像构建问题进行故障排除,请使用 model-build 作为容器名称。
访问服务指标¶
模型服务会发出性能和运行状况指标,帮助您监控资源利用率、请求率、延迟和其他操作特征。这些指标在事件表中获取,可以查询以分析服务性能随时间的变化。
有关 SPCS 服务指标的更多信息,请参阅 访问事件表服务指标。
使用服务辅助函数¶
模型服务包括一个内置的辅助函数,用于从事件表中检索正在运行或暂停的服务的指标:
-- Retrieve metrics using the service helper function
SELECT *
FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_METRICS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
直接查询事件表¶
您可以直接查询事件表,以检索和筛选特定指标:
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service metrics
SELECT
timestamp,
RESOURCE_ATTRIBUTES:"snow.service.container.instance" as instance,
RESOURCE_ATTRIBUTES:"snow.service.container.name" as container,
RECORD:metric:"name" as metric,
value
FROM my_event_table_db.my_event_table_schema.my_event_table
WHERE timestamp > DATEADD(hour, -1, CURRENT_TIMESTAMP())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'METRIC'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 100;
容错能力¶
在任何分布式系统中,都会发生故障。对于任务关键型工作负载,用户需要将服务配置为能够抵御节点和可用区故障。
节点故障恢复能力¶
为了容忍标准节点故障,Snowflake 建议超额配置 50% 或至少保持 3 个实例(以较高者为准)。
示例: 如果您需要 4 个实例来支持峰值流量,则应预置 6 个实例
区域故障恢复能力¶
对于需要抵御完全可用区故障的关键任务工作负载,您可以在创建 服务 时使用分布式 计算池。分布式计算池的创建方式为将 PLACEMENT_GROUP 参数设置为 DISTRIBUTED。有关分布式计算池的更多信息,请参阅 Compute pool placement。
配置指南¶
转换现有池¶
警告
您无法在活动池上更改此设置。您必须先将其暂停。
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
SET PLACEMENT_GROUP = 'DISTRIBUTED';
ALTER COMPUTE POOL my_pool RESUME;
恢复现有池¶
警告
您无法在活动池上更改此设置。您必须先将其暂停。
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
UNSET PLACEMENT_GROUP;
ALTER COMPUTE POOL my_pool RESUME;
验证¶
确认您的池是否已正确配置为 HA,请检查 placement_group 列:
DESCRIBE COMPUTE POOL my_service_pool;