튜토리얼: 클러스터에서 계정 및 작업 일정 관리

Vertex AI 학습 클러스터에 관심이 있으면 영업 담당자에게 문의하여 액세스 권한을 받으세요.

이 가이드에서는 Slurm의 계정 및 서비스 품질(QOS) 기능을 사용하여 우선순위와 리소스 요구사항이 서로 다른 여러 팀이 공유하는 단일 학습 클러스터를 효과적으로 관리하는 방법을 보여줍니다.

목표

이 튜토리얼을 마치면 다음 작업을 할 수 있는 클러스터 리소스 관리 프레임워크가 마련됩니다.

  • 팀별 리소스 한도를 적용합니다.
  • 긴급성에 따라 작업의 우선순위를 지정하고 선점합니다.
  • 리소스 소비에 대한 명확한 계정 지정을 제공합니다.
  • 공정성을 유지하면서 클러스터 사용률을 극대화합니다.

기본 요건

  • 계정을 관리하고 작업을 예약하고 우선순위를 지정하도록 계정, 선점, 우선순위가 구성된 실행 중인 학습 클러스터

  • 조정

  • 고급 Slurm 설정

  • 관리자 명령어를 실행하기 위한 클러스터의 로그인 노드에 대한 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_aceuser_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로 다음 테스트를 수행하세요.

  1. 노드 제한: 이제 7개 노드 작업을 제출하면 실패합니다. 작업이 이유(AssocGrpNodeLimit)와 함께 대기 중(PD) 상태로 전환됩니다.
  2. 작업 한도: 단일 노드 작업을 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를 만듭니다.
  • 방법:

    1. Priority 값이 높은 새 qos_urgent를 만듭니다.
    2. qos_urgent에게 qos1에서 실행되는 작업을 Preempt할 수 있다고 알립니다.
    3. 작업이 선점되면 작업을 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

결과:

  1. 한 터미널에서 user_alice는 기본 qos1로 장기 실행 작업을 제출합니다. 실행이 시작됩니다(R).
  2. 두 번째 터미널에서 user_alice는 긴급 QOS(sbatch --qos=qos_urgent ...)를 사용하여 대규모 작업을 제출합니다.
  3. 몇 초 내에 첫 번째 작업의 상태가 실행 중(R)에서 대기 중(PD)으로 변경되고 이유는 (Preempted)입니다. 그 다음 긴급 작업이 실행되기 시작합니다.

완료되었습니다. 우선순위가 높은 작업이 우선순위가 낮은 작업을 자동으로 대체하는 시스템을 구성했습니다.

요약 및 다음 단계

이 튜토리얼을 따라 Slurm의 계층적 계정 기능을 사용하여 공유 클러스터를 세부적으로 제어하는 방법을 배웠습니다. 이제 다음 작업을 수행하실 수 있습니다.

  • 전역 한도 설정: 계정을 사용하여 전체 팀의 총 리소스 할당량을 설정합니다.
  • 작업별 규칙 적용: QOS를 사용하여 개별 작업의 크기와 우선순위를 제어합니다.
  • 특정 재정의 만들기: 세부적인 제어를 위해 사용자에게 다른 QOS를 적용합니다.
  • 우선순위 보장: 중요한 워크로드가 항상 실행될 수 있도록 선점을 구성합니다.

이 계층화된 모델은 클러스터 리소스를 공정하고 효율적으로 관리할 수 있는 유연하고 강력한 방법을 제공합니다. 고급 구성에 관한 더 자세한 내용은 공식 Slurm 문서를 참조하세요.