Slurm 메모리 기반 스케줄링 - AWS ParallelCluster

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

Slurm 메모리 기반 스케줄링

버전 3.2.0부터 SlurmSettings/EnableMemoryBasedSchedulingcluster 구성 매개변수를 사용하여 Slurm 메모리 기반 스케줄링을 AWS ParallelCluster 지원합니다.

주의

EnableMemoryBasedScheduling이 활성화된 상태에서 Slurm 대기열 컴퓨팅 리소스에 여러 인스턴스 유형을 지정하는 경우 RealMemory 값은 모든 인스턴스 유형에 사용할 수 있는 최소 메모리 양입니다. 메모리 용량이 매우 다른 인스턴스 유형을 지정하는 경우 이로 인해 사용되지 않은 메모리가 상당량 발생할 수 있습니다.

EnableMemoryBasedScheduling: true를 사용하면, Slurm 스케줄러가 각 노드에서 각 작업에 필요한 메모리 양을 추적합니다. 그런 다음 Slurm 스케줄러는 이 정보를 사용하여 동일한 컴퓨팅 노드에서 여러 작업을 스케줄링합니다. 노드에서 작업에 필요한 총 메모리 양은 사용 가능한 노드 메모리보다 클 수 없습니다. 스케줄러는 작업이 제출될 때 요청된 것보다 더 많은 메모리를 작업이 사용하지 않도록 합니다.

EnableMemoryBasedScheduling: false를 사용하면 공유 노드의 메모리를 놓고 작업이 경쟁하여 작업 실패 및 out-of-memory 이벤트가 발생할 수 있습니다.

주의

Slurm은 레이블에 2의 거듭제곱 표기법(예: MB 또는 GB)을 사용합니다. 이 레이블을 각각 MiB 및 GiB로 읽습니다.

Slurm 구성 및 메모리 기반 스케줄링

EnableMemoryBasedScheduling: true를 사용하면 Slurm는 다음과 같은 Slurm 구성 파라미터를 설정합니다.

  • slurm.confSelectTypeParameters=CR_CPU_Memory. 이 옵션은 노드 메모리를 Slurm에서 사용 가능한 리소스로 구성합니다.

  • Slurm cgroup.confConstrainRAMSpace=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 옵션을 지정하지 않는 것이 좋습니다. 이러한 옵션으로 인해 Slurm 설명서에 설명된 것과 다른 동작이 발생할 수 있습니다.

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로 설정하기 때문에 발생합니다. 이 파라미터의 기본값은 0이며 노드 메모리에 대한 무제한 액세스를 지정합니다.

동일한 대기열에 메모리 양이 다른 여러 유형의 컴퓨팅 리소스가 있는 경우 메모리 옵션 없이 제출된 작업에는 노드마다 다른 양의 메모리가 할당될 수 있습니다. 이는 스케줄러가 작업에 사용할 수 있는 노드에 따라 달라집니다. 사용자는 Slurm 구성 파일의 클러스터 또는 파티션 수준에서 DefMemPerNode 또는 DefMemPerCPU 같은 옵션에 대한 사용자 지정 값을 정의하여 이러한 동작을 방지할 수 있습니다.

Slurm RealMemory 그리고 AWS ParallelCluster SchedulableMemory

함께 AWS ParallelCluster제공되는 Slurm 구성을 사용하면 작업에 사용할 수 RealMemory있는 노드당 메모리 양으로 Slurm 해석됩니다. 버전 3.2.0부터는 기본적으로 Amazon EC2 인스턴스 유형에 나열된 메모리의 95% RealMemory 로 AWS ParallelCluster 설정되고 Amazon EC2 API 유형에서 반환됩니다. DescribeInstance

메모리 기반 스케줄링이 비활성화되면 Slurm 스케줄러는 사용자가 RealMemory를 사용해서 --mem이 지정된 작업을 제출할 때 노드를 필터링합니다.

메모리 기반 스케줄링이 활성화된 경우 Slurm 스케줄러는 RealMemory를 컴퓨팅 노드에서 실행 중인 작업에 사용할 수 있는 최대 메모리 양으로 해석합니다.

기본 설정은 모든 인스턴스 유형에 적합하지 않을 수 있습니다.

  • 이 설정은 노드가 실제로 액세스할 수 있는 메모리 양보다 많을 수 있습니다. 이는 컴퓨팅 노드가 작은 인스턴스 유형일 때 발생할 수 있습니다.

  • 이 설정은 노드가 실제로 액세스할 수 있는 메모리 양보다 적을 수 있습니다. 이는 컴퓨팅 노드가 인스턴스 유형이 크고 사용되지 않은 메모리가 상당히 많을 때 발생할 수 있습니다.

SlurmQueuesComputeResourcesSchedulableMemory//를 사용하여 컴퓨팅 노드의 RealMemory 구성 기준 값을 미세 조정할 수 있습니다. AWS ParallelCluster 기본값을 재정의하려면 클러스터 구성에 맞게 SchedulableMemory의 사용자 지정 값을 정의하세요.

컴퓨팅 노드의 실제 사용 가능한 메모리를 확인하려면 노드에서 /opt/slurm/sbin/slurmd -C 명령을 실행합니다. 이 명령은 RealMemory 값을 포함하여 노드의 하드웨어 구성을 반환합니다. 자세한 정보는 slurmd -C을 참조하세요.

컴퓨팅 노드의 운영 체제 프로세스에 충분한 메모리가 있는지 확인하세요. 이렇게 하려면 SchedulableMemory 값을 slurmd -C 명령이 반환한 RealMemory 값보다 낮게 설정하여 작업에 사용할 수 있는 메모리를 제한하세요.