编排

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

Gemini Enterprise Agent Platform 训练集群使用 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" ]
  }
]

提交的作业(未指定 --partition)会在默认分区上运行。如需指定默认分区,请将 slurm_spec 中的 default_partition_id 设置为某个分区的 id。如果您未设置此属性,则列表中的第一个分区为默认分区。

登录节点

登录节点池提供专用节点,这些节点是用户与集群互动的主要入口点。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 配置

借助 Gemini Enterprise Agent Platform 训练集群,您可以设置 slurm.conf 参数并在运行的集群上更改这些参数。请参阅 Slurm 配置映射。

资源用量、抢占和优先级

每个集群上都启用了 Slurm 统计信息,因此您可以跟踪每个作业的资源使用情况,例如 CPU 时间和内存。您还可以通过 config 强制执行资源用量限制、加权作业优先级和启用抢占,如示例集群规范中所示。如需了解这些功能的工作原理,请参阅 Slurm 文档,了解结算、多因素优先级插件和抢占。

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",
      "config": {
        "AccountingStorageEnforce": "associations,limits,qos",
        "PriorityType": "priority/multifactor",
        "PriorityWeightAge": "1000",
        "PriorityWeightFairshare": "10000",
        "PreemptType": "preempt/partition_prio",
        "PreemptMode": "REQUEUE",
        "PreemptExemptTime": "00:10:00"
      },
      "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 抢占页面上找到这些示例。

后续步骤

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

  • 部署模型以进行推理:将经过训练的模型部署到 Gemini Enterprise Agent Platform 端点,以便大规模处理在线推理请求。
  • 管理模型生命周期:使用 Gemini Enterprise Agent Platform Model Registry 对模型进行版本控制、对比和管理。可以配置流水线,在训练成功后自动注册新模型。
  • 监控流水线运行作业和模型性能:
  • 优化费用并管理集群生命周期:使用自动化流水线时,请根据运行频率管理集群的生命周期。
    • 对于运行频率较低的情况,可以添加最后一个流水线步骤来删除集群,以节省费用。这通常需要创建一个调用删除函数的自定义流水线组件。
    • 对于运行频繁的情况,请保持集群处于活跃状态,以缩短作业启动时间。