Snowpark Container Services:使用计算池¶
计算池是一个或多个虚拟机 (VM) 节点的集合,Snowflake 会在这些节点上运行您的 Snowpark Container Services 服务(包括作业服务)。可使用 CREATE COMPUTE POOL 命令创建计算池。然后,可在 创建服务 或 执行作业服务 时指定该计算池。
创建计算池¶
计算池是一种账户级结构,类似于 Snowflake 虚拟仓库。计算池的命名范围是账户。也就是说,账户中不能有多个同名的计算池。
创建计算池至少需要以下信息:
为计算池节点预置的机器类型
启动计算池所需的最小节点数
计算池可扩展到的最大节点数(Snowflake 负责管理扩展)。
如果预计在计算池中运行的服务会有大量负载或突发活动,可以将最小节点数设置为大于 1。这种方法可确保在需要时可以随时使用其他节点,而不是等待自动扩缩启动。
设置最大节点限制可防止 Snowflake 自动扩缩时将大量意外节点添加到计算池中。这在遇到意外负载峰值或代码中出现问题等情况下至关重要,这些情况可能导致 Snowflake 分配的计算池节点数量超过最初计划。
下面的 CREATE COMPUTE POOL 命令创建了一个单节点计算池:
CREATE COMPUTE POOL tutorial_compute_pool
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = CPU_X64_XS;
INSTANCE_FAMILY 标识了要为计算池中的计算机节点预置的机器类型。创建计算池时指定 INSTANCE_FAMILY 类似于创建仓库时指定仓库大小(XSMALL、SMALL、MEDIUM、LARGE 等)。下表列出了可用的机器类型。
INSTANCE_FAMILY、Snowflake 服务消耗表 映射
vCPU
内存 (GiB)
存储 (GiB)
带宽限制 (Gbps)
GPU
每个 GPU 的 GPU 内存 (GiB)
节点限制
描述
CPU_X64_XS、. CPU | XS
1
6
100
高达 12.5
不适用
不适用
50
可用于 Snowpark 容器的最小实例。非常适合节省成本和入门。
CPU_X64_S、. CPU | S
3
13
100
高达 12.5
不适用
不适用
50
非常适合托管多个服务/作业,同时节省成本。
CPU_X64_M、. CPU | M
6
28
100
高达 12.5
不适用
不适用
50
非常适合拥有全栈应用程序或多种服务
CPU_X64_L、. CPU | L
28
116
100
12.5
不适用
不适用
50
适用于需要异常大量 CPUs、内存和存储的应用程序。
HIGHMEM_X64_S、. 高内存 CPU | S
6
58
100
AWS:高达 12.5,Azure:8
不适用
不适用
50
适用于内存密集型应用程序。
HIGHMEM_X64_M、. 高内存 CPU | M :newline:`.`(仅限 AWS)
28
240
100
12.5
不适用
不适用
50
适用于在单台机器上托管多个内存密集型应用程序。
HIGHMEM_X64_M、. 高内存 CPU | M :newline:`.`(仅限 Azure)
28
244
100
16
不适用
不适用
50
适用于在单台机器上托管多个内存密集型应用程序。
HIGHMEM_X64_L、. 高内存 CPU | L :newline:`.`(仅限 AWS)
124
984
100
50
不适用
不适用
20
可用于处理大量内存中数据的最大 AWS 高内存机器。
HIGHMEM_X64_SL、. 高内存 CPU | L :newline:`.`(仅限 Azure)
92
654
100
32
不适用
不适用
20
可用于处理大量内存中数据的最大 Azure 高内存机器。
GPU_NV_S、. GPU | S :newline:`.`(仅限 AWS,巴黎和大阪地区除外)
6
27
100
高达 10
1 个 NVIDIA A10G
24
10
我们为开始使用 Snowpark 容器提供的最小 NVIDIA GPU 大小。
GPU_NV_M、. GPU | M :newline:`.`(仅限 AWS,巴黎和大阪地区除外)
44
178
100
40
4 个 NVIDIA A10G
24
10
针对密集型 GPU 使用场景进行了优化,如 Computer Vision 或 LLMs/VLMs。
GPU_NV_L、. GPU | L :newline:`.`(仅限 AWS,AWS US 西部和 US 东部地区可按需提供;其他地区可能能够在申请后有限提供)
92
1112
100
400
8 个 NVIDIA A100
40
按请求
LLMs 和群集等特殊和高级 GPU 案例的最大 GPU 实例。
GPU_NV_XS、. GPU | XS :newline:`.`(仅限 Azure,瑞士北部和 UAE 北部地区除外)
3
26
100
8
1 个 NVIDIA T4
16
10
我们为 Snowpark 容器提供的 Azure NVIDIA GPU 最小规格,助您快速入门。
GPU_NV_SM、. GPU | SM :newline:`.`(仅限 Azure,US 中部地区除外)
32
424
100
40
1 个 NVIDIA A10
24
10
为 Snowpark 容器提供的 Azure NVIDIA GPU 最小规格,助您快速入门。
GPU_NV_2M、. GPU | 2M :newline:`.`(仅限 Azure,中部 US 地区除外)
68
858
100
80
2 个 NVIDIA A10
24
5
针对密集型 GPU 使用场景进行了优化,如 Computer Vision 或 LLMs/VLMs。
GPU_NV_3M、. GPU | 3M :newline:`.`(仅限 Azure,北欧和 UAE 北部地区除外)
44
424
100
40
2 个 NVIDIA A100
80
按请求
针对内存密集型 GPU 使用场景进行了优化,如 Computer Vision 或 LLMs/VLMs。
GPU_NV_SL、. GPU | SL . (仅限 Azure,北欧和 UAE 北部地区除外)
92
858
100
80
4 个 NVIDIA A100
80
按请求
LLMs 和群集等特殊和高级 GPU 案例的最大 GPU 实例。
有关可用实例族的信息,请参阅 CREATE COMPUTE POOL。
计算池节点的自动扩缩¶
创建计算池后,Snowflake 会启动最低数量的节点,并自动创建更多节点,直至允许的最大数量。这就是 自动扩缩。当运行中的节点无法承担任何额外的工作负载时,系统就会分配新的节点。例如,假设计算池中的两个节点上运行着两个服务实例。如果在同一个计算池中执行另一个服务,额外的资源需求可能会促使 Snowflake 启动一个额外的节点。
但是,如果某个节点在特定时间内没有运行任何服务,Snowflake 会自动移除该节点,确保计算池在移除该节点后仍能保持所需的最少节点数。
管理计算池¶
Snowpark Container Services 提供以下命令来管理计算池:
监控: 使用 SHOW COMPUTE POOLS 命令可获取有关计算池的信息。
操作: 使用 ALTER COMPUTE POOL 命令可更改计算池的状态。
ALTER COMPUTE POOL <name> { SUSPEND | RESUME | STOP ALL }
暂停计算池时,Snowflake 会暂停除作业服务外的所有服务。作业服务会继续运行,直到达到结束状态(DONE 或 FAILED),之后计算池节点会被释放。
在启动新服务之前,必须先恢复已暂停的计算池。如果将计算池配置为自动恢复(将 AUTO_RESUME 属性设置为 TRUE),则当向计算池提交服务时,Snowflake 会自动恢复计算池。否则,需要运行 ALTER COMPUTE POOL 命令,手动恢复计算池。
修改: 使用 ALTER COMPUTE POOL 命令可更改计算池属性。
ALTER COMPUTE POOL <name> SET propertiesToAlter = <value> propertiesToAlter := { MIN_NODES | MAX_NODES | AUTO_RESUME | AUTO_SUSPEND_SECS | COMMENT }
降低 MAX_NODES 时,请注意以下潜在影响:
Snowflake 可能需要终止一个或多个服务实例,并在计算池中的其他可用节点上重新启动它们。如果 MAX_NODES 设置过低,Snowflake 可能无法调度某些服务实例。
如果被终止的节点正在执行作业服务,则作业执行将失败。Snowflake 不会重新启动该作业服务。
示例:
ALTER COMPUTE POOL MYPOOL SET MIN_NODES = 2 MAX_NODES = 2;
移除: 使用 DROP COMPUTE POOL 命令可移除计算池。
示例:
DROP COMPUTE POOL <name>
在删除计算池之前,必须先停止所有正在运行的服务。
列出计算池并查看属性: 使用 SHOW COMPUTE POOLS 和 DESCRIBE COMPUTE POOL 命令。有关示例,请参阅 显示计算池。
计算池生命周期¶
计算池可以处于以下任何一种状态:
IDLE: 计算池拥有所需的虚拟机 (VM) 节点数量,但没有安排任何服务。在这种状态下,由于缺乏活动,自动扩缩会将计算池缩小到最小规模。
ACTIVE: 计算池上至少有一个正在运行或计划运行的服务。计算池可以根据负载或用户操作而放大(至最大节点数)或缩小(至最小节点数)。
SUSPENDED: 计算池目前不包含运行中的虚拟机节点,但如果将 AUTO_RESUME 计算池属性设置为 TRUE,则计算池会在有服务计划时自动恢复。
下列状态为瞬态:
STARTING: 创建或恢复计算池时,计算池会进入 STARTING 状态,直到至少有一个节点完成预置。
STOPPING: 暂停计算池(使用 ALTER COMPUTE POOL)时,计算池会进入 STOPPING 状态,直到 Snowflake 释放了计算池中的所有节点。暂停计算池时,Snowflake 会暂停除作业服务外的所有服务。作业服务会继续运行,直到达到结束状态(DONE 或 FAILED),之后计算池节点会被释放。
RESIZING: 创建计算池时,计算池最初会进入 STARTING 状态。在预置了一个节点后,计算池会进入 RESIZING 状态,直到预置成功了最少的节点数(如 CREATE COMPUTE POOL 中所指定)。当您更改计算池 (ALTER COMPUTE POOL) 并更新最小和最大节点值时,计算池会进入 RESIZING 状态,直到预置成功了最小节点数。请注意,计算池的自动扩缩也会使其处于 RESIZING 状态。
计算池权限¶
使用计算池时,适用以下权限模型:
要在账户中创建计算池,当前角色需要对账户具有 CREATE COMPUTE POOL 权限。如果创建了计算池,那么作为所有者,您就具有 OWNERSHIP 权限,可以完全控制该计算池。对一个计算池具有 OWNERSHIP 权限并不意味着对其他计算池具有任何权限。
对于计算池,支持以下权限(功能):
权限
用途
MODIFY
允许更改任何计算池属性,包括更改大小。
MONITOR
允许查看计算池使用情况,包括描述计算池属性。
OPERATE
允许更改计算池的状态(暂停、恢复)。此外,还能停止任何已计划的服务(包括作业服务)。
USAGE
允许在计算池中创建服务。请注意,当计算池处于暂停状态且其 AUTO_RESUME 属性设置为 true 时,对计算池具有 USAGE 权限的角色在启动或恢复一项服务时可隐式触发计算池的恢复,即使该角色没有 OPERATE 权限。
OWNERSHIP
授予对计算池的完全控制权。同一时间只有一个角色可以在特定对象上拥有此权限。
ALL [ PRIVILEGES ]
授予对计算池的所有权限,OWNERSHIP 除外。
计算池维护¶
作为例行内部基础设施维护的一部分,Snowflake 定期更新旧的计算池节点,以确保最佳性能和安全性。这包括操作系统升级、驱动程序增强和安全修复。维护涉及每隔几周用更新的节点替换过时的节点,每个节点的活动时间最长可达一个月。
维护时段¶
计划维护每周一至周四进行,时间为当地时间 11 PM 至 5 AM,预计维护时段为 6 小时。
服务中断¶
在维护期间,受影响的计算池中的所有服务实例将自动在新节点上重新创建。正在进行的作业服务将会中断,客户必须在维护完成后重新启动这些服务。
注意
在维护时段或关键更新期间的服务中断不在 Snowflake 的支持策略和服务级别协议 中规定的服务级别范围内。
减少停机时间的最佳实践¶
使用高可用性技术,包括确保每个服务具有多个实例,这些实例可以分布在 多个 计算节点上,以避免单点故障。
监控维护计划并在维护时段外规划关键任务。
为作业服务实施自动重启过程。
执行定期备份或检查点。
如何在计算池上调度服务¶
创建服务 时,您可能会选择运行多个实例来管理传入负载。对计算池节点上的服务实例进行调度时,Snowflake 遵循以下一般准则:
一个服务实例中的所有容器始终在单个计算池节点上运行。也就是说,一个服务实例永远不会跨越多个节点。
运行多个服务实例时,Snowflake 可能会在同一节点或计算池内的不同节点上运行这些服务实例。在做出这一决定时,Snowflake 会考虑服务规范文件中列出的任何硬性资源要求(例如内存和 GPU)(请参阅 containers.resources 字段)。
例如,假设计算池中的每个节点都提供 8 GB 内存。如果您的服务规范对内存的要求为 6 GB,而您在创建服务时选择运行两个实例,则 Snowflake 无法在同一节点上运行两个实例。在这种情况下,Snowflake 会将每个实例分别安排在计算池内的单独节点上,以满足内存需求。
备注
Snowflake 支持供应用程序容器使用的暂存区挂载。Snowflake 内部暂存区是支持的存储卷类型之一。
为了获得最佳性能,Snowflake 现在将每个计算池节点的 暂存区卷 挂载总数限制为八个,无论这些卷是否属于同一服务实例、同一服务或不同服务。
当节点达到限制后,Snowflake 不会使用该节点启动使用暂存区卷的新服务实例。如果计算池中的所有节点都达到了限制,Snowflake 将无法启动服务实例。在这种情况下,当您执行 SHOW SERVICE CONTAINERS IN SERVICE 命令时,Snowflake 会返回 PENDING 状态,显示“Unschedulable due to insufficient resources”消息。
为适应节点的暂存区挂载分配限制,在某些情况下可以增加为计算池请求的最大节点数。这样可以确保更多节点可供 Snowflake 启动服务实例。
准则和限制¶
CREATE COMPUTE POOL 权限: 如果在当前角色下无法创建计算池,请咨询账户管理员以获授权限。例如:
GRANT CREATE COMPUTE POOL ON ACCOUNT TO ROLE <role_name> [WITH GRANT OPTION];
有关更多信息,请参阅 GRANT <privileges>。
每个账户对于计算池节点数的限制。您在账户中可以创建的节点数量(不考虑计算池的数量)限制为 120。此外,每个实例系列允许的节点数量是有限制的(请参阅 实例系列表 中的 节点限制 列)。如果出现类似以下的错误信息:
Requested number of nodes <#> exceeds the node limit for the account
,说明您遇到了此类限制。有关更多信息,请联系账户代表。