

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

# Slurm 메모리 기반 스케줄링
<a name="slurm-mem-based-scheduling-v3"></a>

버전 3.2.0부터는 [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings) / [`EnableMemoryBasedScheduling`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-EnableMemoryBasedScheduling) 클러스터 구성 파라미터를 사용한 Slurm 메모리 기반 예약을 AWS ParallelCluster 지원합니다.

**참고**  
 AWS ParallelCluster 버전 3.7.0부터 인스턴스에서 여러 인스턴스 유형을 구성하는 경우를 활성화`EnableMemoryBasedScheduling`할 수 있습니다. [](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)   
 AWS ParallelCluster 버전 3.2.0\$13.6.*x*의 경우 [인스턴스](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)에서 여러 인스턴스 유형을 구성하는 경우를 활성화`EnableMemoryBasedScheduling`할 수 없습니다.

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

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

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

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

## Slurm 구성 및 메모리 기반 스케줄링
<a name="slurm-mem-based-scheduling-config-v3"></a>

`EnableMemoryBasedScheduling: true`를 사용하면 Slurm는 다음과 같은 Slurm 구성 파라미터를 설정합니다.
+ `slurm.conf`의 [https://slurm.schedmd.com/slurm.conf.html#OPT_CR_CPU_Memory](https://slurm.schedmd.com/slurm.conf.html#OPT_CR_CPU_Memory). 이 옵션은 노드 메모리를 Slurm에서 사용 가능한 리소스로 구성합니다.
+ Slurm `cgroup.conf`의 [https://slurm.schedmd.com/cgroup.conf.html#OPT_ConstrainRAMSpace](https://slurm.schedmd.com/cgroup.conf.html#OPT_ConstrainRAMSpace). 이 옵션을 사용하면 작업이 제출될 때 요청한 메모리 양만큼 작업의 메모리 액세스가 제한됩니다.

**참고**  
이 두 옵션이 설정된 경우 다른 여러 Slurm 구성 파라미터가 Slurm 스케줄러 및 리소스 관리자의 동작에 영향을 줄 수 있습니다. 자세한 내용은 [Slurm 설명서](https://slurm.schedmd.com/documentation.html)를 참조하세요.

## Slurm 스케줄러 및 메모리 기반 스케줄링
<a name="slurm-mem-based-scheduling-scheduler-v3"></a>

**`EnableMemoryBasedScheduling: false`(기본값)**

기본적으로 `EnableMemoryBasedScheduling`는 false로 설정됩니다. false인 경우, Slurm은 스케줄링 알고리즘에 메모리를 리소스로 포함하지 않으며 작업에서 사용하는 메모리를 추적하지 않습니다. 사용자는 작업에 필요한 노드당 최소 메모리 양을 설정하는 `--mem MEM_PER_NODE` 옵션을 지정할 수 있습니다. 이렇게 하면 스케줄러는 작업을 예약할때 `RealMemory` 값이 최소한 `MEM_PER_NODE`인 노드를 선택해야 합니다.

예를 들어, 한 사용자가 `--mem=5GB`를 사용하여 두 개의 작업을 제출한다고 가정해 보겠습니다. CPU 또는 GPU와 같은 요청된 리소스를 사용할 수 있는 경우 8GiB 메모리가 있는 노드에서 작업을 동시에 실행할 수 있습니다. 이 두 작업은 `RealMemory` 5GiB 미만의 컴퓨팅 노드에서는 스케줄되지 않습니다.

**주의**  
메모리 기반 스케줄링이 비활성화되면 Slurm은 작업에서 사용하는 메모리 양을 추적하지 않습니다. 동일한 노드에서 실행되는 작업은 메모리 리소스를 놓고 경쟁하여 다른 작업이 실패할 수 있습니다.  
메모리 기반 스케줄링을 사용하지 않도록 설정한 경우에는 사용자가 [https://slurm.schedmd.com/srun.html#OPT_mem-per-cpu](https://slurm.schedmd.com/srun.html#OPT_mem-per-cpu) 또는 [https://slurm.schedmd.com/srun.html#OPT_mem-per-gpu](https://slurm.schedmd.com/srun.html#OPT_mem-per-gpu) 옵션을 지정하지 않는 것이 좋습니다. 이러한 옵션으로 인해 [Slurm 설명서](https://slurm.schedmd.com/documentation.html)에 설명된 것과 다른 동작이 발생할 수 있습니다.

**`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`)이 포함되지 않은 경우는 CPUs 또는 GPU와 같은 다른 리소스의 일부만 요청하더라도 할당된 노드의 전체 메모리를 작업에 Slurm 할당합니다. GPUs 이렇게 하면 다른 작업에 사용할 수 있는 메모리가 없으므로 작업이 완료될 때까지 노드 공유를 효과적으로 방지할 수 있습니다. 이는 작업 제출 시 메모리 사양이 제공되지 않은 경우 Slurm이 작업의 노드당 메모리를 [https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerNode](https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerNode)로 설정하기 때문에 발생합니다. 이 파라미터의 기본값은 0이며 노드 메모리에 대한 무제한 액세스를 지정합니다.  
동일한 대기열에 메모리 양이 다른 여러 유형의 컴퓨팅 리소스가 있는 경우 메모리 옵션 없이 제출된 작업에는 노드마다 다른 양의 메모리가 할당될 수 있습니다. 이는 스케줄러가 작업에 사용할 수 있는 노드에 따라 달라집니다. 사용자는 Slurm 구성 파일의 클러스터 또는 파티션 수준에서 `DefMemPerNode` 또는 [https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerCPU](https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerCPU) 같은 옵션에 대한 사용자 지정 값을 정의하여 이러한 동작을 방지할 수 있습니다.

## Slurm RealMemory 및 AWS ParallelCluster SchedulableMemory
<a name="slurm-mem-based-scheduling-realmemory-v3"></a>

는 함께 제공되는 Slurm 구성을 사용하여 [RealMemory](https://slurm.schedmd.com/slurm.conf.html#OPT_RealMemory)를 작업에 사용할 수 있는 노드당 메모리 양으로 AWS ParallelClusterSlurm 해석합니다. 버전 3.2.0부터 기본적으로는 [Amazon EC2 인스턴스 유형에 나열](https://aws.amazon.com/ec2/instance-types)되고 Amazon EC2 API [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html)에서 반환되는 메모리의 `RealMemory` 95%로 AWS ParallelCluster 설정됩니다.

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

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

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

[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) / [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) /[`SchedulableMemory`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-SchedulableMemory)를 사용하여 컴퓨팅 노드에 AWS ParallelCluster 대해에서 `RealMemory` 구성된 값을 미세 조정할 수 있습니다. 기본값을 재정의하려면 클러스터 구성에 맞게 `SchedulableMemory`의 사용자 지정 값을 정의하세요.

컴퓨팅 노드의 실제 사용 가능한 메모리를 확인하려면 노드에서 `/opt/slurm/sbin/slurmd -C` 명령을 실행합니다. 이 명령은 [https://slurm.schedmd.com/slurm.conf.html#OPT_RealMemory](https://slurm.schedmd.com/slurm.conf.html#OPT_RealMemory) 값을 포함하여 노드의 하드웨어 구성을 반환합니다. 자세한 내용은 [https://slurm.schedmd.com/slurmd.html#OPT_-C](https://slurm.schedmd.com/slurmd.html#OPT_-C) 단원을 참조하십시오.

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