기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
다중 대기열 모드 자습서
다중 대기열 모드로 AWS ParallelCluster에서 작업 실행
이 자습서는 AWS ParallelCluster에서 다중 대기열 모드로 첫 번째 Hello World 작업을 실행하는 과정을 단계별로 안내합니다.
사전 조건
-
AWS ParallelCluster가 설치되었습니다.
-
AWS CLI가 설치 및 구성되었습니다.
-
EC2 키 페어가 있습니다.
참고
다중 대기열 모드는 AWS ParallelCluster 버전 2.9.0 이상에서만 지원됩니다.
클러스터 구성
먼저 다음 명령을 실행하여 AWS ParallelCluster가 제대로 설치되었는지 확인합니다.
$
pcluster version
pcluster version
에 대한 자세한 내용은 pcluster version 섹션을 참조하세요.
이 명령은 실행중인 AWS 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 AWS 리전>
[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 주소도 알려줍니다.
헤드 노드에 로그인
비공개 SSH 키 파일을 사용하여 헤드 노드에 로그인합니다.
$
pcluster ssh multi-queue-hello-world -i
~/path/to/keyfile.pem
pcluster ssh
에 대한 자세한 내용은 pcluster ssh 섹션을 참조하세요.
로그인되면 sinfo
명령을 실행하여 스케줄러 대기열이 설정 및 구성되어 있는지 확인합니다.
sinfo
에 대한 자세한 내용은 Slurm 설명서에서 sinfo
$
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
출력을 통해 클러스터에서 사용할 수 있는 idle
상태의 t2.micro
컴퓨팅 노드가 두 개 있는 것을 알 수 있습니다.
참고
-
spot-st-t2micro-1
은 이름에st
가 포함된 정적 노드입니다. 이 노드는 항상 사용 가능하며 클러스터 구성의min_count = 1
에 해당합니다. -
spot-dy-t2micro-1
은 이름에dy
가 포함된 동적 노드입니다. 이 노드는 클러스터 구성에 따라initial_count - min_count = 1
에 해당하므로 현재 사용 가능합니다. 이 노드는 사용자 지정 scaledown_idletime 시간 5분이 지나면 스케일 다운됩니다.
다른 노드는 모두 이를 지원하는 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
에 대한 자세한 내용은 Slurm 설명서에서 sbatch
$
sbatch -N 2 --wrap "srun hellojob.sh"
Submitted batch job 2
squeue
명령으로 대기열을 보고 작업 상태를 확인할 수 있습니다. 단, 특정 대기열을 지정하지 않았으므로 기본 대기열(spot
)이 사용됩니다. squeue
에 대한 자세한 내용은 Slurm 설명서에서 squeue
$
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-1
및 spot-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
– 작업을spot
대기열에 제출합니다.-p ondemand
를 지정하여 작업을ondemand
대기열에 제출할 수도 있습니다. -
-C "[c5.xlarge*1&t2.micro*2]"
– 이 작업에 대한 특정 노드 제약 조건을 지정합니다. 이 작업에 사용할c5.xlarge
노드 1개와t2.micro
노드 2개를 요청합니다.
sinfo
명령을 실행하여 노드와 대기열을 확인합니다. (AWS 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) 상태이며, 인스턴스가 스케일 업되어 클러스터에 합류하기를 기다리고 있습니다.
약 3분 후에 노드를 사용할 수 있고 작업이 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분으로 지정했습니다. 유휴 상태에서 5분이 지나면 spot-dy-c5xlarge-1
및 spot-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-1
및 spot-dy-t2micro-1
가 POWER_DOWN
모드에 있는 것을 확인할 수 있습니다. 이는 %
접미사로 표시됩니다. 해당 인스턴스는 즉시 종료되지만 노드는 POWER_DOWN
상태를 유지하고 120초(2분) 동안 사용할 수 없습니다. 이 시간이 지나면 노드는 절전 상태로 돌아와 다시 사용할 수 있게 됩니다. 자세한 내용은 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 list
및 pcluster delete
에 대한 자세한 내용은 pcluster list 및 pcluster delete 섹션을 참조하세요.
$
pcluster list
multi-queue CREATE_COMPLETE 2.11.9
$
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 AWS 리전>
[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
명령 출력에서 EFA를 찾아보세요. 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]
5분 후 노드가 온라인 상태이고 작업이 실행 중인 것을 확인할 수 있습니다.
[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-dy-c5n18xlarge-1
노드에 EFA가 있음을 확인할 수 있습니다. slurm-3.out
파일의 출력에서 gpu-dy-g38xlarge-1
노드의 GPU 정보가 포함된 nvidia-smi
출력을 확인할 수 있습니다.
$
cat slurm-2.out00: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_idletime 시간을 5분으로 지정했습니다. 따라서 유휴 상태에서 5분 지나면 spot-dy-c5xlarge-1
및 spot-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.9
$
pcluster delete multi-queue-special
Deleting: multi-queue-special ...
자세한 내용은 Slurm 다중 대기열 모드에 대한 가이드 항목을 참조하세요.