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 对模型进行版本控制、对比和管理。可以配置流水线,在训练成功后自动注册新模型。
- 监控流水线运行作业和模型性能:
- 流水线监控:跟踪流水线运行作业的执行图、制品和性能,以调试问题并优化编排。
- 模型监控:部署后,设置监控以检测模型预测性能方面的漂移和异常情况,这有助于确保模型在长期运行中始终保持准确。
- 优化费用并管理集群生命周期:使用自动化流水线时,请根据运行频率管理集群的生命周期。