编排

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

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

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

Slurm 的主要功能

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

基本集群配置

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

分区

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

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

  • 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 配置

Gemini Enterprise Agent Platform 训练集群允许您自定义一组选定的 slurm.conf 参数,但请注意,这些设置只能在初始集群创建期间配置,之后无法更改。

会计

Gemini Enterprise Agent Platform 训练集群允许您使用内置的会计功能来跟踪集群内的资源使用情况。如需获取有关如何监控 特定于作业的 CPU 时间和内存用量等指标的完整指南,请参阅官方 Slurm 会计文档

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

抢占和优先级

为了管理作业的调度和优先级,Gemini Enterprise Agent Platform 训练集群允许您配置 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) 和结尾 (epilog) 自动运行:

  • 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 抢占页面上找到这些示例。

后续步骤

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

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