Udostępnij za pośrednictwem


Slurm

Slurm to wysoce konfigurowalny menedżer obciążeń typu open source. Aby uzyskać więcej informacji, zobacz omówienie na witrynie projektu Slurm.

Uwaga

Począwszy od CycleCloud 8.4.0, integracja Slurm została przepisana w celu obsługi nowych funkcji i możliwości. Aby uzyskać więcej informacji, zobacz dokumentację programu Slurm 3.0 .

Aby włączyć narzędzie Slurm w klastrze CycleCloud, zmodyfikuj element "run_list", dostępny w sekcji konfiguracji definicji klastra. Klaster Slurm składa się z dwóch głównych części: węzła głównego (lub węzła harmonogramującego), który uruchamia oprogramowanie Slurm na udostępnionym systemie plików, oraz węzłów wykonywania, które montują ten system plików i uruchamiają 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

Narzędzie Slurm można łatwo włączyć w klastrze CycleCloud, modyfikując element "run_list", dostępny w sekcji konfiguracji definicji klastra. Dwa podstawowe składniki klastra Slurm to węzeł "scheduler", który udostępnia udostępniony system plików, na którym działa oprogramowanie Slurm, oraz węzły "execute", które są hostami, które zainstalują udostępniony system plików i wykonały 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 działające w wersjach CycleCloud 7.8 i nowszych implementują zaktualizowaną wersję interfejsów API skalowania automatycznego, która umożliwia klastrom korzystanie z wielu tablic węzłów i partycji. Aby ułatwić tę funkcję w programie Slurm, usługa CycleCloud wstępnie wypełnia wykonane węzły w klastrze. Ze względu na prepopulację należy uruchomić polecenie na węźle harmonogramu Slurm po wprowadzeniu jakichkolwiek zmian w klastrze, takich jak limity autoskalowania lub typy maszyn wirtualnych.

Wprowadzanie zmian w klastrze

Klaster Slurm wdrożony w usłudze CycleCloud zawiera skrypt ułatwiający zmiany. Po wprowadzeniu jakichkolwiek zmian w klastrze uruchom następny element główny (na przykład, uruchamiając polecenie 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 wersji CycleCloud przed 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 (np. 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 istnieją uruchomione węzły, przy uruchamianiu nowych węzłów wystąpi błąd This node doesn't match existing scaleset attribute.

/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 (np. rozmiar maszyny wirtualnej, obraz lub plik cloud-init), a węzły są uruchomione, wystąpi błąd This node doesn't match existing scaleset attribute podczas uruchamiania nowych węzłów. Z tego powodu polecenie apply_changes upewnia się, że węzły są zakończone, i kończy się niepowodzeniem z tym komunikatem o błędzie, jeśli nie: Następujące węzły muszą być w pełni zakończone przed dokonaniem 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 tych 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 dodatkowych poleceń remove_nodes + scale. Upewnij się, że remove_nodes polecenie nie wyświetla ostrzeżenia o węzłach, które muszą zostać wyłączone.

Tworzenie partycji uzupełniających

Domyślny szablon dostarczany z usługą Azure CycleCloud ma dwie partycje (hpc i htc), i można zdefiniować niestandardowe array węzłów, które mapują bezpośrednio na partycje Slurm. Aby na przykład utworzyć partycję procesora GPU, dodaj następną 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 w celach planowania. Ponieważ dostępna pamięć może się nieznacznie różnić ze względu na opcje jądra systemu Linux, a system operacyjny i maszyna wirtualna używają niewielkiej ilości pamięci, usługa CycleCloud automatycznie zmniejsza wartość pamięci w konfiguracji Slurm. Domyślnie usługa CycleCloud powstrzymuje 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, możliwe jest wyłączenie 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.

Wykluczenie 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 hpc partycji, dodaj obok elementu /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 obok /sched/slurm.conf

SuspendExcParts=hpc

Następnie uruchom ponownie usługę slurmctld.

Rozwiązywanie problemów

Konflikty UID dla użytkowników Slurm i Munge

Domyślnie ten projekt używa identyfikatora 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 :

Edytuj harmonogram

Edytuj harmonogram

execute I nodearray: Edytuj nodearray

Dodaj następne atrybuty do Configuration sekcji: Edytuj konfigurację

    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, istnieje kilka dzienników w węźle harmonogramu, które można sprawdzić. Pierwszy polega na upewnieniu się, że wywołania wznawiania trybu oszczędzania energii są wykonywane poprzez 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 log do sprawdzenia to /var/log/slurmctld/resume.log. Jeśli krok procesu kończy się niepowodzeniem, występuje /var/log/slurmctld/resume_fail.log. Jeśli istnieją komunikaty o nieznanych lub nieprawidłowych nazwach węzłów, upewnij się, że węzły nie są dodawane do klastra bez kolejnych kroków w sekcji "Wprowadzanie zmian klastra".

Dokumentacja konfiguracji programu 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". Spowoduje to ustawienie wersji slurm do zainstalowania i uruchomienia. W tej chwili jest to opcja domyślna i jedyna . W przyszłości może być obsługiwanych więcej wersji.
slurm.autoscale Wartość domyślna: "false". Ustawienie dla tablicy węzłów, które określa, czy Slurm powinien automatycznie zatrzymywać i uruchamiać węzły w tej tablicy węzłów.
slurm.hpc Wartość domyślna: "true". Ustawienie dla zestawu węzłów, które kontroluje, czy węzły w zestawie są umieszczane w tej samej grupie umiejscowienia. Używane głównie w przypadku środowiska nodearrays przy użyciu rodzin maszyn wirtualnych z rozwiązaniem InfiniBand. Ma zastosowanie tylko wtedy, gdy wartość slurm.autoscale jest ustawiona na wartość "true".
slurm.domyślna_partycja Wartość domyślna: "false". Ustawienie dla nodearray, które określa, czy nodearray powinno być domyślną partycją dla zadań, które nie żądają partycji jawnie.
slurm.osłabić_pamięć 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 wstrzymania a możliwością ponownego użycia 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 program Slurm jest zainstalowany w obrazie niestandardowym, ta opcja konfiguracji powinna być ustawiona na wartość "false" (proj w wersji 2.5.0 lub nowszej).
slurm.use_pcpu Wartość domyślna: "true". Ustawienie per-nodearray do kontrolowania planowania za pomocą hiperwątków vcpus. Ustaw wartość "false", aby ustawić parametr CPUs na vcpus w pliku cyclecloud.conf.
slurm.user.name Ustawienie domyślne: "slurm". Nazwa użytkownika usługi Slurm do użycia.
slurm.użytkownik.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". 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 automatycznego zatrzymania w różnych harmonogramach.

Atrybut Opis
cyclecloud.klaster.autoskalowanie.zatrzymanie_wlaczone Czy włączono automatyczne zatrzymanie w tym węźle? [prawda/fałsz]
cyclecloud.cluster.autoscale.czas_bezczynności_po_zadaniach Czas (w sekundach) bezczynności węzła po zakończeniu zadań, zanim zostanie zredukowany.
cyclecloud.klaster.autoskalowanie.czas_bezczynności_przed_zadaniami Czas (w sekundach), przez który węzeł pozostaje nieaktywny przed ukończeniem zadań i przed skalowaniem w dół.