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

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

多队列模式教程

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

本教程将引导您完成在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,请参阅信佛中的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中的Slurm 文档

$ 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.2xlarge*1&t2.micro*2]"— 指定此作业的特定节点约束。这要求一 (1)c5.2xlarge节点和两 (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_idletime的 5 分钟。处于空闲状态五分钟后,动态节点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-1位于POWER_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.0 $ 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-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.0 $ pcluster delete multi-queue-special Deleting: multi-queue-special ...

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