다음을 통해 공유


Slurm

Slurm은 매우 구성 가능한 오픈 소스 워크로드 관리자입니다. 개요는 Slurm 프로젝트 사이트를 참조하세요.

참고

CycleCloud 8.4.0부터 Slurm 통합은 새로운 기능과 기능을 지원하도록 다시 작성되었습니다. 자세한 내용은 Slurm 3.0 설명서를 참조하세요.

클러스터 정의의 구성 섹션에서 "run_list"을 수정하여 CycleCloud 클러스터에서 Slurm을 쉽게 사용하도록 설정할 수 있습니다. Slurm 클러스터의 두 가지 기본 구성 요소는 Slurm 소프트웨어가 실행되는 공유 파일 시스템을 제공하는 'master'(또는 '스케줄러') 노드와 공유 파일 시스템을 탑재하고 제출된 작업을 실행하는 호스트인 'execute' 노드입니다. 예를 들어 간단한 클러스터 템플릿 코드 조각은 다음과 같을 수 있습니다.

[cluster custom-slurm]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:master]]]
    [[[configuration]]]
    run_list = role[slurm_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:execute]]]
    [[[configuration]]]
    run_list = role[slurm_master_role]
    slurm.autoscale = true
    # Set to true if nodes are used for tightly-coupled multi-node jobs
    slurm.hpc = true
    slurm.default_partition = true

클러스터 정의의 구성 섹션에서 "run_list"을 수정하여 CycleCloud 클러스터에서 Slurm을 쉽게 사용하도록 설정할 수 있습니다. Slurm 클러스터의 두 가지 기본 구성 요소는 Slurm 소프트웨어가 실행되는 공유 파일 시스템을 제공하는 '스케줄러' 노드와 공유 파일 시스템을 탑재하고 제출된 작업을 실행하는 호스트인 '실행' 노드입니다. 예를 들어 간단한 클러스터 템플릿 코드 조각은 다음과 같을 수 있습니다.

[cluster custom-slurm]

[[node scheduler]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:scheduler]]]
    [[[configuration]]]
    run_list = role[slurm_scheduler_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:execute]]]
    [[[configuration]]]
    run_list = role[slurm_scheduler_role]
    slurm.autoscale = true
    # Set to true if nodes are used for tightly-coupled multi-node jobs
    slurm.hpc = true
    slurm.default_partition = true

기존 Slurm 클러스터 편집

CycleCloud 버전 7.8 이상에서 실행되는 Slurm 클러스터는 클러스터가 여러 nodearrays 및 파티션을 활용할 수 있도록 하는 자동 크기 조정 API의 업데이트된 버전을 구현합니다. Slurm에서 이 기능을 용이하게 하기 위해 CycleCloud는 클러스터에서 실행 노드를 미리 채웁니다. 따라서 자동 크기 조정 제한 또는 VM 유형과 같이 클러스터를 변경한 후 Slurm 스케줄러 노드에서 명령을 실행해야 합니다.

클러스터 변경

CycleCloud에 배포된 Slurm 클러스터에는 이를 용이하게 하는 스크립트가 포함되어 있습니다. 클러스터를 변경한 후 Slurm 스케줄러 노드에서 다음을 루트(예: 실행 sudo -i)로 실행하여 클러스터의 노드를 다시 slurm.conf 빌드하고 업데이트합니다.

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

참고

CycleCloud 버전 < 7.9.10의 cyclecloud_slurm.sh 경우 스크립트는 /opt/cycle/jetpack/system/bootstrap/slurm에 있습니다.

중요

MPI 파티션의 노드에 대한 VM에 영향을 주는 변경 내용(예: VM 크기, 이미지 또는 cloud-init)을 변경하는 경우 노드를 먼저 종료 해야 합니다 . 이 remove_nodes 경우 명령은 경고를 출력하지만 오류와 함께 종료되지는 않습니다. 실행 중인 노드가 있는 경우 새 노드가 시작될 때 오류가 This node does not match existing scaleset attribute 발생합니다.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

참고

CycleCloud 버전 < 8.2의 cyclecloud_slurm.sh 경우 스크립트는 /opt/cycle/jetpack/system/bootstrap/slurm에 있습니다.

MPI 파티션의 노드(예: VM 크기, 이미지 또는 cloud-init)에 대한 VM에 영향을 주는 변경 작업을 수행하고 노드가 실행 중인 경우 새 노드가 시작될 때 오류가 This node does not match existing scaleset attribute 발생합니다. 이러한 이유로 apply_changes 명령은 노드가 종료되었는지 확인하고, 그렇지 않은 경우 다음 오류 메시지와 함께 실패 합니다. 변경 내용을 적용하기 전에 다음 노드를 완전히 종료해야 합니다.

MPI 노드의 VM 속성에 영향을 주지 않는 변경을 수행하는 경우 실행 중인 노드를 먼저 종료할 필요가 없습니다. 이 경우 다음 두 명령을 사용하여 변경할 수 있습니다.

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

참고

명령은 apply_changes CycleCloud 8.3 이상에만 존재하므로 이전 버전에서 변경하는 유일한 방법은 위의 remove_nodes + scale 명령을 사용하는 것입니다. 명령이 remove_nodes 종료해야 하는 노드에 대한 경고를 출력하지 않는지 확인합니다.

추가 파티션 만들기

Azure CycleCloud와 함께 제공되는 기본 템플릿에는 두 개의 파티션(hpchtc)이 있으며 Slurm 파티션에 직접 매핑되는 사용자 지정 nodearray를 정의할 수 있습니다. 예를 들어 GPU 파티션을 만들려면 클러스터 템플릿에 다음 섹션을 추가합니다.

    [[nodearray gpu]]
    MachineType = $GPUMachineType
    ImageName = $GPUImageName
    MaxCoreCount = $MaxGPUExecuteCoreCount
    Interruptible = $GPUUseLowPrio
    AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs

        [[[configuration]]]
        slurm.autoscale = true
        # Set to true if nodes are used for tightly-coupled multi-node jobs
        slurm.hpc = false

        [[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
        [[[network-interface eth0]]]
        AssociatePublicIpAddress = $ExecuteNodesPublic

메모리 설정

CycleCloud는 Slurm이 예약 목적으로 사용할 수 있는 메모리의 양을 자동으로 설정합니다. 사용 가능한 메모리의 양은 다른 Linux 커널 옵션으로 인해 약간 변경될 수 있으며 OS 및 VM은 작업에 사용할 수 있는 적은 양의 메모리를 사용할 수 있으므로 CycleCloud는 Slurm 구성의 메모리 양을 자동으로 줄입니다. 기본적으로 CycleCloud는 VM에서 보고된 사용 가능한 메모리의 5%를 유지하지만, 이 값은 보류할 메모리의 백분율로 설정 slurm.dampen_memory 하여 클러스터 템플릿에서 재정의할 수 있습니다. 예를 들어 VM 메모리의 20%를 유지하려면 다음을 수행합니다.

    slurm.dampen_memory=20

특정 노드 또는 파티션에 대해 자동 크기 조정을 사용하지 않도록 설정

기본 제공 CycleCloud "KeepAlive" 기능은 현재 Slurm 클러스터에서 작동하지 않지만 slurm.conf 파일을 직접 편집하여 실행 중인 Slurm 클러스터에 대해 자동 크기 조정을 사용하지 않도록 설정할 수 있습니다. 개별 노드 또는 전체 파티션을 자동 크기 조정에서 제외할 수 있습니다.

노드 제외

노드 또는 여러 노드를 자동 크기 조정에서 제외하려면 Slurm 구성 파일에 를 추가 SuspendExcNodes=<listofnodes> 합니다. 예를 들어 hpc 파티션에서 노드 1과 2를 제외하려면 에 다음을 /sched/slurm.conf추가합니다.

SuspendExcNodes=hpc-pg0-[1-2]

그런 다음 새 구성이 slurmctld 적용되도록 서비스를 다시 시작합니다.

파티션 제외

자동 크기 조정에서 전체 파티션을 제외하는 것은 노드를 제외하는 것과 유사합니다. 전체 hpc 파티션을 제외하려면 다음을 에 추가합니다. /sched/slurm.conf

SuspendExcParts=hpc

그런 다음 서비스를 다시 시작합니다 slurmctld .

문제 해결

Slurm 및 Munge 사용자에 대한 UID 충돌

기본적으로 이 프로젝트는 Slurm 사용자에 대해 UID 및 GID 11100, Munge 사용자에 대해 11101을 사용합니다. 이로 인해 다른 사용자 또는 그룹과 충돌이 발생하면 이러한 기본값이 재정의될 수 있습니다.

UID 및 GID를 재정의하려면 두 노드 모두 scheduler 에 대한 편집 단추를 클릭합니다.

스케줄러 편집 스케줄

스케줄러 편집 스케줄

nodearray execute : Nodearray 편집 nodearray

섹션에 다음 특성을 Configuration 추가합니다.

구성 편집

    slurm.user.name = slurm
    slurm.user.uid = 11100
    slurm.user.gid = 11100
    munge.user.name = munge
    munge.user.uid = 11101
    munge.user.gid = 11101

자동 크기 조정

CycleCloud는 Slurm의 탄력적 컴퓨팅 기능을 사용합니다. 자동 크기 조정 문제를 디버그하기 위해 검사 수 있는 스케줄러 노드에 몇 가지 로그가 있습니다. 첫 번째는 를 확인 /var/log/slurmctld/slurmctld.log하여 절전 다시 시작 호출이 이루어지고 있는지 확인하는 것입니다. 다음과 같은 줄이 표시됩니다.

[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1

검사 다른 로그는 입니다/var/log/slurmctld/resume.log. 다시 시작 단계가 실패하면 도 있습니다 /var/log/slurmctld/resume_fail.log. 알 수 없거나 잘못된 노드 이름에 대한 메시지가 있는 경우 위의 "클러스터 변경" 섹션의 단계를 수행하지 않고 클러스터에 노드를 추가하지 않았는지 확인합니다.

Slurm 구성 참조

기능을 사용자 지정하기 위해 전환할 수 있는 Slurm 특정 구성 옵션은 다음과 같습니다.

Slurm 특정 구성 옵션 Description
slurm.version 기본값: '18.08.7-1'. 설치하고 실행할 Slurm 버전입니다. 이 옵션은 현재 기본 옵션이며 유일한 옵션입니다. 향후에 Slurm 소프트웨어의 추가 버전이 지원될 수 있습니다.
slurm.autoscale 기본값: 'false'. 이는 Slurm이 이 nodearray에서 노드를 자동으로 중지하고 시작해야 하는지 여부를 제어하는 노드별 설정입니다.
slurm.hpc 기본값: 'true'. nodearray의 노드가 동일한 배치 그룹에 배치될지 여부를 제어하는 노드별 설정입니다. InfiniBand에서 VM 제품군을 사용하는 nodearray에 주로 사용됩니다. slurm.autoscale이 'true'로 설정된 경우에만 적용됩니다.
slurm.default_partition 기본값: 'false'. 이 설정은 노드 배열이 파티션을 명시적으로 요청하지 않는 작업의 기본 파티션이어야 하는지 여부를 제어하는 노드별 설정입니다.
slurm.dampen_memory 기본값: '5'. OS/VM 오버헤드에 대해 보류할 메모리의 백분율입니다.
slurm.suspend_timeout 기본값: '600'. 일시 중단 호출과 해당 노드를 다시 사용할 수 있는 시간 사이의 시간(초)입니다.
slurm.resume_timeout 기본값: '1800'. 노드가 성공적으로 부팅될 때까지 대기하는 시간(초)입니다.
slurm.install 기본값: 'true'. Slurm이 노드 부팅('true')에 설치되어 있는지 확인합니다. Slurm이 사용자 지정 이미지에 설치된 경우 'false'로 설정해야 합니다. (proj 버전 2.5.0 이상)
slurm.use_pcpu 기본값: 'true'. 하이퍼스레드 vcpus를 사용하여 예약을 제어하기 위한 노드별 설정입니다. cyclecloud.conf에서 CPU=vcpus를 설정하려면 'false'로 설정합니다.
slurm.user.name 기본값: 'slurm'. 사용할 Slurm 서비스의 사용자 이름입니다.
slurm.user.uid 기본값: '11100'. Slurm 사용자에 사용할 사용자 ID입니다.
slurm.user.gid 기본값: '11100'. Slurm 사용자에 사용할 그룹 ID입니다.
munge.user.name 기본값: 'munge'. 이 이름은 사용할 MUNGE 인증 서비스의 사용자 이름입니다.
munge.user.uid 기본값: '11101'. MUNGE 사용자에 사용할 사용자 ID입니다.
munge.user.gid 기본값: '11101'. MUNGE 사용자에 사용할 그룹 ID입니다.

CycleCloud는 스케줄러에서 표준 자동 중지 특성 집합을 지원합니다.

attribute Description
cyclecloud.cluster.autoscale.stop_enabled 이 노드에서 자동 중지를 사용할 수 있나요? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs 노드가 축소되기 전에 작업을 완료한 후 유휴 상태로 앉을 시간(초)입니다.
cyclecloud.cluster.autoscale.idle_time_before_jobs 노드가 축소되기 전에 작업을 완료하기 전에 유휴 상태로 앉을 시간(초)입니다.