Udostępnij za pośrednictwem


Slurm

Slurm to wysoce konfigurowalny menedżer obciążeń open source. Aby zapoznać się z omówieniem, zobacz witrynę projektu Slurm .

Uwaga

Od wersji CycleCloud 8.4.0 integracja slurm została przepisana w celu obsługi nowych funkcji i funkcji. Aby uzyskać więcej informacji, zobacz dokumentację programu Slurm 3.0 .

Slurm można łatwo włączyć w klastrze CycleCloud, modyfikując "run_list" w sekcji konfiguracji definicji klastra. Dwa podstawowe składniki klastra Slurm to węzeł "master" (lub "scheduler"), który udostępnia udostępniony system plików, w którym działa oprogramowanie Slurm, oraz węzły "execute", które są hostami, które zainstalują udostępniony system plików i wykonują przesłane zadania. Na przykład prosty fragment kodu szablonu klastra może wyglądać następująco:

[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

Slurm można łatwo włączyć w klastrze CycleCloud, modyfikując "run_list" w sekcji konfiguracji definicji klastra. Dwa podstawowe składniki klastra Slurm to węzeł "scheduler", który udostępnia udostępniony system plików, w którym działa oprogramowanie Slurm, oraz węzły "execute", które są hostami, które instaluje udostępniony system plików i wykonują przesłane zadania. Na przykład prosty fragment kodu szablonu klastra może wyglądać następująco:

[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

Edytowanie istniejących klastrów slurm

Klastry Slurm uruchomione w usłudze CycleCloud w wersji 7.8 lub nowszej implementują zaktualizowaną wersję interfejsów API skalowania automatycznego, która umożliwia klastrom korzystanie z wielu węzłów i partycji. Aby ułatwić tę funkcję w narzędziu Slurm, usługa CycleCloud wstępnie wypełnia węzły wykonywania w klastrze. W związku z tym należy uruchomić polecenie w węźle harmonogramu Slurm po wprowadzeniu jakichkolwiek zmian w klastrze, takich jak limity skalowania automatycznego lub typy maszyn wirtualnych.

Wprowadzanie zmian w klastrze

Klaster Slurm wdrożony w usłudze CycleCloud zawiera skrypt, który to ułatwia. Po wprowadzeniu jakichkolwiek zmian w klastrze uruchom następujące polecenie jako katalog główny (np. przez uruchomienie polecenia sudo -i) w węźle harmonogramu Slurm, aby ponownie skompilować slurm.conf i zaktualizować węzły w klastrze:

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

Uwaga

W przypadku aplikacji CycleCloud w wersji < 7.9.10 cyclecloud_slurm.sh skrypt znajduje się w folderze /opt/cycle/jetpack/system/bootstrap/slurm.

Ważne

Jeśli wprowadzisz jakiekolwiek zmiany wpływające na maszyny wirtualne dla węzłów w partycji MPI (na przykład rozmiar maszyny wirtualnej, obraz lub plik cloud-init), wszystkie węzły muszą zostać najpierw zakończone. Polecenie remove_nodes wyświetla ostrzeżenie w tym przypadku, ale nie kończy się z błędem. Jeśli są uruchomione węzły, wystąpi błąd podczas uruchamiania This node does not match existing scaleset attribute nowych węzłów.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Uwaga

W przypadku aplikacji CycleCloud w wersji < 8.2 cyclecloud_slurm.sh skrypt znajduje się w lokalizacji /opt/cycle/jetpack/system/bootstrap/slurm.

Jeśli wprowadzisz zmiany wpływające na maszyny wirtualne dla węzłów w partycji MPI (na przykład rozmiar maszyny wirtualnej, obraz lub plik cloud-init), a węzły są uruchomione, wystąpi błąd This node does not match existing scaleset attribute podczas uruchamiania nowych węzłów. Z tego powodu polecenie upewnia się, apply_changes że węzły zostały zakończone i kończy się niepowodzeniem z następującym komunikatem o błędzie, jeśli nie: Następujące węzły muszą zostać w pełni zakończone przed zastosowaniem zmian.

Jeśli wprowadzasz zmianę, która nie ma wpływu na właściwości maszyny wirtualnej dla węzłów MPI, nie musisz najpierw przerywać uruchamiania węzłów. W takim przypadku możesz wprowadzić zmiany przy użyciu następujących dwóch poleceń:

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

Uwaga

Polecenie apply_changes istnieje tylko w aplikacji CycleCloud 8.3 lub nowszej, więc jedynym sposobem wprowadzenia zmiany we wcześniejszych wersjach jest użycie powyższych remove_nodes + scale poleceń. Upewnij się, że remove_nodes polecenie nie wyświetla ostrzeżenia o węzłach, które muszą zostać zakończone.

Tworzenie dodatkowych partycji

Domyślny szablon dostarczany z usługą Azure CycleCloud ma dwie partycje (hpc i htc) i można zdefiniować niestandardowe elementy nodearray mapujące bezpośrednio na partycje Slurm. Aby na przykład utworzyć partycję procesora GPU, dodaj następującą sekcję do szablonu klastra:

    [[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

Ustawienia pamięci

Usługa CycleCloud automatycznie ustawia ilość dostępnej pamięci dla programu Slurm do użycia na potrzeby planowania. Ponieważ ilość dostępnej pamięci może ulec nieznacznej zmianie ze względu na różne opcje jądra systemu Linux, a system operacyjny i maszyna wirtualna mogą używać małej ilości pamięci, która w przeciwnym razie byłaby dostępna dla zadań, usługa CycleCloud automatycznie zmniejsza ilość pamięci w konfiguracji slurm. Domyślnie usługa CycleCloud przechowuje 5% zgłoszonej dostępnej pamięci na maszynie wirtualnej, ale tę wartość można zastąpić w szablonie klastra, ustawiając slurm.dampen_memory wartość procentową pamięci do wstrzymania. Na przykład aby wstrzymać 20% pamięci maszyny wirtualnej:

    slurm.dampen_memory=20

Wyłączanie automatycznego skalowania dla określonych węzłów lub partycji

Chociaż wbudowana funkcja CycleCloud "KeepAlive" nie działa obecnie w przypadku klastrów Slurm, istnieje możliwość wyłączenia automatycznego skalowania dla uruchomionego klastra Slurm przez bezpośrednie edytowanie pliku slurm.conf. Można wykluczyć pojedyncze węzły lub całe partycje z automatycznego skalowania.

Wykluczanie węzła

Aby wykluczyć węzeł lub wiele węzłów z autoskalowania, dodaj SuspendExcNodes=<listofnodes> go do pliku konfiguracji Slurm. Aby na przykład wykluczyć węzły 1 i 2 z partycji hpc, dodaj następujące polecenie do /sched/slurm.conf:

SuspendExcNodes=hpc-pg0-[1-2]

Następnie uruchom ponownie usługę slurmctld , aby nowa konfiguracja weszła w życie.

Wykluczanie partycji

Wykluczanie całych partycji z autoskalowania jest podobne do wykluczania węzłów. Aby wykluczyć całą hpc partycję, dodaj następujące polecenie do /sched/slurm.conf

SuspendExcParts=hpc

Następnie uruchom ponownie usługę slurmctld .

Rozwiązywanie problemów

Konflikty identyfikatorów UID dla użytkowników Slurm i Munge

Domyślnie ten projekt używa identyfikatorów UID i GID 11100 dla użytkownika Slurm i 11101 dla użytkownika Munge. Jeśli spowoduje to konflikt z innym użytkownikiem lub grupą, te wartości domyślne mogą zostać zastąpione.

Aby zastąpić identyfikator UID i GID, kliknij przycisk edycji dla obu węzłów scheduler :

Edytowanie harmonogramu edycji

Edytowanie harmonogramu edycji

execute I nodearray: Edytowanie nodearray Edit nodearray nodearray

i dodaj następujące atrybuty do Configuration sekcji:

Edytowanie konfiguracji

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

Automatyczne skalowanie

Usługa CycleCloud używa funkcji elastic computing firmy Slurm. Aby debugować problemy z autoskalowaniem, w węźle harmonogramu można sprawdzić kilka dzienników. Pierwszy polega na upewnieniu się, że wywołania wznawiania zapisywania energii są wykonywane przez sprawdzenie /var/log/slurmctld/slurmctld.log. Powinny zostać wyświetlone następujące wiersze:

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

Drugi dziennik do sprawdzenia to /var/log/slurmctld/resume.log. Jeśli krok wznawiania kończy się niepowodzeniem, wystąpi również element /var/log/slurmctld/resume_fail.log. Jeśli istnieją komunikaty o nieznanych lub nieprawidłowych nazwach węzłów, upewnij się, że nie dodano węzłów do klastra bez wykonywania kroków opisanych w powyższej sekcji "Wprowadzanie zmian klastra".

Dokumentacja konfiguracji slurm

Poniżej przedstawiono opcje konfiguracji specyficzne dla programu Slurm, które można przełączać w celu dostosowania funkcjonalności:

Opcje konfiguracji specyficzne dla programu Slurm Opis
slurm.version Ustawienie domyślne: "18.08.7-1". Jest to wersja slurm do zainstalowania i uruchomienia. Jest to obecnie opcja domyślna i tylko . W przyszłych dodatkowych wersjach oprogramowania Slurm może być obsługiwane.
slurm.autoscale Wartość domyślna: "false". Jest to ustawienie dla węzła, które kontroluje, czy slurm powinien automatycznie zatrzymywać i uruchamiać węzły w tym węźle.
slurm.hpc Wartość domyślna: "true". Jest to ustawienie na węzeł, które kontroluje, czy węzły w węźle zostaną umieszczone w tej samej grupie umieszczania. Używana głównie w przypadku węzłów z rodzinami maszyn wirtualnych z rozwiązaniem InfiniBand. Ma zastosowanie tylko wtedy, gdy parametr slurm.autoscale jest ustawiony na wartość "true".
slurm.default_partition Wartość domyślna: "false". Jest to ustawienie dla poszczególnych węzłów, które kontroluje, czy właściwość nodearray powinna być domyślną partycją dla zadań, które nie żądają jawnie partycji.
slurm.dampen_memory Wartość domyślna: "5". Procent pamięci do wstrzymania obciążenia systemu operacyjnego/maszyny wirtualnej.
slurm.suspend_timeout Wartość domyślna: "600". Czas (w sekundach) między wywołaniem zawieszenia a ponownym użyciem tego węzła.
slurm.resume_timeout Wartość domyślna: "1800". Czas oczekiwania na pomyślne uruchomienie węzła (w sekundach).
slurm.install Wartość domyślna: "true". Określa, czy narzędzie Slurm jest zainstalowane podczas rozruchu węzła ('true'). Jeśli narzędzie Slurm jest zainstalowane w obrazie niestandardowym, powinno to być ustawione na wartość "false". (proj w wersji 2.5.0 lub nowszej)
slurm.use_pcpu Wartość domyślna: "true". Jest to ustawienie per-nodearray do sterowania planowaniem za pomocą hiperwątków vcpus. Ustaw wartość "false", aby ustawić procesory CPU=vcpus w pliku cyclecloud.conf.
slurm.user.name Ustawienie domyślne: "slurm". Jest to nazwa użytkownika usługi Slurm do użycia.
slurm.user.uid Wartość domyślna: "11100". Identyfikator użytkownika do użycia dla użytkownika Slurm.
slurm.user.gid Wartość domyślna: "11100". Identyfikator grupy do użycia dla użytkownika Slurm.
munge.user.name Ustawienie domyślne: "munge". Jest to nazwa użytkownika usługi uwierzytelniania MUNGE do użycia.
munge.user.uid Wartość domyślna: "11101". Identyfikator użytkownika do użycia dla użytkownika MUNGE.
munge.user.gid Wartość domyślna: "11101". Identyfikator grupy do użycia dla użytkownika MUNGE.

Usługa CycleCloud obsługuje standardowy zestaw atrybutów autostopu między harmonogramami:

Atrybut Opis
cyclecloud.cluster.autoscale.stop_enabled Czy automatyczne zatrzymanie jest włączone w tym węźle? [prawda/fałsz]
cyclecloud.cluster.autoscale.idle_time_after_jobs Czas (w sekundach) dla węzła do bezczynności po zakończeniu zadań przed skalowaniem w dół.
cyclecloud.cluster.autoscale.idle_time_before_jobs Czas (w sekundach) dla węzła do bezczynności przed ukończeniem zadań przed skalowaniem w dół.