개요
HPC(고성능 컴퓨팅) 환경에서는 자원을 효율적으로 관리하고 작업을 스케줄링하는 것이 매우 중요합니다. SLURM(Simplified Linux Utility for Resource Management)은 이러한 작업을 관리하기 위한 강력한 도구로, SelectType과 SelectTypeParameters는 SLURM 설정에서 자원 할당 방식을 정의하는 핵심적인 역할을 합니다.
이번 글에서는 하이퍼 스레딩(Hyper-Threading, HT)과 SelectTypeParameters의 관계를 중심으로 SLURM 설정을 살펴보겠습니다.
1. 하이퍼 스레딩(Hyper-Threading, HT)이란?
하이퍼 스레딩은 하나의 물리적 코어(Physical Core)가 두 개 이상의 논리적 코어(Logical Core)를 생성하여 병렬 처리 성능을 향상시키는 Intel의 하드웨어 기술입니다. 이를 통해 CPU는 더 많은 스레드를 동시에 실행할 수 있지만, 물리적 리소스를 공유하기 때문에 작업 간의 리소스 경쟁이 발생할 수 있습니다.
이전에 하이퍼 스레딩에 관하여 포스팅한 글이 있습니다.
2025.01.21 - [HPC] - [HPC] 하이퍼스레딩(Hyper-Threading) & Slurm 관계
[HPC] 하이퍼스레딩(Hyper-Threading) & Slurm 관계
1. 하이퍼 스레딩(Hyper-Threading)1.1 정의하이퍼스레딩은 Intel에서 제공하는 CPU 기술로, 하나의 물리적 코어가 두 개의 논리적 코어처럼 작동하도록 만든다.이를 통해 단일 코어에서 더 많은 쓰레드
www.estar987.com
2. Slurm의 SelectType과 SelectTypeParameters 개요
SLURM에서 SelectType은 작업이 클러스터에서 자원을 할당받는 방식을 정의합니다. 이와 함께, SelectTypeParameters는 자원 할당을 세부적으로 제어하여 작업 배치 방식을 조정할 수 있습니다.
https://slurm.schedmd.com/slurm.conf.html
Slurm Workload Manager - slurm.conf
Mechanism used to preempt jobs or enable gang scheduling. When the PreemptType parameter is set to enable preemption, the PreemptMode selects the default mechanism used to preempt the eligible jobs for the cluster. PreemptMode may be specified on a per par
slurm.schedmd.com
위의 slurm 공식 문서를 토대로 블로그를 작성하였습니다.
주요 옵션
- SelectType=select/linear
- 기본적으로 노드 단위로 작업을 할당하며, 메모리 사용량은 고려하지 않습니다.
- SelectType=select/cons_tres
- TRES(Trackable Resource) 기반으로 자원을 세부적으로 관리하며, CPU, 메모리, GPU 등을 각각 할당할 수 있습니다.
- SelectTypeParameters
- SelectType에서 사용할 자원 및 동작 방식을 정의합니다.
- 예: CR_CPU, CR_Core, CR_Core_Memory, CR_ONE_TASK_PER_CORE 등.
3. SLURM에서 SelectType과 SelectTypeParameters의 역할
SelectType
SLURM에서 자원 할당 방식을 정의하는 플러그인입니다.
- select/linear: 노드 단위로 작업을 할당하며, 메모리를 고려하지 않음.
- select/cons_tres: TRES(Trackable Resource) 모델을 기반으로 CPU, 메모리, GPU 등의 자원을 세부적으로 관리.
SelectTypeParameters
SelectType의 동작을 세부적으로 제어하는 옵션으로, 각 클러스터 환경에 맞는 자원 관리 방식을 설정할 수 있습니다.
4. 하이퍼스레딩과 SelectTypeParameters의 간접적인 연관성
하이퍼 스레딩은 SLURM의 SelectTypeParameters 설정에 직접적인 영향을 주는 것은 아니지만, HT가 활성화된 환경에서 자원을 어떻게 배치하느냐에 따라 간접적인 영향을 받을 수 있습니다.
3.1 논리적 코어 단위로 자원 배치
- 설정: CR_CPU
- 하이퍼 스레딩 활성화 시, 논리적 코어를 각각 별도의 CPU로 간주하여 작업을 할당합니다.
- 최대 병렬 작업을 배치할 수 있지만, 물리적 코어 내부에서 리소스를 공유하기 때문에 작업 간 간섭이 발생할 수 있습니다.
3.2 물리적 코어 단위로 자원 배치
- 설정: CR_Core 또는 CR_Core_Memory
- 물리적 코어 단위로 작업을 배치하며, 하나의 물리적 코어에 하나의 작업만 할당됩니다.
- 하이퍼 스레딩이 활성화된 환경에서도 작업 간 리소스 경쟁을 방지할 수 있습니다.
3.3 메모리와 자원의 균형 유지
- 설정: CR_CPU_Memory 또는 CR_Core_Memory
- CPU와 메모리를 동시에 소모 가능한 자원으로 정의하여 자원 사용량을 최적화합니다.
- 메모리를 고려하지 않을 경우 작업 간 메모리 경합이 발생할 수 있으므로, 하이퍼 스레딩 환경에서는 메모리 관리가 중요합니다.
3.4 작업 간 간섭 최소화
- 설정: CR_ONE_TASK_PER_CORE
- 각 물리적 코어에 하나의 작업만 할당되며, 하이퍼 스레딩으로 인해 논리적 코어가 많더라도 물리적 코어 기준으로 작업을 배치합니다.
- 작업 간 간섭을 방지하고, 성능 저하를 줄이는 데 효과적입니다.
4. SLURM 설정 예시
4.1 물리적 코어 단위로 작업 배치
- 물리적 코어 단위로 작업을 배치하여 작업 간 리소스 경합을 방지합니다.
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
4.2 물리적 코어와 메모리 관리
- 물리적 코어와 메모리를 함께 관리하며, 코어당 4GB 메모리를 할당합니다.
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
DefMemPerCPU=4000
4.3 논리적 코어를 최대한 활용
- 하이퍼 스레딩을 통해 논리적 코어를 최대한 활용하여 병렬 작업을 처리합니다.
SelectType=select/cons_tres
SelectTypeParameters=CR_CPU
5. SelectTypeParameters 옵션 상세 설명
5.1 CR_ONE_TASK_PER_CORE
- 역할: 물리적 코어에 하나의 작업만 할당.
- 특징:
- 하이퍼 스레딩이 활성화된 경우에도 각 물리적 코어에 단일 작업 배치.
- 작업 간 간섭을 방지하며 성능 저하를 줄임.
- 적용 사례: 병렬 작업 환경에서 성능 안정성이 중요한 경우.
5.2 CR_CORE_DEFAULT_DIST_BLOCK
- 역할: 코어를 블록 분배 방식으로 노드 내에서 할당.
- 특징:
- 동일한 보드(Board)와 소켓(Socket) 내에서 작업을 배치하여 데이터 로컬리티 향상.
- 기본적으로 작업이 사이클 방식이 아닌 블록 방식으로 배치됨.
- 적용 사례: 작업의 데이터 로컬리티를 높여 통신 비용을 줄이고자 할 때.
5.3 CR_LLN
- 역할: 가장 적게 로드된 노드(Least Loaded Node)에 작업 배치.
- 특징:
- 유휴 자원이 많은 노드에 작업 우선 배치.
- 자원 파편화가 발생할 가능성 있음.
- 적용 사례: 작은 직렬 작업(Serial Jobs) 환경.
5.4 CR_Pack_Nodes
- 역할: 작업을 가능한 한 노드에 밀집 배치.
- 특징:
- 한 노드에 작업을 최대한 몰아넣어 다른 노드의 자원을 남김.
- 병렬 작업보다 직렬 작업에 적합.
- 적용 사례: 자원 효율성을 높이고자 하는 환경.
5.5 LL_SHARED_GRES
- 역할: GRES(예: GPU, Shard 등) 할당 시 가장 적게 사용된 GRES를 우선 할당.
- 특징:
- 작업이 GRES 장치를 분산 사용하도록 유도.
- 적용 사례: GPU와 같은 공유 장치의 균형 있는 사용을 원하는 환경.
5.6 CR_Socket
- 역할: 소켓 단위로 자원을 관리.
- 특징:
- 하나의 소켓에 여러 작업이 할당되지 않음.
- 하이퍼 스레딩이 활성화된 경우에도 소켓 단위로 작업 관리.
- 적용 사례: 소켓 수준에서 리소스를 최적화할 때.
5.7 CR_Socket_Memory
- 역할: 메모리와 소켓을 함께 관리.
- 특징:
- 작업이 소켓의 메모리 제약을 넘지 않도록 보장.
- 적용 사례: 소켓 단위로 메모리와 자원을 동시에 관리할 때.
5.8 CR_Memory
- 역할: 메모리를 소모 가능한 자원으로 관리.
- 특징:
- 메모리 사용량을 제한하고, 메모리 초과 할당 방지.
- 적용 사례: 메모리 자원이 제한된 환경.
5.9 MULTIPLE_SHARING_GRES_PJ
- 역할: 하나의 노드에서 여러 GRES를 공유 가능.
- 특징:
- GRES를 여러 작업이 공유하도록 허용.
- 적용 사례: GPU 리소스를 효율적으로 관리하려는 환경.
5.10 ENFORCE_BINDING_GRES
- 역할: GRES 바인딩 규칙을 기본적으로 활성화.
- 특징:
- GRES 바인딩을 강제하여 작업 간 충돌을 방지.
- 적용 사례: GRES 장치 간 작업 충돌을 방지하려는 경우.
5.11 ONE_TASK_PER_SHARING_GRES
- 역할: GRES 공유 시 하나의 작업에만 할당.
- 특징:
- GRES 장치의 작업 간 간섭 방지.
- 적용 사례: GRES를 공유하면서 작업 안정성을 높이고자 할 때.
6. 결론
SLURM의 SelectTypeParameters는 HPC 환경에서 작업 배치와 자원 관리를 최적화하기 위해 다양한 옵션을 제공합니다. 하이퍼 스레딩이 활성화된 환경에서는 작업의 성격에 따라 논리적 코어를 최대한 활용하거나 물리적 코어 기반으로 작업을 배치하는 것이 중요합니다.
- 병렬 작업의 안정성을 원한다면 CR_Core, CR_Core_Memory, CR_ONE_TASK_PER_CORE 옵션을 고려하세요.
- 직렬 작업이 많다면 CR_LLN이나 CR_Pack_Nodes를 활용할 수 있습니다.
- GRES(GPU 등)를 효율적으로 관리하려면 LL_SHARED_GRES, MULTIPLE_SHARING_GRES_PJ와 같은 옵션이 유용합니다.
'HPC > Slurm' 카테고리의 다른 글
[HPC] 하이퍼스레딩(Hyper-Threading) & Slurm 관계 (0) | 2025.01.22 |
---|---|
[Slurm]Slurm 환경에서 Abaqus 작업 프로세스가 잔존하는 문제 해결 (0) | 2024.12.23 |
[SLURM] SBATCH(2) (0) | 2024.09.09 |
[SLURM] SBATCH(1) (0) | 2024.09.06 |
[SLURM] SRUN 명령어 (1) | 2024.09.05 |