Snowpark Container Services:使用计算池

计算池是一个或多个虚拟机 (VM) 节点的集合,Snowflake 会在这些节点上运行您的 Snowpark Container Services 服务(包括作业服务)。可使用 CREATE COMPUTE POOL 命令创建计算池。然后,可在 创建服务执行作业服务 时指定该计算池。

创建计算池

计算池是一种账户级结构,类似于 Snowflake 虚拟仓库。计算池的命名范围是账户。也就是说,账户中不能有多个同名的计算池。

创建计算池至少需要以下信息:

  • 为计算池节点提供的机器类型(称为 实例系列

  • 启动计算池所需的最小节点数

  • 计算池可扩展到的最大节点数(Snowflake 负责管理扩展)。

如果预计在计算池中运行的服务会有大量负载或突发活动,可以将最小节点数设置为大于 1。这种方法可确保在需要时可以随时使用其他节点,而不是等待自动扩缩启动。

设置最大节点限制可防止 Snowflake 自动扩缩时将大量意外节点添加到计算池中。这在遇到意外负载峰值或代码中出现问题等情况下至关重要,这些情况可能导致 Snowflake 分配的计算池节点数量超过最初计划。

使用 Snowsight 或 SQL 创建计算池:

Snowsight:
  1. 选择 Admin » Compute pools

  2. 在导航栏底部选择用户名,然后切换到 ACCOUNTADMIN 角色或任何允许创建计算池的角色。

  3. 选择 + Compute Pool

  4. New compute pool UI 中,指定所需的信息(计算池名称、实例系列和节点限制)。

  5. 选择 Create Compute Pool

SQL:

执行 CREATE COMPUTE POOL 命令。

例如,下面的命令创建了一个单节点计算池:

CREATE COMPUTE POOL tutorial_compute_pool
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = CPU_X64_XS;
Copy

实例系列明确了要为计算池中的计算节点配置的机器类型。创建计算池时指定实例系列类似于在创建仓库时指定仓库大小(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 }
    
    Copy

    暂停计算池时,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 }
    
    Copy

    降低 MAX_NODES 时,请注意以下潜在影响:

    • Snowflake 可能需要终止一个或多个服务实例,并在计算池中的其他可用节点上重新启动它们。如果 MAX_NODES 设置过低,Snowflake 可能无法调度某些服务实例。

    • 如果被终止的节点正在执行作业服务,则作业执行将失败。Snowflake 不会重新启动该作业服务。

      示例:

      ALTER COMPUTE POOL MYPOOL SET MIN_NODES = 2  MAX_NODES = 2;
      
      Copy
  • 移除: 使用 DROP COMPUTE POOL 命令可移除计算池。

    示例:

    DROP COMPUTE POOL <name>
    
    Copy

    在删除计算池之前,必须先停止所有正在运行的服务。

  • 列出计算池并查看属性: 使用 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;
    
    Copy
  • 默认情况下,会将默认计算池上的 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>;
    
    Copy

准则和限制

  • CREATE COMPUTE POOL 权限: 如果在当前角色下无法创建计算池,请咨询账户管理员以获授权限。例如:

    GRANT CREATE COMPUTE POOL ON ACCOUNT TO ROLE <role_name> [WITH GRANT OPTION];
    
    Copy

    有关更多信息,请参阅 GRANT <privileges>

  • 每个账户对于计算池节点数的限制。您在账户中可以创建的节点数量(不考虑计算池的数量)限制为 120。此外,每个实例系列允许的节点数量是有限制的(请参阅 实例系列表 中的 节点限制 列)。如果出现如下所示的错误信息:Requested number of nodes <#> exceeds the node limit for the account,说明您遇到了此类限制。如需了解更多信息,请联系您的客户代表。

语言: 中文