Slurm 클러스터 빠른 용량 부족 장애 조치 - AWS ParallelCluster

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

Slurm 클러스터 빠른 용량 부족 장애 조치

AWS ParallelCluster 버전 3.2.0부터 클러스터는 빠른 용량 부족 장애 복구 모드가 기본적으로 활성화된 상태로 실행됩니다. 이렇게 하면 Amazon EC2의 용량 부족 오류가 감지될 때 작업을 대기열에 재시도하는 데 소요되는 시간을 최소화할 수 있습니다. 이는 여러 종류의 인스턴스 유형으로 클러스터를 구성할 때 특히 효과적입니다.

Amazon EC2에서 용량 부족 장애를 감지했습니다.
  • InsufficientInstanceCapacity

  • InsufficientHostCapacity

  • InsufficientReservedInstanceCapacity

  • MaxSpotInstanceCountExceeded

  • SpotMaxPriceTooLow: 스팟 요청 가격이 필요한 최소 스팟 요청 이행 가격보다 낮습니다.

  • Unsupported: 특정 AWS 리전인스턴스에서 지원되지 않는 인스턴스 유형을 사용하여 활성화되었습니다.

빠른 용량 부족 장애 복구 모드에서 작업이 SlurmQueuescompute resource/에 할당될 때 용량 부족 오류가 감지되면 다음을 AWS ParallelCluster 수행합니다.

  1. 미리 정의된 기간 동안 컴퓨팅 리소스를 비활성화(DOWN) 상태로 설정합니다.

  2. 컴퓨팅 리소스 장애가 발생한 노드 작업을 취소하고 장애가 발생한 노드를 일시 중단하기 위해 POWER_DOWN_FORCE를 사용합니다. 장애가 발생한 노드를 IDLEPOWER_DOWN (!) 상태로 설정한 다음, POWERING_DOWN (%)로 설정합니다.

  3. 작업을 다른 컴퓨팅 리소스에 대기열에 추가합니다.

비활성화된 컴퓨팅 리소스의 정적 노드와 전원이 켜진 노드는 영향을 받지 않습니다. 이러한 노드에서 작업을 완료할 수 있습니다.

이 주기는 작업이 컴퓨팅 리소스 노드 또는 여러 노드에 성공적으로 할당될 때까지 반복됩니다. 노드 상태에 대한 내용은 다중 대기열 모드를 위한 Slurm 가이드 섹션을 참조하세요.

작업을 실행할 컴퓨팅 리소스가 없는 경우 작업은 미리 정의된 기간이 경과할 때까지 PENDING 상태로 설정됩니다. 이 경우 다음 섹션에 설명된 대로 사전 정의된 기간을 수정할 수 있습니다.

용량 제한 시간 초과 파라미터 부족

insufficient_capacity_timeout

insufficient_capacity_timeout 용량 부족 오류가 감지된 경우 컴퓨팅 리소스가 비활성화(down) 상태로 유지되는 기간(초)을 지정합니다.

기본값은 insufficient_capacity_timeout가 활성화됩니다.

insufficient_capacity_timeout의 기본값은 600초(10분)입니다.

insufficient_capacity_timeout 값이 0보다 작거나 같으면 빠른 용량 부족 장애 조치 모드가 비활성화됩니다.

HeadNode/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf에 있는 clustermgtd 구성 파일에 파라미터를 추가하여 insufficient_capacity_timeout 값을 변경할 수 있습니다.

컴퓨팅 플릿을 중지하지 않고도 언제든지 파라미터를 업데이트할 수 있습니다.

예:

  • insufficient_capacity_timeout=600:

    용량 부족 오류가 감지되면 컴퓨팅 리소스가 비활성화(DOWN)로 설정됩니다. 10분 후 장애가 발생한 노드는 idle~(POWER_SAVING) 상태로 설정됩니다.

  • insufficient_capacity_timeout=60:

    용량 부족 오류가 감지되면 컴퓨팅 리소스는 비활성화(DOWN) 상태가 됩니다. 1분 후 장애가 발생한 노드는 idle~ 상태로 설정됩니다.

  • insufficient_capacity_timeout=0:

    빠른 용량 부족 장애 조치 모드가 비활성화되었습니다. 컴퓨팅 리소스는 비활성화되지 않았습니다.

참고

용량 부족 오류로 인해 노드에 장애가 발생하는 시간과 클러스터 관리 대몬(daemon)이 노드 장애를 감지하는 시간 사이에는 최대 1분의 지연이 있을 수 있습니다. 이는 클러스터 관리 대몬(daemon)이 노드 용량 부족 장애를 확인하고 1분 간격으로 컴퓨팅 리소스를 down 상태로 설정하기 때문입니다.

빠른 용량 부족 장애 조치 모드 상태

클러스터가 빠른 용량 부족 장애 조치 모드에 있는 경우 클러스터의 상태와 노드 상태를 확인할 수 있습니다.

노드 상태

컴퓨팅 리소스 동적 노드에 작업이 제출되고 용량 부족 오류가 감지되면 해당 노드는 이유가 있는 down# 상태로 전환됩니다.

(Code:InsufficientInstanceCapacity)Failure when resuming nodes.

그러면 전원이 꺼진 노드(idle~ 상태의 노드)가 이유가 있는 down~로 설정됩니다.

(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity.

작업은 대기열에 있는 다른 컴퓨팅 리소스로 대기열에 추가됩니다.

컴퓨팅 리소스 정적 노드 및 UP이 빠른 용량 부족 장애 조치 모드의 영향을 받지 않는 노드입니다.

다음 예제에 표시된 노드 상태를 고려해 보세요.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

노드 하나가 필요한 작업을 queue1에 제출합니다.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 1 down# queue1-dy-c-1-1 queue1* up infinite 15 idle~ queue1-dy-c-2-[1-15] queue1* up infinite 14 down~ queue1-dy-c-1-[2-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

작업을 실행하기 위해 노드 queue1-dy-c-1-1이 시작됩니다. 그러나 용량 부족 오류로 인해 인스턴스가 시작되지 않았습니다. 노드 queue1-dy-c-1-1down으로 설정되었습니다. 컴퓨팅 리소스(queue2-dy-c-1) 내의 전원이 꺼진 동적 노드는 down으로 설정되어 있습니다.

scontrol show nodes로 노드 이유를 확인할 수 있습니다.

$ scontrol show nodes queue1-dy-c-1-1 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Failure when resuming nodes [root@2022-03-10T22:17:50] $ scontrol show nodes queue1-dy-c-1-2 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity [root@2022-03-10T22:17:50]

작업이 대기열 컴퓨팅 리소스 내의 다른 인스턴스 유형에 대기됩니다.

insufficient_capacity_timeout이 경과하면 컴퓨팅 리소스의 노드가 idle~ 상태로 재설정됩니다.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

insufficient_capacity_timeout이 경과하고 컴퓨팅 리소스의 노드가 해당 idle~ 상태로 재설정되면, Slurm 스케줄러는 노드에 더 낮은 우선 순위를 부여합니다. 스케줄러는 다음 중 하나가 발생하지 않는 한 가중치가 더 높은 다른 대기열 컴퓨팅 리소스에서 노드를 계속 선택합니다.

  • 작업 제출 요구 사항은 복구된 컴퓨팅 리소스와 일치합니다.

  • 용량이 충분하기 때문에 다른 컴퓨팅 리소스를 사용할 수 없습니다.

  • slurmctld가 다시 시작됩니다.

  • AWS ParallelCluster 컴퓨팅 플릿을 중지한 다음 모든 노드의 전원을 끄고 다시 켜기 시작합니다.

관련 로그

용량 부족 오류 및 빠른 용량 부족 장애 조치 모드와 관련된 로그는 Slurm의 resume 로그 및 헤드 노드의 clustermgtd 로그에서 확인할 수 있습니다.

Slurm resume (/var/log/parallelcluster/slurm_resume.log)

용량이 부족하여 노드 시작에 실패할 때 나타나는 오류 메시지.

[slurm_plugin.instance_manager:_launch_ec2_instances] - ERROR - Failed RunInstances request: dcd0c252-90d4-44a7-9c79-ef740f7ecd87 [slurm_plugin.instance_manager:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['queue1-dy-c-1-1']: An error occurred (InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 1): We currently do not have sufficient p4d.24xlarge capacity in the Availability Zone you requested (us-west-2b). Our system will be working on provisioning additional capacity. You can currently get p4d.24xlarge capacity by not specifying an Availability Zone in your request or choosing us-west-2a, us-west-2c.
Slurm clustermgtd (/var/log/parallelcluster/clustermgtd)

용량이 부족하여 queue1의 컴퓨팅 리소스 c-1이 비활성화되었습니다.

[slurm_plugin.clustermgtd:_reset_timeout_expired_compute_resources] - INFO - The following compute resources are in down state due to insufficient capacity: {'queue1': {'c-1': ComputeResourceFailureEvent(timestamp=datetime.datetime(2022, 4, 14, 23, 0, 4, 769380, tzinfo=datetime.timezone.utc), error_code='InsufficientInstanceCapacity')}}, compute resources are reset after insufficient capacity timeout (600 seconds) expired

용량 부족 제한 시간이 만료되면 컴퓨팅 리소스가 재설정되고 컴퓨팅 리소스 내의 노드는 idle~로 설정됩니다.

[root:_reset_insufficient_capacity_timeout_expired_nodes] - INFO - Reset the following compute resources because insufficient capacity timeout expired: {'queue1': ['c-1']}