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

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

多队列模式教程

在上运行你的作业Amazon ParallelCluster具有多个队列模式

本教程将引导您完成在上运行首个 Hello World 作业的过程Amazon ParallelCluster和多队列模式. 如果您尚未安装Amazon ParallelCluster并配置 CLI,请按照设置 Amazon ParallelCluster在继续本教程之前向导。

注意

仅支持多队列模式Amazon ParallelCluster版本 2.9.0 或更高版本。

配置集群

首先,验证Amazon ParallelCluster通过运行以下命令正确安装。

$ pcluster version

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

该命令将返回正在运行的版本Amazon ParallelCluster.

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

$ pcluster configure

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

完成此步骤后,您应在下面有一个基本配置文件~/.parallelcluster/config. 此文件应包含基本群集配置和 VPC 部分。

本教程的下一部分概述了如何修改新创建的配置以及如何启动包含多个队列的集群。

注意

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

在本教程中,使用以下配置。

[global] update_check = true sanity_check = true cluster_template = multi-queue [aws] aws_region_name = <Your Amazon Web Services 区域> [scaling demo] scaledown_idletime = 5 # optional, defaults to 10 minutes [cluster multi-queue-special] key_name = < Your key name > base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo # optional, defaults to no custom scaling settings queue_settings = efa,gpu [cluster multi-queue] key_name = <Your SSH key name> base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo queue_settings = spot,ondemand [queue spot] compute_resource_settings = spot_i1,spot_i2 compute_type = spot # optional, defaults to ondemand [compute_resource spot_i1] instance_type = c5.xlarge min_count = 0 # optional, defaults to 0 max_count = 10 # optional, defaults to 10 [compute_resource spot_i2] instance_type = t2.micro min_count = 1 initial_count = 2 [queue ondemand] compute_resource_settings = ondemand_i1 disable_hyperthreading = true # optional, defaults to false [compute_resource ondemand_i1] instance_type = c5.2xlarge

创建集群

本节详细介绍了如何创建多队列模式集群。

首先,命名你的集群multi-queue-hello-world,然后根据multi-queue上一部分中定义的集群部分。

$ pcluster create multi-queue-hello-world -t multi-queue

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

创建集群时,将显示以下输出:

Beginning cluster creation for cluster: multi-queue-hello-world Creating stack named: parallelcluster-multi-queue-hello-world Status: parallelcluster-multi-queue-hello-world - CREATE_COMPLETE MasterPublicIP: 3.130.xxx.xx ClusterUser: ec2-user MasterPrivateIP: 172.31.xx.xx

消息CREATE_COMPLETE表明集群已成功创建。输出还提供主节点的公有 IP 地址和私有 IP 地址。

登录你的头节点

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

$ pcluster ssh multi-queue-hello-world -i ~/path/to/keyfile.pem

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

登录后,运行sinfo命令验证是否已设置并配置计划程序队列。

有关 的更多信息sinfo请参阅sinfo中的Slurm文档.

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

输出显示您有两个t2.micro中的计算节点idle在群集中可用的状态。

注意
  • spot-st-t2micro-1是一个静态节点st以它的名称。此节点始终可用且对应于min_count = 1在集群配置中。

  • spot-dy-t2micro-1是一个动态节点dy以它的名称。此节点目前可用,因为它对应于initial_count - min_count = 1根据您的集群配置。此节点在自定义之后缩小scaledown_idletime5 分钟。

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

在多队列模式下运行作业

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

$ cat hellojob.sh #!/bin/bash sleep 30 echo "Hello World from $(hostname)" $ 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中的Surm 文档.

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

您可以使用查看您的队列并检查该作业的状态squeue命令。请注意,由于您没有指定特定队列,所以默认队列 (spot) 已使用。有关 的更多信息squeue请参阅squeue中的Slurm文档.

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

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

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

既然队列中的作业都已完成,请查找输出文件slurm-2.out在您的当前目录中。

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

输出还显示我们的作业已在spot-st-t2micro-1spot-st-t2micro-2节点。

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

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

你将这些参数用于sbatch.

  • -N 3— 请求三个节点

  • -p spot— 将作业提交给spotqueue. 您还可以将作业提交到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 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 1 mix# spot-dy-c5xlarge-1 spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 2 alloc spot-dy-t2micro-1,spot-st-t2micro-1

节点正在通电。这是由#节点状态上的后缀。运行squeue命令以查看有关集群中作业的信息。

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

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

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

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

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

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

然后,在队列中没有剩余作业后,您可以检查slurm-3.out在本地目录中。

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

输出还显示该作业已在相应节点上成功运行。

你可以观察缩小规模的过程。在群集配置中,您指定了自定义scaledown_idletime5 分钟。处于空闲状态五分钟后,您的动态节点spot-dy-c5xlarge-1spot-dy-t2micro-1自动缩小并进入POWER_DOWN模式。请注意,静态节点spot-st-t2micro-1不会缩小规模。

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

从上面的代码中,你可以看到spot-dy-c5xlarge-1spot-dy-t2micro-1POWER_DOWN模式。这是由%后缀。相应的实例将立即终止,但节点仍保留在POWER_DOWN状态,并且在 120 秒(两分钟)内无法使用。在此之后,这些节点恢复了省电状态,并可以再次使用。有关更多信息,请参阅 Slurm多队列模式指南

这应该是集群的最终状态:

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

注销集群后,您可以通过运行以下操作进行清除。pcluster delete. 有关更多信息,请参阅pcluster listpcluster delete请参阅pcluster listpcluster delete.

$ pcluster list multi-queue CREATE_COMPLETE 2.11.5 $ pcluster delete multi-queue Deleting: multi-queue ...

使用 EFA 和 GPU 实例在集群上运行作业

本教程的这一部分详细介绍了如何修改配置以及如何启动包含具有 EFA 联网和 GPU 资源的实例的多个队列的集群。请注意,本教程中使用的实例是价格更高的实例。

在继续执行本教程中概述的步骤之前,请检查您的账户限制以确保您已获得使用这些实例的授权。

使用以下命令修改配置文件。

[global] update_check = true sanity_check = true cluster_template = multi-queue-special [aws] aws_region_name = <Your Amazon Web Services 区域> [scaling demo] scaledown_idletime = 5 [cluster multi-queue-special] key_name = <Your SSH key name> base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo queue_settings = efa,gpu [queue gpu] compute_resource_settings = gpu_i1 disable_hyperthreading = true # optional, defaults to false [compute_resource gpu_i1] instance_type = g3.8xlarge [queue efa] compute_resource_settings = efa_i1 enable_efa = true placement_group = DYNAMIC # optional, defaults to no placement group settings [compute_resource efa_i1] instance_type = c5n.18xlarge max_count = 5

创建集群

$ pcluster create multi-queue-special -t multi-queue-special

创建集群后,使用您的 SSH 私钥文件登录头节点。

$ pcluster ssh multi-queue-special -i ~/path/to/keyfile.pem

这应是集群的初始状态:

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 5 idle~ efa-dy-c5n18xlarge-[1-5] gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10]

本节介绍如何提交一些作业以检查节点是否具有 EFA 或 GPU 资源。

首先,编写作业脚本。efa_job.sh将睡 30 秒钟。之后,在输出中寻找全民教育lspci命令。gpu_job.sh将睡 30 秒钟。之后,运行nvidia-smi以显示有关节点的 GPU 信息。

$ cat efa_job.sh #!/bin/bash sleep 30 lspci | grep "EFA" $ cat gpu_job.sh #!/bin/bash sleep 30 nvidia-smi $ chmod +x efa_job.sh $ chmod +x gpu_job.sh

使用提交作业sbatch

$ sbatch -p efa --wrap "srun efa_job.sh" Submitted batch job 2 $ sbatch -p gpu --wrap "srun gpu_job.sh" -G 1 Submitted batch job 3 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 efa wrap ec2-user CF 0:32 1 efa-dy-c5n18xlarge-1 3 gpu wrap ec2-user CF 0:20 1 gpu-dy-g38xlarge-1 $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 1 mix# efa-dy-c5n18xlarge-1 efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] gpu up infinite 1 mix# gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10]

几分钟后,您应能够在线查看节点和作业正在运行。

[ec2-user@ip-172-31-15-251 ~]$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] efa* up infinite 1 mix efa-dy-c5n18xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] gpu up infinite 1 mix gpu-dy-g38xlarge-1 [ec2-user@ip-172-31-15-251 ~]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 4 gpu wrap ec2-user R 0:06 1 gpu-dy-g38xlarge-1 5 efa wrap ec2-user R 0:01 1 efa-dy-c5n18xlarge-1

任务完成后,检查输出。从中的输出slurm-2.out文件,你可以看到 EFA 存在于efa-dy-c5n18xlarge-1节点。从中的输出slurm-3.out文件,您可以看到nvidia-smi输出包含的 GPU 信息gpu-dy-g38xlarge-1节点。

$ cat slurm-2.out 00:06.0 Ethernet controller: Amazon.com, Inc. Elastic Fabric Adapter (EFA) $ cat slurm-3.out Thu Oct 1 22:19:18 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla M60 Off | 00000000:00:1D.0 Off | 0 | | N/A 28C P0 38W / 150W | 0MiB / 7618MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla M60 Off | 00000000:00:1E.0 Off | 0 | | N/A 36C P0 37W / 150W | 0MiB / 7618MiB | 98% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

你可以观察缩小规模的过程。在群集配置中,您之前指定了自定义scaledown_idletime5 分钟。因此,在处于空闲状态五分钟后,您的动态节点,spot-dy-c5xlarge-1spot-dy-t2micro-1,自动缩小并进入POWER_DOWN模式。最终,这些节点进入省电模式并可以再次使用。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 1 idle% efa-dy-c5n18xlarge-1 efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] gpu up infinite 1 idle% gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] # After 120 seconds $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 5 idle~ efa-dy-c5n18xlarge-[1-5] gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10]

注销集群后,您可以通过运行以下操作进行清除。pcluster delete <cluster name>.

$ pcluster list multi-queue-special CREATE_COMPLETE 2.11.5 $ pcluster delete multi-queue-special Deleting: multi-queue-special ...

有关更多信息,请参阅Slurm多队列模式指南