다중 대기열 모드 자습서 - AWS ParallelCluster

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

다중 대기열 모드 자습서

다중 대기열 모드로 AWS ParallelCluster에서 작업 실행

이 자습서는 AWS ParallelCluster에서 다중 대기열 모드로 첫 번째 Hello World 작업을 실행하는 과정을 단계별로 안내합니다.

사전 조건
참고

다중 대기열 모드는 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-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– 작업을 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-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초(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 listpcluster delete에 대한 자세한 내용은 pcluster listpcluster 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.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_idletime 시간을 5분으로 지정했습니다. 따라서 유휴 상태에서 5분 지나면 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.9 $ pcluster delete multi-queue-special Deleting: multi-queue-special ...

자세한 내용은 Slurm 다중 대기열 모드에 대한 가이드 항목을 참조하세요.