기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Slurm 메모리 기반 스케줄링
버전 3.2.0부터 SlurmSettings/EnableMemoryBasedSchedulingcluster 구성 매개 변수를 사용하여 Slurm 메모리 기반 스케줄링을 AWS ParallelCluster 지원합니다.
참고
AWS ParallelCluster 버전 3.7.0부터 인스턴스에서 여러 인스턴스 유형을 구성하면 EnableMemoryBasedScheduling 활성화할 수 있습니다.
AWS ParallelCluster 버전 3.2.0~3.6의 경우 x
, 인스턴스에서 여러 인스턴스 유형을 구성한 경우 활성화할 EnableMemoryBasedScheduling 수 없습니다.
주의
EnableMemoryBasedScheduling
이 활성화된 상태에서 Slurm 대기열 컴퓨팅 리소스에 여러 인스턴스 유형을 지정하는 경우 RealMemory
값은 모든 인스턴스 유형에 사용할 수 있는 최소 메모리 양입니다. 메모리 용량이 매우 다른 인스턴스 유형을 지정하는 경우 이로 인해 사용되지 않은 메모리가 상당량 발생할 수 있습니다.
EnableMemoryBasedScheduling: true
를 사용하면, Slurm 스케줄러가 각 노드에서 각 작업에 필요한 메모리 양을 추적합니다. 그런 다음 Slurm 스케줄러는 이 정보를 사용하여 동일한 컴퓨팅 노드에서 여러 작업을 스케줄링합니다. 노드에서 작업에 필요한 총 메모리 양은 사용 가능한 노드 메모리보다 클 수 없습니다. 스케줄러는 작업이 제출될 때 요청된 것보다 더 많은 메모리를 작업이 사용하지 않도록 합니다.
EnableMemoryBasedScheduling: false
를 사용하면 공유 노드의 메모리를 놓고 작업이 경쟁하여 작업 실패 및 out-of-memory
이벤트가 발생할 수 있습니다.
주의
Slurm은 레이블에 2의 거듭제곱 표기법(예: MB 또는 GB)을 사용합니다. 이 레이블을 각각 MiB 및 GiB로 읽습니다.
Slurm 구성 및 메모리 기반 스케줄링
EnableMemoryBasedScheduling: true
를 사용하면 Slurm는 다음과 같은 Slurm 구성 파라미터를 설정합니다.
-
slurm.conf
의SelectTypeParameters=CR_CPU_Memory
. 이 옵션은 노드 메모리를 Slurm에서 사용 가능한 리소스로 구성합니다. -
Slurm
cgroup.conf
의ConstrainRAMSpace=yes
. 이 옵션을 사용하면 작업이 제출될 때 요청한 메모리 양만큼 작업의 메모리 액세스가 제한됩니다.
참고
이 두 옵션이 설정된 경우 다른 여러 Slurm 구성 파라미터가 Slurm 스케줄러 및 리소스 관리자의 동작에 영향을 줄 수 있습니다. 자세한 내용은 Slurm 설명서
Slurm 스케줄러 및 메모리 기반 스케줄링
EnableMemoryBasedScheduling: false
(기본값)
기본적으로 EnableMemoryBasedScheduling
는 false로 설정됩니다. false인 경우, Slurm은 스케줄링 알고리즘에 메모리를 리소스로 포함하지 않으며 작업에서 사용하는 메모리를 추적하지 않습니다. 사용자는 작업에 필요한 노드당 최소 메모리 양을 설정하는 --mem MEM_PER_NODE
옵션을 지정할 수 있습니다. 이렇게 하면 스케줄러는 작업을 예약할때 RealMemory
값이 최소한 MEM_PER_NODE
인 노드를 선택해야 합니다.
예를 들어, 한 사용자가 --mem=5GB
를 사용하여 두 개의 작업을 제출한다고 가정해 보겠습니다. CPU 또는 GPU와 같은 요청된 리소스를 사용할 수 있는 경우 8GiB 메모리가 있는 노드에서 작업을 동시에 실행할 수 있습니다. 이 두 작업은 RealMemory
5GiB 미만의 컴퓨팅 노드에서는 스케줄되지 않습니다.
주의
메모리 기반 스케줄링이 비활성화되면 Slurm은 작업에서 사용하는 메모리 양을 추적하지 않습니다. 동일한 노드에서 실행되는 작업은 메모리 리소스를 놓고 경쟁하여 다른 작업이 실패할 수 있습니다.
메모리 기반 스케줄링을 사용하지 않도록 설정한 경우에는 사용자가 --mem-per-cpu
--mem-per-gpu
EnableMemoryBasedScheduling: true
EnableMemoryBasedScheduling
를 true로 설정하면 Slurm은 각 작업의 메모리 사용량을 추적하여 --mem
제출 옵션에서 요청한 것보다 많은 메모리를 작업에 사용하지 않도록 합니다.
이전 예제를 사용하면 한 사용자가 --mem=5GB
를 사용하여 두 개의 작업을 제출합니다. 메모리가 8GiB인 노드에서는 작업을 동시에 실행할 수 없습니다. 필요한 총 메모리 양이 노드에서 사용 가능한 메모리보다 많기 때문입니다.
메모리 기반 스케줄링이 활성화된 상태에서 --mem-per-cpu
및 --mem-per-gpu
는 Slurm 설명서에 설명된 것과 일관되게 작동합니다. 예를 들어, 작업이 --ntasks-per-node=2 -c 1 --mem-per-cpu=2GB
로 제출됩니다. 이 경우 Slurm은 각 노드에 총 4GiB를 작업에 할당합니다.
주의
메모리 기반 스케줄링이 활성화된 경우 사용자가 작업을 제출할 때 --mem
사양을 포함하는 것이 좋습니다. 에 포함된 기본 Slurm AWS ParallelCluster구성에서는 메모리 옵션이 포함되지 않은 경우 (--mem
,--mem-per-cpu
, 또는--mem-per-gpu
) 할당된 노드의 전체 메모리를 작업에 Slurm 할당합니다. 이는 CPU 또는 GPU와 같은 다른 리소스의 일부만 요청하는 경우에도 마찬가지입니다. 이렇게 하면 다른 작업에 사용할 수 있는 메모리가 없으므로 작업이 완료될 때까지 노드 공유를 효과적으로 방지할 수 있습니다. 이는 작업 제출 시 메모리 사양이 제공되지 않은 경우 Slurm이 작업의 노드당 메모리를 DefMemPerNode
동일한 대기열에 메모리 양이 다른 여러 유형의 컴퓨팅 리소스가 있는 경우 메모리 옵션 없이 제출된 작업에는 노드마다 다른 양의 메모리가 할당될 수 있습니다. 이는 스케줄러가 작업에 사용할 수 있는 노드에 따라 달라집니다. 사용자는 Slurm 구성 파일의 클러스터 또는 파티션 수준에서 DefMemPerNode
또는 DefMemPerCPU
Slurm RealMemory 그리고 AWS ParallelCluster SchedulableMemory
함께 AWS ParallelCluster제공되는 Slurm 구성을 사용하면 작업에 사용할 수 RealMemoryRealMemory
로 AWS ParallelCluster 설정되며 Amazon EC2
메모리 기반 스케줄링이 비활성화되면 Slurm 스케줄러는 사용자가 RealMemory
를 사용해서 --mem
이 지정된 작업을 제출할 때 노드를 필터링합니다.
메모리 기반 스케줄링이 활성화된 경우 Slurm 스케줄러는 RealMemory
를 컴퓨팅 노드에서 실행 중인 작업에 사용할 수 있는 최대 메모리 양으로 해석합니다.
기본 설정은 모든 인스턴스 유형에 적합하지 않을 수 있습니다.
-
이 설정은 노드가 실제로 액세스할 수 있는 메모리 양보다 많을 수 있습니다. 이는 컴퓨팅 노드가 작은 인스턴스 유형일 때 발생할 수 있습니다.
-
이 설정은 노드가 실제로 액세스할 수 있는 메모리 양보다 적을 수 있습니다. 이는 컴퓨팅 노드가 인스턴스 유형이 크고 사용되지 않은 메모리가 상당히 많을 때 발생할 수 있습니다.
SlurmQueuesComputeResourcesSchedulableMemory//를 사용하여 컴퓨팅 노드의 RealMemory
구성 기준 값을 미세 조정할 수 있습니다. AWS ParallelCluster 기본값을 재정의하려면 클러스터 구성에 맞게 SchedulableMemory
의 사용자 지정 값을 정의하세요.
컴퓨팅 노드의 실제 사용 가능한 메모리를 확인하려면 노드에서 /opt/slurm/sbin/slurmd -C
명령을 실행합니다. 이 명령은 RealMemory
slurmd
-C
컴퓨팅 노드의 운영 체제 프로세스에 충분한 메모리가 있는지 확인하세요. 이렇게 하려면 SchedulableMemory
값을 slurmd -C
명령이 반환한 RealMemory
값보다 낮게 설정하여 작업에 사용할 수 있는 메모리를 제한하세요.