编排

如果您对 Vertex AI 训练集群感兴趣,请与您的销售代表联系以获取访问权限。

Vertex AI 训练集群使用 Simple Linux Utility for Resource Management (Slurm) 作为编排器,用于管理和调度集群上的作业。

Slurm 是一种广泛使用的开源集群管理和作业调度系统,以其出色的可伸缩性和容错能力而闻名。

Slurm 的主要功能

  • Slurm 会分配一组计算节点,供特定作业在指定的时间段内独占使用。这样可确保作业能够专门访问运行所需的资源,而不会受到干扰。
  • Slurm 提供了一个框架,用于管理作业的整个生命周期,从提交和执行到监控和完成。此系统专门用于处理在一组已分配的节点上运行的并行作业。
  • Slurm 会维护一个待处理作业队列,并使用复杂的优先级确定引擎来仲裁对计算资源的访问。通过考虑作业规模、用户优先级和等待时间等因素,该系统可确保整个集群中的资源得到公平高效的利用。

基本集群配置

在运行作业之前,您必须定义 Slurm 集群的基本结构。本部分详细介绍了必要的配置设置,包括如何将计算节点组织到分区中、指定专用登录节点池,以及为用户配置共享主目录。

分区

分区将节点分组为逻辑集,这有助于管理不同的机器类型或访问层级。它们在 slurm_spec 的分区字段中定义为列表。

每个分区对象都具有以下必需字段:

  • id:分区的唯一标识符。
  • node_pool_ids:一个列表,其中包含属于相应分区的一个或多个节点池的 ID。

例如:

"partitions": [
  {
    "id": "a4",
    "node_pool_ids": [ "a4" ]
  }
]

登录节点

登录节点池提供专用节点,充当用户与集群互动的主要入口点。login_node_pool_id 字段用于指定相应池的唯一标识符。

例如:

"login_node_pool_id": "login"

主目录存储空间

home_directory_storage 字段指定要作为集群中所有节点上的 /home 目录装载的 Filestore 实例。这会为所有用户提供一个共享的持久性主目录。

您必须为此值提供 Filestore 实例的完整资源名称。

例如:

"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"

高级 Slurm 配置

借助 Vertex AI 训练集群,您可以自定义一组选定的 slurm.conf 参数,但请注意,这些设置只能在初始集群创建期间进行配置,之后无法更改。

会计

借助 Vertex AI 训练集群,您可以使用内置的结算功能来跟踪集群内的资源使用情况。如需获取有关如何监控作业特定 CPU 时间和内存用量等指标的完整指南,请参阅官方 Slurm 结算文档

参数 示例
AccountingStorageEnforce 以英文逗号分隔的字符串 associations,limits,qos

抢占和优先级

为了管理作业的调度和优先级,Vertex AI 训练集群允许您配置 Slurm 的作业抢占。抢占功能与多因素优先级插件搭配使用,以确定是否应暂停正在运行的作业,以便为优先级更高的工作让路。

如需查看完整的概念性概览,请参阅有关多因素优先级插件抢占的官方 Slurm 文档。

抢占参数

参数 示例
PREEMPT_TYPE 字符串 preempt/partition_prio
PREEMPT_MODE 以英文逗号分隔的字符串 SUSPEND,GANG
PREEMPT_EXEMPT_TIME 字符串 00:00:00

优先级参数

参数 示例
PRIORITY_TYPE 字符串 priority/multifactor
PRIORITY_WEIGHT_AGE 整数 0
PRIORITY_WEIGHT_ASSOC 整数 0
PRIORITY_WEIGHT_FAIRSHARE 整数 0
PRIORITY_WEIGHT_JOB_SIZE 整数 0
PRIORITY_WEIGHT_PARTITION 整数 0
PRIORITY_WEIGHT_QOS 整数 0
PRIORITY_WEIGHT_TRES 以英文逗号分隔的字符串 cpu=100,mem=150

prolog 和 epilog 脚本

您可以配置自定义 Bash 脚本,使其在每个作业开始时(序言)和结束时(后记)自动运行,方法是使用以下字段:

  • prolog_bash_scripts:一个字符串列表,其中每个字符串都包含要在作业开始之前执行的 Bash 脚本的完整内容。
  • epilog_bash_scripts:一个字符串列表,其中每个字符串都包含在作业完成后要执行的 Bash 脚本的完整内容。

这对于设置独特的作业环境或执行自动化清理任务非常有用。

集群规范示例

以下示例展示了用于创建训练集群的完整 JSON 配置。您可以根据自己的需求调整此规范。

{
  // ... other cluster configurations ...
  "orchestratorSpec": {
    "slurmSpec": {
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": ["a4"]
        }
      ],
      "login_node_pool_id": "login",
      "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      // ... other Slurm settings ...
    }
  }
}

集群管理和运营

管理正在运行的集群

使用所选的资源用量统计和抢占设置创建集群后,您可以使用 Slurm 的命令行工具来管理用户账号和监控作业调度。

使用 sacctmgr 进行账号管理

sacctmgr 命令是用于管理 Slurm 数据库中用户和账号信息的主要工具。例如,如需向账号添加新用户并授予其对分区的访问权限,请运行以下命令:

sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>

如需查看所有 sacctmgr 选项的完整列表,请参阅官方 Slurm 结算文档

检查作业优先级

如需检查队列中每个作业的优先级组件,请使用 sprio 实用程序。这有助于了解为什么某些作业会安排在其他作业之前运行。

如需了解详细用法,请参阅 sprio 实用程序文档。

抢占示例

Slurm 官方文档提供了几个不同抢占策略的有效示例。您可以在 Slurm 抢占页面上找到这些示例。

后续步骤

以下内容侧重于机器学习生命周期的最后几个步骤:管理、部署和监控经过训练的模型。

  • 部署模型以进行推理:将经过训练的模型部署到 Vertex AI 端点,以便大规模处理在线推理请求。
  • 管理模型生命周期:使用 Vertex AI Model Registry 对模型进行版本控制、对比和管理。可以配置流水线,在训练成功后自动注册新模型。
  • 监控流水线运行作业和模型性能:
    • 流水线监控:跟踪流水线运行作业的执行图、制品和性能,以调试问题并优化编排。
    • 模型监控:部署后,设置监控以检测模型预测性能方面的漂移和异常情况,这有助于确保模型在长期运行中始终保持准确。
  • 优化费用并管理集群生命周期:使用自动化流水线时,请根据运行频率管理集群的生命周期。
    • 对于运行频率较低的情况,可以添加最后一个流水线步骤来删除集群,以节省费用。这通常需要创建一个调用删除函数的自定义流水线组件
    • 对于运行频繁的情况,请保持集群处于活跃状态,以缩短作业启动时间。