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;
Copy

INSTANCE_FAMILY 标识了要为计算池中的计算机节点预置的机器类型。创建计算池时指定 INSTANCE_FAMILY 类似于创建仓库时指定仓库大小(XSMALL、SMALL、MEDIUM、LARGE 等)。下表列出了可用的机器类型。

` 使用量表 <https://www.snowflake.cn/legal-files/CreditConsumptionTable.pdf>`_ 映射

INSTANCE_FAMILY

vCPU

内存 (GiB)

存储 (GiB)

GPU

每个 GPU 的 GPU 内存 (GiB)

最大Limit

描述

CPU | XS

CPU_X64_XS

2

8

250

不适用

不适用

50

可用于 Snowpark 容器的最小实例。非常适合节省成本和入门。

CPU | S

CPU_X64_S

4

16

250

不适用

不适用

50

非常适合托管多个服务/作业,同时节省成本。

CPU | M

CPU_X64_M

8

32

250

不适用

不适用

20

非常适合拥有全栈应用程序或多种服务

CPU | L

CPU_X64_L

32

128

250

不适用

不适用

20

适用于需要异常大量 CPUs、内存和存储的应用程序。

高内存 CPU | S

HIGHMEM_X64_S

8

64

250

不适用

不适用

20

适用于内存密集型应用程序。

高内存 CPU | M

HIGHMEM_X64_M

32

256

250

不适用

不适用

20

适用于在单台机器上托管多个内存密集型应用程序。

高内存 CPU | L

HIGHMEM_X64_L

128

1024

250

不适用

不适用

20

可用于处理大量内存中数据的最大高内存机器。

GPU | S

GPU_NV_S

8

32

250

1 个 NVIDIA A10G

24

10

我们为开始使用 Snowpark 容器提供的最小 NVIDIA GPU 大小。

GPU | M

GPU_NV_M

48

192

250

4 个 NVIDIA A10G

24

5

针对密集型 GPU 使用场景进行了优化,如 Computer Vision 或 LLMs/VLMs

GPU | L

GPU_NV_L

96

1152

250

8 个 NVIDIA A100

40

按请求

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 }
    
    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 会对旧的计算池节点进行更新。这一过程涉及一系列基本任务,例如操作系统升级、硬盘增强,以及解决计算池节点中存在的任何安全漏洞等。

在这些维护过程中,计算池节点会定期(每隔几周)离线,替换为更新后的节点。计算池节点的有效时间最长为一个月,在此之后,Snowflake 会停用该节点,并将其替换为更新后的节点。出现这种情况时:

  • 当前在这些计算池中运行的所有服务实例都将自动在新节点上重新创建。

  • 所有持续进行的作业服务都将受到干扰,客户需要在计算池再次运行后重新启动这些作业服务。

预计维护时间约为 30 分钟。

这些内部基础设施更新的时间为:当地时间每周二、周三、周四和周五的上午 8 点到下午 1 点。

如何在计算池上调度服务

创建服务 时,您可能会选择运行多个实例来管理传入负载。对计算池节点上的服务实例进行调度时,Snowflake 遵循以下一般准则:

  • 一个服务实例中的所有容器始终在单个计算池节点上运行。也就是说,一个服务实例永远不会跨越多个节点。

  • 运行多个服务实例时,Snowflake 可能会在同一节点或计算池内的不同节点上运行这些服务实例。在做出这一决定时,Snowflake 会考虑服务规范文件中列出的任何硬性资源要求(例如内存和 GPU)(请参阅 containers.resources 字段)。

    例如,假设计算池中的每个节点都提供 8 GB 内存。如果您的服务规范对内存的要求为 6 GB,而您在创建服务时选择运行两个实例,则 Snowflake 无法在同一节点上运行两个实例。在这种情况下,Snowflake 会将每个实例分别安排在计算池内的单独节点上,以满足内存需求。

准则和限制

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

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

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

  • 每个账户对于计算池节点数的限制。对于任何给定的实例族(请参阅 CREATE COMPUTE POOL),每个账户对于在任何时候的活动节点总数都有限制。如果出现类似以下的错误信息:Requested number of nodes <#> exceeds the node limit for the account,说明您遇到了此类限制。如需了解更多信息,请联系您的客户代表。

语言: 中文