本教程介绍如何在 Compute Engine 上部署 Slurm 集群。Slurm Resource Manager 是许多高性能计算中心常用的资源管理器。如需了解与高性能计算术语和用例相关的讨论,请参阅使用集群在云端进行大规模技术计算。
下图展示了您在本教程中创建的配置。
作为集群工作负载管理器,Slurm 执行以下操作:
- 为用户分配资源(计算节点)。
- 提供在节点上启动、执行和监控工作的结构。
- 管理待处理的工作队列。
为本教程开发的部署是一个简化的集群架构,支持少量用户运行单应用工作负载。您可以对适用于本地集群或多云端集群的多工作负载部署、大规模生产部署和混合部署使用其他配置,但这些配置不在本教程的介绍范围内。
在本教程中,您将使用登录(头)节点与系统进行交互。部署集群后,您可以使用 SSH 连接到登录节点,安装应用,并使用 Slurm 命令行工具提交作业进行计算。在控制器节点上运行的 Slurm 调度器将可用资源与作业要求相匹配来调度已加入队列的作业,并管理计算节点上的作业执行。NFS 服务器为文件提供通用共享空间。
目标
- 使用 Cloud Deployment Manager 部署 Slurm 集群。
- 使用 Slurm 运行作业。
- 查询集群信息并监控 Slurm 中正在运行的作业。
- 自动扩缩节点以适应作业参数和要求。
费用
本教程使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用。
完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理。
准备工作
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
- 启用 Compute Engine and Deployment Manager API。
-
在 Cloud Console 中,激活 Cloud Shell。
Cloud Shell 会话随即会在 Cloud Console 的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Cloud SDK 的 Shell 环境,其中包括
gcloud
命令行工具以及已为当前项目设置的值。该会话可能需要几秒钟时间来完成初始化。
部署 Slurm 集群
在本部分中,您将准备集群配置,使用 Deployment Manager 将 Slurm 集群部署到 Google Cloud,然后验证集群是否正常运行。
准备集群配置
在 Cloud Shell 中,克隆
slurm-gcp
GitHub 代码库:git clone https://github.com/SchedMD/slurm-gcp.git
定义以下环境变量:
export CLUSTER_DEPLOY_NAME="cluster-deployment-name" export CLUSTER_NAME="cluster-name" export CLUSTER_REGION="cluster-region" export CLUSTER_ZONE="cluster-zone"
替换以下内容:
cluster-deployment-name
:集群部署的唯一名称。cluster-name
:集群的唯一名称。cluster-region
:部署集群的区域。选择一个靠近您所在位置的区域。如需了解详情,请参阅区域和地区。cluster-zone
:部署集群的地区。
在
slurm-gcp
文件夹中,将slurm-cluster.yaml
文件复制到${CLUSTER_DEPLOY_NAME}.yaml
文件:cd slurm-gcp cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
在文本编辑器中,根据您的环境修改
${CLUSTER_DEPLOY_NAME}.yaml
文件。使用slurm.jinja.schema
文件中定义的类型,此文件指定除default_users
值以外的所有配置属性的默认值和允许值。进行以下必要的更改:cluster_name
:将您的集群名称更改为cluster-name
。region
和zone
:替换为cluster-region
和cluster-zone
compute_machine_type
:(可选)如需使用其他机器类型,请更改compute_machine_type
值。例如,如果您需要的 CPU 核心数或内存高于默认选项n1-standard-2
的可用核心数和内存,请选择n1-standard-4
。如需了解详情,请参阅机器类型。vpc_net
和vpc_subnet
:(可选)使用现有的 Virtual Private Cloud (VPC) 网络和 VPC 子网。slurm.jinja.schema
文件中描述了网络和子网要求。如果未指定值,则系统会为集群创建新网络或子网。如需了解详情,请参阅 VPC 网络。
保存文件。
使用 Deployment Manager 部署 Slurm 集群
在 Cloud Shell 中,使用 Deployment Manager 将集群部署到 Google Cloud:
gcloud deployment-manager deployments \ --project="$(gcloud config get-value core/project)" \ create $CLUSTER_DEPLOY_NAME \ --config ${CLUSTER_DEPLOY_NAME}.yaml
输出类似于以下内容:
The fingerprint of the deployment is VWVaIYX1mFpjv9UDhzalYQ== Waiting for create [operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545]...done. Create operation operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545 completed successfully. NAME TYPE STATE ERRORS INTENT helloworld-all-internal-firewall-rule compute.v1.firewall IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute-image compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute1 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute2 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-controller compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-login1 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-router compute.v1.router IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-slurm-network compute.v1.network IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-slurm-subnet compute.v1.subnetwork IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-ssh-firewall-rule compute.v1.firewall IN_PREVIEW [] CREATE_OR_ACQUIRE
集群配置需要 5-10 分钟才能完成。跟踪配置的进度:
gcloud compute ssh ${CLUSTER_NAME}-controller \ --command "sudo journalctl -fu google-startup-scripts.service" \ --zone $CLUSTER_ZONE
脚本完成运行后,您的 Slurm 集群就可以使用了。输出以下列行结束:
Started Google Compute Engine Startup Scripts.
如需停止监控配置,请按 Control+C。
验证集群是否正常运行
在 Cloud Shell 中,登录到登录节点,检查集群是否已准备就绪:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list \ --zones ${CLUSTER_ZONE} \ --filter="name ~ .*login." \ --format="value(name)" | head -n1) gcloud compute ssh ${CLUSTER_LOGIN_NODE} \ --zone $CLUSTER_ZONE
如果输出类似于以下内容,则表示集群已准备就绪:
SSSSSSS SSSSSSSSS SSSSSSSSS SSSSSSSSS SSSS SSSSSSS SSSS SSSSSS SSSSSS SSSSSS SSSSSSS SSSSSS SSSS SSSSSSSSS SSSS SSS SSSSSSSSS SSS SSSSS SSSS SSSSSSSSS SSSS SSSSS SSS SSSSSS SSSSSSSSS SSSSSS SSS SSSSSS SSSSSSS SSSSSS SSS SSSSSS SSSSSS SSS SSSSS SSSS SSSSSSS SSSS SSSSS S SSS SSSSSSSSS SSS S SSS SSSS SSSSSSSSS SSSS SSS S SSS SSSSSS SSSSSSSSS SSSSSS SSS S SSSSS SSSSSS SSSSSSSSS SSSSSS SSSSS S SSSSS SSSS SSSSSSS SSSS SSSSS S S SSS SSS SSS SSS S S S S S SSS SSS SSS SSS SSSSSSSSSSSS SSS SSSS SSSS SSSSSSSSS SSSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSS SSS SSSS SSSS SSSSSSSSSS SSSSSSSSSSSSSSSSSSSSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSSS SSS SSSSSSSSSSSSSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSSSSSSSSSSS SSSS SSSS SSSS SSSS
如需退出集群,请按
Control+D
。集群准备就绪后,安排作业以验证其是否正常运行。此作业在集群中的多个节点上运行
hostname
命令。gcloud compute ssh ${CLUSTER_NAME}-login1 \ --command 'sbatch -N2 --wrap="srun hostname"' --zone $CLUSTER_ZONE gcloud compute ssh ${CLUSTER_NAME}-login1 \ --command 'cat slurm-*.out' --zone $CLUSTER_ZONE
输出类似于以下内容:
helloworld-compute1 helloworld-compute2
您现在拥有了一个正常运行的集群。
自动扩缩 Slurm 集群
部署 Slurm 集群时,您需要为 max_node_count
和 static_node_count
属性指定值。max_node_count
值确定您的集群在任何给定时间运行的计算节点的数量上限。static_node_count
值指定始终运行的计算节点数量。默认情况下,slurm-cluster.yaml
文件将 max_node_count
设置为 10
,将 static_node_count
设置为 2
。
这两个数值之间的差值 (max_node_count
- static_node_count
) 是集群中的临时节点数。临时节点是根据作业调度请求按需创建的。在目标作业执行完成后,除非集群可以使用这些临时节点执行其他作业,否则这些节点将被销毁。在 Google Cloud 上,Slurm 节能机制仅在必要时实例化临时节点以自动扩缩集群。
在 Cloud Shell 中,查看节点数:
sinfo
输出类似于以下内容:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 8 idle~ demo-compute[3-10] debug* up infinite 2 idle demo-compute[1-2]
输出第一行中
STATE
描述符idle
的后缀~
表示有 8 个临时节点处于节能模式。如需自动扩缩集群,请创建 3 个临时节点:
sbatch -N5 --wrap="srun hostname"
输出类似于以下内容:
Submitted batch job JOB_ID
再次查看节点数:
sinfo
输出类似于以下内容:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 3 alloc# demo-compute[3-5] debug* up infinite 5 idle~ demo-compute[6-10] debug* up infinite 2 idle demo-compute[1-2]
输出第一行中
STATE
描述符alloc
的后缀#
表示创建了 3 个临时节点。创建和配置其他节点后,它们将运行作业,然后在短暂延迟后被销毁。
清理
若要避免产生费用,最简单的方法是删除您为本教程创建的 Cloud 项目。或者,您也可以删除各个资源。删除项目
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除 Slurm 集群
删除集群:
gcloud deployment-manager deployments delete slurm
后续步骤
- 试用其他 Google Cloud 功能。查阅我们的教程。