OpenPBS

Program OpenPBS można łatwo włączyć w klastrze CycleCloud, modyfikując element "run_list" w sekcji konfiguracji definicji klastra. Dwa podstawowe składniki klastra PBS Professional to węzeł główny, który udostępnia udostępniony system plików, na którym działa oprogramowanie PBS Professional, 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 my-pbspro]

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

    [[[configuration]]]
    run_list = role[pbspro_master_role]

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

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

Importowanie i uruchamianie klastra z definicją w usłudze CycleCloud spowoduje utworzenie jednego węzła głównego. Węzły wykonywania można dodać do klastra za pomocą cyclecloud add_node polecenia . Aby na przykład dodać 10 kolejnych węzłów wykonywania:

cyclecloud add_node my-pbspro -t execute -c 10

Skalowanie automatyczne oparte na zasobach usługi PBS

Usługa Cyclecloud utrzymuje dwa zasoby w celu rozszerzenia możliwości dynamicznej aprowizacji. Te zasoby to nodearray i typ maszyny.

Jeśli prześlesz zadanie i określisz zasób nodearray, qsub -l nodearray=highmem -- /bin/hostname usługa CycleCloud doda węzły do węzłaarray o nazwie "highmem". Jeśli nie ma takiego węzłaarray, zadanie pozostanie bezczynne.

Podobnie, jeśli określono zasób typu maszyny, który jest przesłany, np. qsub -l machinetype:Standard_L32s_v2 my-job.sh, a następnie program CycleCloud automatycznie skaluje "Standard_L32s_v2" w węźle "execute" (wartość domyślna). Jeśli ten typ maszyny nie jest dostępny w tablicy węzłów "execute", zadanie pozostanie bezczynne.

Te zasoby mogą być używane w połączeniu jako:

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

które zostaną automatycznie skalowane tylko wtedy, gdy maszyny "Standard_HB60rs" zostaną określone jako tablica węzłów "hpc".

Dodawanie dodatkowych kolejek przypisanych do węzłaarrays

W klastrach z wieloma węzłami typowe jest tworzenie oddzielnych kolejek w celu automatycznego kierowania zadań do odpowiedniego typu maszyny wirtualnej. W tym przykładzie założono, że w szablonie klastra zdefiniowano następującą "gpu" nodearray:

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

Po zaimportowaniu szablonu klastra i uruchomieniu klastra w węźle serwera można uruchomić następujące polecenia, aby utworzyć kolejkę "gpu":

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Uwaga

Powyższa definicja kolejki spakuje wszystkie maszyny wirtualne w kolejce do pojedynczego zestawu skalowania maszyn wirtualnych w celu obsługi zadań MPI. Aby zdefiniować kolejkę dla zadań szeregowych i zezwolić na wiele zestawów skalowania maszyn wirtualnych, ustaw ungrouped = true dla parametrów resources_default i default_chunk. Można również ustawić resources_default.place = pack , jeśli harmonogram ma spakować zadania na maszynach wirtualnych zamiast alokacji zadań działania okrężnego. Aby uzyskać więcej informacji na temat pakowania zadań PBS, zobacz oficjalną dokumentację systemu operacyjnego PBS Professional.

Dokumentacja konfiguracji usługi PBS Professional

Poniżej przedstawiono opcje konfiguracji specyficzne dla usługi PBS Professional, które można przełączać, aby dostosować funkcje:

Opcje usługi PBS Pro Opis
pbspro.slots Liczba miejsc dla danego węzła do raportowania do usługi PBS Pro. Liczba miejsc to liczba współbieżnych zadań, które może wykonać węzeł. Ta wartość jest domyślnie liczbą procesorów CPU na danym komputerze. Tę wartość można zastąpić w przypadkach, gdy nie uruchamiasz zadań na podstawie procesora CPU, ale na pamięci, procesoraCH GPU itp.
pbspro.slot_type Nazwa typu "slot" udostępnia węzeł. Wartość domyślna to "execute". Gdy zadanie zostanie oznaczone zasobem slot_type=<type>twardym , to zadanie będzie uruchamiane tylko na maszynie tego samego typu miejsca. Dzięki temu można tworzyć różne konfiguracje oprogramowania i sprzętu na węzeł i zapewnić, że odpowiednie zadanie jest zawsze zaplanowane we właściwym typie węzła.
pbspro.version Ustawienie domyślne: "18.1.3-0". Jest to wersja pbS Professional do zainstalowania i uruchomienia. Jest to obecnie opcja domyślna i tylko . W przyszłych dodatkowych wersjach oprogramowania PBS Professional mogą być obsługiwane.

Łączenie usługi PBS z usługą CycleCloud

Usługa CycleCloud zarządza klastrami OpenPBS za pośrednictwem agenta możliwego do zainstalowania o nazwie azpbs. Ten agent łączy się z usługą CycleCloud w celu odczytu konfiguracji klastra i maszyny wirtualnej, a także integruje się z usługą OpenPBS, aby efektywnie przetwarzać informacje o zadaniu i hoście. Wszystkie azpbs konfiguracje znajdują się w autoscale.json pliku, zwykle /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

Ważne pliki

Agent azpbs analizuje konfigurację usługi PBS za każdym razem, gdy jest wywoływana — zadania, kolejki, zasoby. Informacje są dostarczane w stderr i stdout polecenia, a także do pliku dziennika, zarówno na konfigurowalnych poziomach. Wszystkie polecenia zarządzania usługą PBS (qcmd) z argumentami są również rejestrowane w pliku.

Wszystkie te pliki można znaleźć w katalogu /opt/cycle/pbspro/ , w którym zainstalowano agenta.

Plik Lokalizacja Opis
Autoskaluj konfigurację autoscale.json Konfiguracja autoskalowania, mapy zasobów, informacji o dostępie do usługi CycleCloud
Dziennik automatycznego skalowania autoscale.log Rejestrowanie głównych wątków agenta, w tym zarządzanie hostami CycleCloud
Dziennik zapotrzebowania demand.log Szczegółowy dziennik dopasowania zasobów
dziennik śledzenia qcmd qcmd.log Rejestrowanie wywołań agenta qcmd
Konfiguracja rejestrowania logging.conf Konfiguracje dotyczące rejestrowania masek i lokalizacji plików

Definiowanie zasobów OpenPBS

Ten projekt umożliwia ogólne skojarzenie zasobów OpenPBS z zasobami maszyn wirtualnych platformy Azure za pośrednictwem projektu cyclecloud-pbspro (azpbs). Ta relacja zasobu zdefiniowana w elemecie autoscale.json.

Domyślne zasoby zdefiniowane za pomocą szablonu klastra, z których korzystamy, to

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

Zasób OpenPBS o nazwie mem jest utożsamiany z atrybutem węzła o nazwie node.memory, który jest całkowitą pamięcią dowolnej maszyny wirtualnej. Ta konfiguracja umożliwia azpbs przetwarzanie żądania zasobu, takiego jak -l mem=4gb porównanie wartości wymagań dotyczących zasobów zadania z zasobami węzła.

Należy pamiętać, że dysk jest obecnie zakodowany na stałe w pliku size::20g. Oto przykład obsługi rozmiaru dysku określonego rozmiaru maszyny wirtualnej

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Autoskaluj i zestawy skalowania

Usługa CycleCloud traktuje zadania obejmujące i szeregowe inaczej w klastrach OpenPBS. Spanning jobs will land on węzły, które są częścią tej samej grupy umieszczania. Grupa umieszczania ma określone znaczenie platformy (VirtualMachineScaleSet z elementem SinglePlacementGroup=true), a cc będzie zarządzać nazwaną grupą umieszczania dla każdego zestawu węzłów obejmujących. Użyj zasobu group_id usługi PBS dla tej nazwy grupy umieszczania.

Kolejka hpc dołącza odpowiednik -l place=scatter:group=group_id wartości przy użyciu domyślnych kolejek natywnych.

Instalowanie agenta CycleCloud OpenPBS azpbs

Klaster OpenPBS CycleCloud będzie zarządzać instalacją i konfiguracją agenta w węźle serwera. Przygotowanie obejmuje ustawianie zasobów, kolejek i punktów zaczepienia usługi PBS. Instalację skryptową można również wykonać poza aplikacją CycleCloud.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

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ół.

Uwaga

Usługa CycleCloud nie obsługuje konfiguracji z rozszerzeniem Open PBS.

Uwaga

Mimo że system Windows jest oficjalnie obsługiwaną platformą Open PBS, usługa CycleCloud nie obsługuje obecnie uruchamiania usługi Open PBS w systemie Windows.