Snowpark Container Services:使用计算池¶
计算池是一个或多个虚拟机 (VM) 节点的集合,Snowflake 会在这些节点上运行您的 Snowpark Container Services 服务(包括作业服务)。可使用 CREATE COMPUTE POOL 命令创建计算池。然后,可在 创建服务 或 执行作业服务 时指定该计算池。
创建计算池¶
计算池是一种账户级结构,类似于 Snowflake 虚拟仓库。计算池的命名范围是账户。也就是说,账户中不能有多个同名的计算池。
创建计算池至少需要以下信息:
为计算池节点提供的机器类型(称为 实例系列)
启动计算池所需的最小节点数
计算池可扩展到的最大节点数(Snowflake 负责管理扩展)。
如果预计在计算池中运行的服务会有大量负载或突发活动,可以将最小节点数设置为大于 1。这种方法可确保在需要时可以随时使用其他节点,而不是等待自动扩缩启动。
设置最大节点限制可防止 Snowflake 自动扩缩时将大量意外节点添加到计算池中。这在遇到意外负载峰值或代码中出现问题等情况下至关重要,这些情况可能导致 Snowflake 分配的计算池节点数量超过最初计划。
使用 Snowsight 或 SQL 创建计算池:
- Snowsight:
选择 Admin » Compute pools。
在导航栏底部选择用户名,然后切换到 ACCOUNTADMIN 角色或任何允许创建计算池的角色。
选择 + Compute Pool。
在 New compute pool UI 中,指定所需的信息(计算池名称、实例系列和节点限制)。
选择 Create Compute Pool。
- SQL:
执行 CREATE COMPUTE POOL 命令。
例如,下面的命令创建了一个单节点计算池:
CREATE COMPUTE POOL tutorial_compute_pool MIN_NODES = 1 MAX_NODES = 1 INSTANCE_FAMILY = CPU_X64_XS;
实例系列明确了要为计算池中的计算节点配置的机器类型。创建计算池时指定实例系列类似于在创建仓库时指定仓库大小(XSMALL、SMALL、MEDIUM、LARGE 等)。下表列出了可用的机器类型。
INSTANCE_FAMILY、Snowflake 服务消耗表 映射
vCPU
内存 (GiB)
存储 (GB)
带宽限制 (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
300 (NVMe)
高达 10
1 个 NVIDIA A10G
24
10
我们为开始使用 Snowpark 容器提供的最小 NVIDIA GPU 大小。
GPU_NV_M、. GPU | M :newline:`.`(仅限 AWS,巴黎和大阪地区除外)
44
178
3.4 TB (NVMe)
40
4 个 NVIDIA A10G
24
10
针对密集型 GPU 使用场景进行了优化,如 Computer Vision 或 LLMs/VLMs。
GPU_NV_L、. GPU | L :newline:`.`(仅限 AWS,AWS US 西部和 US 东部地区可按需提供;其他地区可能能够在申请后有限提供)
92
1112
6.8 TB (NVMe)
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 会自动移除该节点,确保计算池在移除该节点后仍能保持所需的最少节点数。
管理计算池¶
您可以使用 Snowsight 或 SQL 管理计算池。
在 Snowsight 中,选择计算池名称旁边的更多选项 (...),然后从菜单中选择所需的操作。本节将介绍用来管理计算池的 SQL 命令。
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 会在升级的节点上逐步重新创建服务实例。每次更换的服务实例不超过 50%。请注意,这可能会导致可用实例少于为服务请求的 MIN_INSTANCES。如果可用实例减少到少于 MIN_READY_INSTANCES,则会导致服务从 READY 状态过渡到 PENDING 状态,从而造成服务中断。因此,为避免服务中断,可考虑将 MIN_READY_INSTANCES 设置为低于 MIN_INSTANCES 的 50%。
正在进行的作业服务将会中断,客户必须在维护完成后重新启动这些服务。
注意
在维护时段或关键更新期间的服务中断不在 Snowflake 的支持策略和服务级别协议 中规定的服务级别范围内。
减少停机时间的最佳实践¶
运行多个服务实例: 拥有多个实例可最大限度地减少维护期间服务中断的情况,确保高可用性。
在持久存储中存储应用程序状态: 在持久存储(包括块存储、Snowflake 暂存区或 Snowflake 表)上存储数据和有状态的对象。
捕捉 SIGTERM 信号: 在终止服务实例时,Snowflake 会首先将 SIGTERM 信号发送到每个服务容器(请参见 服务终止)。在信号处理过程中,容器代码可以在关闭或重启服务实例之前保存服务状态。
设计高可用性服务,使其在维护期间以降级状态运行: 要在维护期间保持可用性,您的服务必须能够承受只有 50% 的实例保持运行。
提供就绪探针: 如果不提供就绪探针,Snowflake 会假定服务实例在代码开始执行时就已就绪。通常情况下,容器完成初始化并准备好处理请求需要一些时间。您应在服务配置中提供就绪探针,以明确告诉 Snowflake 服务实例何时可以处理请求。
监控维护计划: 避免在维护窗口期间安排关键任务。
避免在维护窗口期间调度作业服务运行: Snowflake 可能会在维护窗口期间取消正在运行的作业。
定期备份或执行检查点: 在持久存储(包括块存储、Snowflake 暂存区或 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 启动服务实例。
笔记本的默认计算池¶
从 8.46 版本开始,Snowflake 会在每个 Snowflake 账户(试用账户除外)中自动提供两个计算池,用于运行笔记本应用程序。这些计算池专门用于运行笔记本,不能用于创建 Snowpark Container Services 服务。
计算池名称(如 Snowsight UI 中所示): SYSTEM_COMPUTE_POOL_GPU
实例系列: GPU_NV_S(请参见 实例系列表)
默认配置:
MIN_NODES=1
MAX_NODES=25
INITIALLY_SUSPENDED=true
AUTO_SUSPEND_SECS=600
计算池名称(如 Snowsight UI 中所示): SYSTEM_COMPUTE_POOL_CPU
实例系列: CPU_X64_S
默认配置:
MIN_NODES=1
MAX_NODES=5
INITIALLY_SUSPENDED=true
AUTO_SUSPEND_SECS=600
默认配置属性代表如下含义:
计算池最初处于暂停状态,只有当其中的笔记本启动时才开始产生成本。
如果没有笔记本在运行,这些计算池会在 10 分钟后自动暂停。请注意以下事项:
默认情况下,笔记本在闲置 30 分钟后会自动暂停。所有笔记本均停止在默认计算池上运行后,Snowflake 会在 10 分钟后暂停计算池。
要修改默认计算池的自动暂停策略,请使用 ALTER COMPUTE POOL SET AUTO_SUSPEND_SECS 命令。您还可以调整笔记本自动暂停策略。有关更多信息,请参阅 空闲时间和重新连接。
为方便起见,提供了默认计算池。虽然 Snowflake 账户中的任何角色都可以创建笔记本,但只有 ACCOUNTADMIN 角色才有权创建计算池。通过使用默认计算池,用户无需账户管理员配置计算池即可创建笔记本。
这些计算池专用于笔记本工作负载,您可以将 预算 与默认计算池关联,以管理笔记本成本。
请注意以下有关默认计算池权限的内容:
在 Snowflake 账户中,ACCOUNTADMIN 角色拥有这些计算池。管理员可以完全控制计算池,包括修改其属性、暂停操作和监控使用情况。如果不需要 Snowflake 创建的默认计算池,ACCOUNTADMIN 角色可以删除它们。例如:
USE ROLE ACCOUNTADMIN; ALTER COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU STOP ALL; DROP COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU;
默认情况下,会将默认计算池上的 USAGE 权限授予 PUBLIC 角色,允许账户中的所有角色使用它们。不过,如有必要,ACCOUNTADMIN 可以修改这些权限以限制访问。
要限制账户中的特定角色访问默认计算池,可使用 ACCOUNTADMIN 角色撤销 PUBLIC 角色的 USAGE 权限,并将其授予所需的角色。例如:
USE ROLE ACCOUNTADMIN; REVOKE USAGE ON COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU FROM ROLE PUBLIC; GRANT USAGE ON COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU TO ROLE <role-name>;
准则和限制¶
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
,说明您遇到了此类限制。如需了解更多信息,请联系您的客户代表。