이 가이드에서는 Slurm의 계정 및 서비스 품질(QOS) 기능을 사용하여 우선순위와 리소스 요구사항이 서로 다른 여러 팀이 공유하는 단일 학습 클러스터를 효과적으로 관리하는 방법을 보여줍니다.
목표
이 튜토리얼을 마치면 다음 작업을 할 수 있는 클러스터 리소스 관리 프레임워크가 마련됩니다.
- 팀별 리소스 한도를 적용합니다.
- 긴급성에 따라 작업의 우선순위를 지정하고 선점합니다.
- 리소스 소비에 대한 명확한 계정 지정을 제공합니다.
- 공정성을 유지하면서 클러스터 사용률을 극대화합니다.
기본 요건
계정을 관리하고 작업을 예약하고 우선순위를 지정하도록 계정, 선점, 우선순위가 구성된 실행 중인 학습 클러스터
관리자 명령어를 실행하기 위한 클러스터의 로그인 노드에 대한
sudo액세스 권한
핵심 개념: Slurm 계정의 구성요소
Slurm은 명확하고 유연한 계층 구조를 사용하여 리소스를 관리합니다. 이 네 가지 구성요소를 이해하는 것이 중요합니다.
| 구성요소 | 예 | 목적 |
|---|---|---|
| 계정 | 팀 또는 프로젝트 | 사용자를 그룹화하고 전체 리소스 한도를 설정하는 기본 단위입니다(예: team_ace는 최대 10개의 노드를 사용할 수 있음). |
| 사용자 | 개별 연구자 | 작업을 제출하는 사용자입니다. 모든 사용자는 기본 계정에 속해야 합니다. |
| 파티션 | 하드웨어 큐 | 노드의 논리적 그룹입니다. 유연성을 극대화하려면 모든 노드가 포함된 단일 파티션을 사용하는 것이 좋습니다. |
| QOS | 규칙서 | 작업 제한(예: '이 QOS의 작업은 노드 2개만 사용할 수 있음') 및 예약 우선순위를 정의하는 이름이 지정된 규칙 집합입니다. |
이 모델을 사용하면 전체 계정에 대해 높은 수준의 할당량을 설정하고 QOS를 사용하여 더 세부적인 작업별 한도를 적용할 수 있습니다.
페르소나: 관리자와 연구자
이 시스템과 상호작용하는 두 가지 구분되는 역할은 클러스터 관리자와 연구자입니다.
클러스터 관리자
- 기본 도구:
sacctmgr(Slurm 계정 관리자) - 내 작업: 계정, 사용자, QOS 규칙의 '스캐폴딩'을 빌드합니다. 일반적으로 '한 번 구성하고 필요할 때 업데이트'하는 태스크입니다.
- 주요 태스크: 계정 만들기, 계정에 사용자 할당, QOS 규칙서 정의하고 서로 연결
연구자
- 기본 도구:
sbatch,squeue,sinfo - 연구자의 작업: 연구 작업을 제출하고 모니터링합니다.
- 매직: 연구자가 작업을 제출하면 Slurm이 계정 및 QOS와 연결된 규칙을 자동으로 확인합니다. 작업이 제한을 위반하면 Slurm에서 명확한 오류 메시지와 함께 이를 거부합니다.
튜토리얼: 단계별 둘러보기
다음 튜토리얼에서는 일련의 점진적인 시나리오를 통해 이러한 개념을 실제로 적용합니다. 이 둘러보기에서는 클러스터 관리자 역할이라고 가정합니다. 태스크로 team_ace 계정 하나와 user_alice 사용자 하나를 설정해야 합니다. 시나리오는 처음에는 제한이 없으며 점진적으로 제어 레이어가 추가됩니다.
1부: 초기 설정(제한 없음)
계정을 만들고 사용자를 연결합니다.
- 목표:
team_ace및user_alice의 기본 계층 구조를 만듭니다. - 방법:
sacctmgr을 사용하여 계정을 추가한 다음 해당 계정과 연결된 사용자를 추가합니다.
# --- (Run as Admin) ---
# 1. Create the 'team_ace' account
sudo sacctmgr add account team_ace Description="The Ace Team"
# 2. Create the 'user_alice' user and map them to their default account
# (Note: 'user_alice' must already exist as a Linux user on the node)
sudo sacctmgr add user user_alice Account=team_ace
# 3. Show the hierarchy we just built to confirm
sacctmgr show associations where account=team_ace
결과: 이제 user_alice 사용자로서 대규모 작업을 제출할 수 있습니다. 제한이 없으므로 7노드 작업이 수락되고 즉시 실행됩니다(7개의 노드가 유휴 상태라고 가정).
2부: 계정에 그룹 수준 한도 추가
그 다음은 team_ace 계정에 리소스 한도를 적용하여 전체 팀을 최대 6개의 노드와 총 4개의 작업으로 제한합니다.
목표: 전체 팀의 총 리소스 한도를 설정합니다.
방법:
GrpJobs(그룹 작업) 및GrpTRES(그룹 추적 가능 리소스, 이 경우node=6)를 사용하여team_ace계정에 이 한도를 적용합니다.
# --- (Run as Admin) ---
# 1. Add group-level job and node limits to the 'team_ace' account
sudo sacctmgr modify account where name=team_ace set GrpJobs=4 GrpTRES=node=6
# 2. View the limits to confirm the change
sacctmgr show association where account=team_ace
결과: 새 한도가 작동하는지 확인하려면 user_alice로 다음 테스트를 수행하세요.
- 노드 제한: 이제 7개 노드 작업을 제출하면 실패합니다. 작업이 이유(
AssocGrpNodeLimit)와 함께 대기 중(PD) 상태로 전환됩니다. - 작업 한도: 단일 노드 작업을 5개 제출하면 작업 4개가 실행되고(
R) 5번째 작업은 이유(AssocGrpJobsLimit)와 함께 대기 중(PD)이 됩니다.
계정 수준 한도는 완벽하게 작동합니다.
3부: QOS로 작업별 한도 추가
계정 수준 그룹 한도는 팀의 총 리소스 사용량을 제한하는 데 효과적입니다. 하지만 사용자가 팀의 할당량을 모두 사용하는 단일 작업을 제출하는 것을 방지하지는 않습니다. 개별 작업의 크기를 제어하려면 다음 단계로 서비스 품질(QOS)을 사용합니다.
- 목표: 팀에서 제출한 개별 작업의 최대 크기를 제한합니다.
- 방법:
MaxTRESPerJob=node=2규칙을 사용하여qos1이라는 서비스 품질 (QOS)을 만듭니다. 그러면team_ace계정 전체의 기본 QOS가 됩니다.
# --- (Run as Admin) ---
# 1. Create a QOS with a per-job limit of 2 nodes
sudo sacctmgr add qos qos1 MaxTRESPerJob=node=2
# 2. Allow the 'team_ace' account to use this QOS
sudo sacctmgr modify account where account=team_ace set QOS=qos1
# 3. Set 'qos1' as the DEFAULT QOS for all users in this account
sudo sacctmgr modify account where account=team_ace set DefaultQOS=qos1
결과: 이제 user_alice가 3개 노드 작업을 제출하면 해당 작업은 (QOSMaxNodePerJobLimit) 이유로 대기 상태가 됩니다. 사용자는 여전히 총 계정 할당량(6개 노드) 내에 있지만 작업별 QOS 규칙을 위반한 것입니다.
4부: 사용자별 재정의 추가
user_alice가 인턴이고 나머지 팀에 영향을 주지 않고 더 작은 업무만 담당하도록 제한해야 한다면 어떻게 해야 할까요?
- 목표: 단일 사용자에게 더 제한적인 한도를 적용합니다.
- 방법: 더 제한적인 새 QOS(
qos_intern)를 만들고 이를user_alice의 기본값으로 적용합니다. 이렇게 하면 계정의 기본 QOS가 재정의됩니다.
# --- (Run as Admin) ---
# 1. Create a more restrictive QOS with a 1-node limit
sudo sacctmgr add qos qos_intern MaxTRESPerJob=node=1
# 2. Allow the account to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_intern
# 3. Apply 'qos_intern' as the default QOS for the specific user association
sudo sacctmgr modify user where name=user_alice account=team_ace set DefaultQOS=qos_intern
결과: user_alice가 이전에 qos1에서 허용된 2개 노드 작업을 제출하려고 하면 (QOSMaxNodePerJobLimit)으로 인해 실패합니다. 더 구체적인 사용자 수준 규칙이 일반 계정 수준 규칙을 재정의했습니다.
파트 5: 우선순위 및 선점 구성
마지막으로 클러스터가 가득 차더라도 중요한 작업을 즉시 실행할 수 있도록 작업 우선순위 및 선점을 구성합니다.
- 목표: 리소스를 확보하기 위해 우선순위가 낮은 작업을 일시중지하거나 취소할 수 있는 우선순위가 높은 '긴급' QOS를 만듭니다.
방법:
Priority값이 높은 새qos_urgent를 만듭니다.qos_urgent에게qos1에서 실행되는 작업을Preempt할 수 있다고 알립니다.- 작업이 선점되면 작업을
REQUEUE하도록qos1을 구성합니다.
# --- (Run as Admin) ---
# 1. Create a new 'qos_urgent' with a high priority that can preempt 'qos1'
sudo sacctmgr add qos qos_urgent Priority=1000 Preempt=qos1
# 2. Configure 'qos1' to requeue preempted jobs after a 10-second grace period
sudo sacctmgr modify qos where name=qos1 set PreemptMode=REQUEUE GraceTime=10
# 3. Allow the 'team_ace' account and 'user_alice' to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_urgent
sudo sacctmgr modify user where name=user_alice account=team_ace set QOS+=qos_urgent
# 4. For this scenario, remove the group limits so preemption is easier to trigger
sudo sacctmgr modify account where name=team_ace set GrpJobs=-1 GrpTRES=node=-1
결과:
- 한 터미널에서
user_alice는 기본qos1로 장기 실행 작업을 제출합니다. 실행이 시작됩니다(R). - 두 번째 터미널에서
user_alice는 긴급 QOS(sbatch --qos=qos_urgent ...)를 사용하여 대규모 작업을 제출합니다. - 몇 초 내에 첫 번째 작업의 상태가 실행 중(R)에서 대기 중(
PD)으로 변경되고 이유는 (Preempted)입니다. 그 다음 긴급 작업이 실행되기 시작합니다.
완료되었습니다. 우선순위가 높은 작업이 우선순위가 낮은 작업을 자동으로 대체하는 시스템을 구성했습니다.
요약 및 다음 단계
이 튜토리얼을 따라 Slurm의 계층적 계정 기능을 사용하여 공유 클러스터를 세부적으로 제어하는 방법을 배웠습니다. 이제 다음 작업을 수행하실 수 있습니다.
- 전역 한도 설정: 계정을 사용하여 전체 팀의 총 리소스 할당량을 설정합니다.
- 작업별 규칙 적용: QOS를 사용하여 개별 작업의 크기와 우선순위를 제어합니다.
- 특정 재정의 만들기: 세부적인 제어를 위해 사용자에게 다른 QOS를 적용합니다.
- 우선순위 보장: 중요한 워크로드가 항상 실행될 수 있도록 선점을 구성합니다.
이 계층화된 모델은 클러스터 리소스를 공정하고 효율적으로 관리할 수 있는 유연하고 강력한 방법을 제공합니다. 고급 구성에 관한 더 자세한 내용은 공식 Slurm 문서를 참조하세요.