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