Slurm Workload Manager (slurm) - AWS ParallelCluster

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

Slurm Workload Manager (slurm)

클러스터 용량 크기 및 업데이트

클러스터의 용량은 클러스터가 규모 조정할 수 있는 컴퓨팅 노드 수에 따라 정의됩니다. 컴퓨팅 노드는 AWS ParallelCluster 구성 (Scheduling/SlurmQueues/ComputeResources)의 컴퓨팅 리소스 내에 정의된 Amazon EC2 인스턴스에 의해 지원되며 Slurm 파티션에 1:1로 매핑되는 (Scheduling/SlurmQueues) 대기열로 구성됩니다.

컴퓨팅 리소스 내에서 클러스터(MinCount)에서 항상 실행되어야 하는 최소 컴퓨팅 노드(인스턴스) 수와 컴퓨팅 리소스가 (MaxCount3)으로 규모 조정할 수 있는 최대 인스턴스 수를 구성할 수 있습니다.

클러스터 생성 시간 또는 클러스터 업데이트 시 AWS ParallelCluster는 클러스터에 정의된 각 컴퓨팅 리소스(Scheduling/SlurmQueues/ ComputeResources )에 대해 MinCount에 구성된 수만큼 Amazon EC2 인스턴스를 시작합니다. 클러스터의 컴퓨팅 리소스에 대한 최소 노드 수를 포함하도록 시작된 인스턴스를 정적 노드라고 합니다. 일단 시작되면 정적 노드는 클러스터에서 영구적이어야 하며 특정 이벤트 또는 조건이 발생하지 않는 한 시스템에 의해 종료되지 않습니다. 이러한 이벤트에는 Slurm 또는 Amazon EC2 상태 확인 실패 및 Slurm 노드 상태를 DRAIN 또는 DOWN으로 변경 등이 포함됩니다.

클러스터의 증가된 부하를 처리하기 위해 온디맨드 방식으로 시작된 1 - ‘MaxCount - MinCount’(MaxCount - MinCount) 범위의 Amazon EC2 인스턴스를 동적 노드라고 합니다. 속성은 일시적이며 보류 중인 작업을 제공하기 위해 시작되고 클러스터 구성에서 Scheduling/SlurmSettings/ScaledownIdletime에 정의된 기간 동안 유휴 상태로 유지되면 종료됩니다(기본값: 10분).

정적 노드 및 동적 노드는 다음 이름 지정 스키마를 준수합니다.

  • 정적 노드 <Queue/Name>-st-<ComputeResource/Name>-<num> <num> = 1..ComputeResource/MinCount

  • 동적 노드 <Queue/Name>-dy-<ComputeResource/Name>-<num> <num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)

예를 들어, 다음과 같은 AWS ParallelCluster 구성을 가정해 봅시다.

Scheduling: Scheduler: Slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: c5xlarge Instances: - InstanceType: c5.xlarge MinCount: 100 MaxCount: 150

다음 노드는 Slurm에서 정의됩니다.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]

컴퓨팅 리소스에 MinCount == MaxCount가 있으면 해당하는 모든 컴퓨팅 노드가 정적이 되고 클러스터 생성/업데이트 시간에 모든 인스턴스가 시작되어 계속 실행됩니다. 예:

Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: c5xlarge Instances: - InstanceType: c5.xlarge MinCount: 100 MaxCount: 100
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]

클러스터 용량 업데이트

클러스터 용량 업데이트에는 대기열 추가 또는 제거, 리소스 계산 또는 컴퓨팅 리소스의 MinCount/MaxCount 변경 등이 포함됩니다. AWS ParallelCluster 버전 3.9.0부터 대기열 크기를 줄이려면 클러스터 업데이트가 발생하기 전에 컴퓨팅 플릿을 중지하거나 QueueUpdateStrategy를 TERMINATE로 설정해야 합니다. 다음과 같은 경우 컴퓨팅 플릿을 중지하거나 QueueUpdateStrategy를 TERMINATE로 설정할 필요가 없습니다.

  • 예약/SlurmQueues에 새 대기열 추가

  • 대기열에 새 컴퓨팅 리소스 Scheduling/SlurmQueues/ComputeResources 추가

  • 컴퓨팅 리소스의 MaxCount 증가

  • 컴퓨팅 리소스의 MinCount 증가 및 적어도 동일한 양의 동일한 컴퓨팅 리소스의 MaxCount 증가

고려 사항 및 제한

이 섹션에서는 클러스터 용량 크기를 조정할 때 고려해야 하는 중요한 요인, 제약 또는 제한 사항을 간략하게 설명합니다.

컴퓨팅 리소스의 MinCount 파라미터를 변경할 때 MaxCountMinCount(정적 용량만 해당)와 같고 MaxCountMinCount(정적 및 동적 용량 혼합)보다 큰 경우 두 가지 시나리오를 구분할 수 있습니다.

정적 노드만 있는 용량 변경

  • MinCount == MaxCount인 경우 MinCount(및 MaxCount)를 늘릴 때 정적 노드 수를 MinCount <Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>의 새 값으로 확장하여 클러스터를 구성하고 시스템은 필요한 새 정적 용량을 충족하기 위해 Amazon EC2 인스턴스를 계속 시작하려고 시도합니다.

  • MinCount == MaxCount인 경우 N 양 MinCount(및 MaxCount)을 줄일 때 마지막 N 정적 노드 <Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]를 제거하여 클러스터를 구성하고 시스템은 해당 Amazon EC2 인스턴스를 종료합니다.

    • 원래 상태 MinCount = MaxCount = 100

    • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
    • MinCountMaxCount: MinCount = MaxCount = 70에서 -30 업데이트

    • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

혼합 노드의 용량 변경

MinCount < MaxCount인 경우 N 양(MaxCount가 변경되지 않은 상태로 유지된다고 가정)만큼 MinCount를 늘리면 정적 노드 수를 MinCount(old_MinCount + N)의 새 값으로 확장하여 클러스터가 구성되고 <Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N> 및 시스템은 필요한 새 정적 용량을 충족하기 위해 Amazon EC2 인스턴스를 계속 시작하려고 시도합니다. 또한 컴퓨팅 리소스의 MaxCount 용량을 적용하기 위해 마지막 N 동적 노드 를 제거하여 클러스터 구성이 업데이트되고 <Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>] 및 시스템은 해당 Amazon EC2 인스턴스를 종료합니다.

  • 원래 상태: MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • +30을 MinCount : MinCount = 130 (MaxCount = 150)으로 업데이트

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-20] queue1* up infinite 130 idle queue1-st-c5xlarge-[1-130]

MinCount < MaxCount인 경우 MinCountMaxCount을 동일한 N 양만큼 늘리면 정적 노드 수를 MinCount(old_MinCount + N)의 새 값으로 확장하여 클러스터가 구성되고 <Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N> 시스템은 필요한 새 정적 용량을 충족하기 위해 Amazon EC2 인스턴스를 계속 시작하려고 시도합니다. 또한 새 노드를 적용하기 위해 동적 노드 수를 변경하지 않습니다.

MaxCount USD 상당.

  • 원래 상태: MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • +30을 MinCount : MinCount = 130 (MaxCount = 180)으로 업데이트

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 130 idle queue1-st-c5xlarge-[1-130]

MinCount < MaxCount인 경우 MinCount를 N 양만큼 줄일 경우(MaxCount는 변경되지 않는다고 가정) 마지막 N 정적 노드를 제거하여 클러스터를 구성하고 <Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount> 시스템은 해당 Amazon EC2 인스턴스를 종료합니다. 또한 컴퓨팅 리소스의 MaxCount 용량을 수용하기 위해 클러스터 구성은 격차를 메울 동적 노드 수를 확장하여 업데이트됩니다. MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>] 이 경우 동적 노드이므로 스케줄러에 새 노드에서 보류 중인 작업이 없는 한 새 Amazon EC2 인스턴스가 시작되지 않습니다.

  • 원래 상태: MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • MinCount : MinCount = 70 (MaxCount = 120)에서 -30 업데이트

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 80 idle~ queue1-dy-c5xlarge-[1-80] queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

MinCount < MaxCount인 경우 MinCountMaxCount를 동일한 N 양으로 줄일 때 마지막 N 정적 노드를 제거하여 클러스터를 구성하고 <Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>] 시스템은 해당 Amazon EC2 인스턴스를 종료합니다.

또한 새 MaxCount 값을 적용하기 위해 동적 노드 수를 변경하지 않습니다.

  • 원래 상태: MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • MinCount : MinCount = 70 (MaxCount = 120)에서 -30 업데이트

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 80 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

MinCount < MaxCount인 경우 MaxCount를 N(MinCount는 변경되지 않은 상태로 유지된다고 가정)만큼 줄이면 마지막 N 동적 노드를 제거하여 클러스터가 구성되고 <Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>] 시스템이 실행 중인 해당하는 Amazon EC2 인스턴스를 종료합니다. 정적 노드에는 영향을 미치지 않습니다.

  • 원래 상태: MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • MaxCount : MinCount = 100 (MaxCount = 120)에서 -30 업데이트

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-20] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]

작업에 미치는 영향

노드가 제거되고 Amazon EC2 인스턴스가 종료되는 모든 경우, 작업 요구 사항을 충족하는 다른 노드가 없는 경우를 제외하고 제거된 노드에서 실행되는 sbatch 작업이 다시 대기열에 추가됩니다. 이 마지막 경우 NODE_FAIL 상태로 작업이 실패하고 대기열에서 사라집니다. 이 경우 수동으로 다시 제출해야 합니다.

클러스터 크기 조정 업데이트를 수행하려는 경우 계획된 업데이트 중에 제거될 노드에서 작업이 실행되지 않도록 할 수 있습니다. 이는 유지 관리에서 노드를 제거하도록 설정하여 가능합니다. 유지 관리에서 노드를 설정해도 결국 노드에서 이미 실행 중인 작업에는 영향을 주지 않습니다.

계획된 클러스터 크기 조정 업데이트를 통해 노드를 제거한다고 가정해 보겠습니다 qeueu-st-computeresource-[9-10]. 다음 명령을 사용하여 Slurm 예약을 생성할 수 있습니다.

sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]

이렇게 하면 노드 qeueu-st-computeresource-[9-10]maint_for_update 이름이 지정된 Slurm 예약이 생성됩니다. 예약이 생성된 시점부터 더 이상 qeueu-st-computeresource-[9-10] 노드로 실행될 수 있는 작업이 없습니다. 예약으로 인해 qeueu-st-computeresource-[9-10] 노드에 작업이 최종 할당되는 것을 막을 수는 없습니다.

클러스터 크기 조정 업데이트 후 크기 조정 업데이트 중에 제거된 노드에서만 Slurm 예약이 설정된 경우 유지 관리 예약이 자동으로 삭제됩니다. 대신 클러스터 크기 조정 업데이트 후에도 여전히 존재하는 노드에 대한 Slurm 예약을 생성한 경우 다음 명령을 사용하여 크기 조정 업데이트가 수행된 후 노드에 대한 유지 관리 예약을 제거할 수 있습니다.

sudo -i scontrol delete ReservationName=maint_for_update

Slurm 예약에 대한 자세한 내용은 여기에서 공식 SchedMD 문서를 참조하세요.

용량 변경에 대한 클러스터 업데이트 프로세스

스케줄러 구성이 변경되면 클러스터 업데이트 프로세스 중에 다음 단계가 실행됩니다.

  • AWS ParallelCluster 중지 clustermgtd (supervisorctl stop clustermgtd)

  • AWS ParallelCluster 구성에서 업데이트된 Slurm 파티션 구성 생성

  • slurmctld 재시작(Chef 서비스 레시피를 통해 수행)

  • slurmctld 상태 확인 (systemctl is-active --quiet slurmctld.service)

  • Slurm 구성 다시 로드 (scontrol reconfigure)

  • clustermgtd (supervisorctl start clustermgtd) 시작

Slurm에 대한 자세한 내용은 https://slurm.schedmd.com을 참조하세요. 다운로드에 대해서는 https://github.com/SchedMD/slurm/tags를 참조하세요. 소스 코드는 https://github.com/SchedMD/slurm을 참조하세요.

AWS ParallelCluster 버전(들) 지원되는 Slurm 버전

3.11.0

23.11.10

3.9.2, 3.9.3, 3.10.0

23.11.7

3.9.0, 3.9.1

23.11.4

3.8.0

23.02.7

3.7.2

23.02.6

3.7.1

23.02.5

3.7.0

23.02.4

3.6.0, 3.6.1

23.02.2

3.5.0, 3.5.1

22.05.8

3.4.0, 3.4.1

22.05.7

3.3.0, 3.3.1

22.05.5

3.1.4, 3.1.5, 3.2.0, 3.2.1

21.08.8-2

3.1.2, 3.1.3

21.08.6

3.1.1

21.08.5

3.0.0

20.11.8