在多队列模式集群中运行作业 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在多队列模式集群中运行作业

本教程将指导您完成在上运行您的第一个 Hello World 作业Amazon ParallelCluster和多队列模式.

先决条件

配置您的集群

首先,验证一下Amazon ParallelCluster通过运行以下命令已创建。

$ pcluster version

有关 pcluster version 的更多信息,请参阅 pcluster version

此命令将返回的运行版本Amazon ParallelCluster.

接下来,运行pcluster configure生成基本配置文件。按照此命令后面的所有提示进行操作。

$ pcluster configure --config multi-queue-mode.yaml

有关 pcluster configure 命令的更多信息,请参阅pcluster configure

完成此步骤后,文件配置文件应如下multi-queue-mode.yaml. 此文件应包含基本集群配置。

在下一步中,您将修改新的配置文件并启动包含多个队列的集群。

注意

本教程中使用的某些实例不符合免费套餐资格。

在本教程中,修改您的配置文件以匹配以下配置。以红色突出显示的项目代表您的配置文件值。保持自己的价值观。

Region: region-id Image: Os: alinux2 HeadNode: InstanceType: c5.xlarge Networking: SubnetId: subnet-abcdef01234567890 Ssh: KeyName: yourkeypair Scheduling: Scheduler: slurm SlurmQueues: - Name: spot ComputeResources: - Name: c5xlarge InstanceType: c5.xlarge MinCount: 1 MaxCount: 10 - Name: t2micro InstanceType: t2.micro MinCount: 1 MaxCount: 10 Networking: SubnetIds: - subnet-abcdef01234567890 - Name: ondemand ComputeResources: - Name: c52xlarge InstanceType: c5.2xlarge MinCount: 0 MaxCount: 10 Networking: SubnetIds: - subnet-021345abcdef6789

创建 集群

创建一个名为的集群multi-queue-cluster根据你的配置文件:

$ pcluster create-cluster --cluster-name multi-queue-cluster --cluster-configuration multi-queue-mode.yaml { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.2.1", "clusterStatus": "CREATE_IN_PROGRESS" } }

有关美国pcluster create-cluster命令,请参见pcluster create-cluster.

要查看集群的状态,请运行以下命令:

$ pcluster list-clusters { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.2.1", "clusterStatus": "CREATE_IN_PROGRESS" } }

创建集群时,clusterStatus字段将显示CREATE_COMPLETE.

登录到头节点

使用您的私有 SSH 密钥文件登录头节点。

$ pcluster ssh --cluster-name multi-queue-cluster -i ~/path/to/yourkeyfile.pem

有关 pcluster ssh 的更多信息,请参阅 pcluster ssh

登录后,运行sinfo命令来验证您的调度器队列是否已设置和配置。

有关的更多信息sinfo,请参阅sinfo在里面Slurm文档.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 18 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[1-9] spot* up infinite 2 idle spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

输出表明,您有一个t2.micro还有onec5.xlarge中的计算节点idle您的集群中可用的状态。

其他节点都处于省电状态,如图所示~后缀处于节点状态,没有 EC2 实例支持它们。默认队列由指定*在队列名后加后缀,所以spot是您的默认作业队列。

在多队列模式下运行作业

接下来,尝试运行作业以休眠一会儿。该作业稍后将输出自己的主机名。确保此脚本可以由当前用户运行。

$ tee <<EOF hellojob.sh #!/bin/bash sleep 30 echo "Hello World from \$(hostname)" EOF $ chmod +x hellojob.sh $ ls -l hellojob.sh -rwxrwxr-x 1 ec2-user ec2-user 57 Sep 23 21:57 hellojob.sh

使用提交作业sbatch命令。使用以下命令为该任务请求两个节点-N 2选项,然后验证作业是否成功提交。有关的更多信息sbatch,请参阅sbatch在里面Slurm 文档.

$ sbatch -N 2 --wrap "srun hellojob.sh" Submitted batch job 1

您可以使用以下命令查看队列并查看任务的状态squeue命令。请注意,因为你没有指定特定的队列,所以默认队列 (spot) 被使用。有关的更多信息squeue,请参阅squeue在里面Slurm文档.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 1 spot wrap ec2-user R 0:10 2 spot-st-c5xlarge-1,spot-st-t2micro-1

输出显示此作业目前处于运行状态。请等候 30 秒,以便作业完成,然后再次运行 squeue

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)

现在,队列中的任务已全部完成,请查找输出文件slurm-1.out在您当前的目录中)。

$ cat slurm-1.out Hello World from spot-st-t2micro-1 Hello World from spot-st-c5xlarge-1

输出还显示我们的任务在spot-st-t2micro-1spot-st-c5xlarge-1节点。

现在,通过使用以下命令为特定实例指定约束条件来提交相同的作业。

$ sbatch -N 3 -p spot -C "[c5.xlarge*1&t2.micro*2]" --wrap "srun hellojob.sh" Submitted batch job 2

您将这些参数用于sbatch.

  • -N 3— 请求三个节点

  • -p spot— 将作业提交给spot队列。您也可以将作业提交到ondemand通过指定队列-p ondemand.

  • -C "[c5.xlarge*1&t2.micro*2]"— 指定此作业的特定节点约束。这需要一 (1)c5.xlarge节点和两个 (2)t2.micro用于此作业的节点。

运行sinfo命令以查看节点和队列。队列Amazon ParallelCluster在中被称为分区Slurm.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 1 alloc# spot-dy-t2micro-1 spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 1 mix spot-st-c5xlarge-1 spot* up infinite 1 alloc spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

节点正在启动。这表示为#节点状态的后缀。运行squeue命令以查看集群中作业的相关信息。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user CF 0:04 3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1

你的工作是CF(CONFIGURING) 状态,等待实例向上扩展并加入集群。

大约三分钟后,节点应可用,作业进入R(RUNNING)状态。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user R 0:07 3 spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1

作业完成,所有三个节点都在idle状态。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 17 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

然后,在队列中没有剩余任务之后,你可以检查slurm-2.out在您的本地目录中)。

$ cat slurm-2.out Hello World from spot-st-t2micro-1 Hello World from spot-dy-t2micro-1 Hello World from spot-st-c5xlarge-1

这应是集群的最终状态。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 17 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

注销集群后,您可以运行以下命令进行清理pcluster delete-cluster. 欲了解更多信息,请访问pcluster list-clusterspcluster delete-cluster,请参阅pcluster list-clusterspcluster delete-cluster.

$ pcluster list-clusters { "clusters": [ { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_COMPLETE", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.1.4", "clusterStatus": "CREATE_COMPLETE" } ] } $ pcluster delete-cluster -n multi-queue-cluster { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "DELETE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.1.4", "clusterStatus": "DELETE_IN_PROGRESS" } }