HTCondor

Funkcję HTCondor można łatwo włączyć w klastrze CycleCloud, modyfikując element "run_list" w sekcji konfiguracji definicji klastra. Istnieją trzy podstawowe składniki klastra HTCondor. Pierwszy to "menedżer centralny", który zapewnia demony planowania i zarządzania. Drugim składnikiem klastra HTCondor jest co najmniej jeden harmonogram, z którego zadania są przesyłane do systemu. Ostatni składnik jest co najmniej jednym węzłem wykonywania, które są hostami wykonujące obliczenia. Prosty szablon HTCondor może wyglądać następująco:

[cluster htcondor]

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

      [[[configuration]]]
      run_list = role[central_manager]

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

      [[[configuration]]]
      run_list = role[condor_scheduler_role],role[filer_role],role[scheduler]

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

      [[[configuration]]]
      run_list = role[usc_execute]

Importowanie i uruchamianie klastra z definicją w usłudze CycleCloud spowoduje uzyskanie węzła "manager" i "scheduler", a także jednego węzła "execute". Węzły wykonywania można dodać do klastra za pomocą cyclecloud add_node polecenia . Aby dodać 10 kolejnych węzłów do wykonania:

cyclecloud add_node htcondor -t execute -c 10

Autoskalowanie HTCondor

Usługa CycleCloud obsługuje skalowanie automatyczne dla aplikacji HTCondor, co oznacza, że oprogramowanie będzie monitorować stan kolejki i włączać i wyłączać węzły zgodnie z potrzebami, aby ukończyć pracę w optymalnym czasie/koszcie. Skalowanie automatyczne dla aplikacji HTCondor można włączyć, dodając Autoscale=true do definicji klastra:

[cluster htcondor]
Autoscale = True

Zaawansowane użycie funkcji HTCondor

Jeśli znasz średnie środowisko uruchomieniowe zadań, możesz zdefiniować average_runtime (w minutach) w zadaniu. Usługa CycleCloud użyje tej funkcji do uruchomienia minimalnej liczby węzłów (na przykład pięć 10-minutowych zadań spowoduje uruchomienie tylko jednego węzła zamiast pięciu, gdy average_runtime zostanie ustawione na 10).

Autoskaluj nodearray

Domyślnie funkcja HTCondor będzie żądać rdzeni zarray nodearray o nazwie "execute". Jeśli zadanie wymaga innego węzła (na przykład jeśli niektóre zadania w przepływie pracy mają wysokie wymaganie dotyczące pamięci), możesz określić slot_type atrybut zadania. Na przykład dodanie +slot_type = "highmemory" spowoduje, że htCondor zażąda węzła z "highmemory" nodearray zamiast "execute" (należy pamiętać, że obecnie wymaga htcondor.slot_type = "highmemory" to ustawienia w sekcji nodearray [[[configuration]]] ). Nie będzie to miało wpływu na sposób planowania zadań przez HTCondor, dlatego możesz chcieć uwzględnić slot_type atrybut startowy w wyrażeniach lub rank wyrażeniu zadaniarequirements. Na przykład: Requirements = target.slot_type = "highmemory".

Przesyłanie zadań do HTCondor

Najbardziej ogólnym sposobem przesyłania zadań do harmonogramu HTCondor jest polecenie (uruchamianie z węzła harmonogramu):

condor_submit my_job.submit

Przykładowy plik przesyłania może wyglądać następująco:

      Universe = vanilla
      Executable = do_science
      Arguments = -v --win-prize=true
      Output = log/$(Cluster).$(Process).out
      Error = log/$(Cluster).$(Process).err
      Should_transfer_files = if_needed
      When_to_transfer_output = On_exit
      +average_runtime = 10
      +slot_type = "highmemory"
      Queue

Dokumentacja konfiguracji HTCondor

Poniżej przedstawiono opcje konfiguracji specyficzne dla funkcji HTCondor, które można ustawić w celu dostosowania funkcjonalności:

Opcje konfiguracji HTCondor-Specific Opis
htcondor.agent_enabled Jeśli wartość true, użyj condor_agent do przesyłania i sondowania zadań. Wartość domyślna: false
htcondor.agent_version Wersja condor_agent do użycia. Ustawienie domyślne: 1.27
htcondor.classad_lifetime Domyślny okres istnienia klas (w sekundach). Ustawienie domyślne: 700
htcondor.condor_owner Konto systemu Linux, które jest właścicielem skryptów skalowania HTCondor. Ustawienie domyślne: root
htcondor.condor_group Grupa systemu Linux, która jest właścicielem skryptów HTCondor skalowanych w poziomie. Ustawienie domyślne: root
htcondor.data_dir Katalog dla dzienników, katalogów buforu, wykonywania katalogów i lokalnego pliku konfiguracji. Ustawienie domyślne: /mnt/condor_data (Linux), C:\All Services\condor_local (Windows)
htcondor.ignore_hyperthreads (Tylko system Windows) Ustaw liczbę procesorów CPU na połowę wykrytych procesorów JAKO sposób na "wyłączenie" wielowątkowość. W przypadku korzystania z automatycznego skalowania określ liczbę Cores rdzeni niewczytanych z ustawieniem konfiguracji w sekcji [[node]] lub [[nodearray]]. Wartość domyślna: false
htcondor.install_dir Katalog, w którym zainstalowano plik HTCondor. Ustawienie domyślne: /opt/condor (Linux), C:\condor (Windows)
htcondor.job_start_count Liczba zadań, które zostaną uruchomione przez schedd na cykl. Wartość 0 jest nieograniczona. Ustawienie domyślne: 20
htcondor.job_start_delay Liczba sekund między poszczególnymi interwałami uruchamiania zadania. Wartość 0 jest natychmiastowa. Ustawienie domyślne: 1
htcondor.max_history_log Maksymalny rozmiar pliku historii zadań w bajtach. Ustawienie domyślne: 20971520
htcondor.max_history_rotations Maksymalna liczba plików historii zadań do zachowania. Ustawienie domyślne: 20
htcondor.negotiator_cycle_delay Minimalna liczba sekund przed rozpoczęciem nowego cyklu negocjatora. Ustawienie domyślne: 20
htcondor.negotiator_interval Jak często (w sekundach) condor_negotiator rozpoczyna cykl negocjacji. Ustawienie domyślne: 60
htcondor.negotiator_inform_startd Jeśli to prawda, negocjator informuje o rozpoczęciu pracy. Wartość domyślna: true
htcondor.remove_stopped_nodes Jeśli wartość true, zatrzymane węzły wykonywania zostaną usunięte z widoku CycleServer zamiast być oznaczone jako "w dół".
htcondor.running Jeśli to prawda, moduł zbierający HTCondor i demony negocjatorów działają na centralnym menedżerze. W przeciwnym razie zostanie uruchomiona tylko condor_master. Wartość domyślna: true
htcondor.scheduler_dual Jeśli to prawda, harmonogramy uruchamiają dwa schedds. Wartość domyślna: true
htcondor.single_slot Jeśli to prawda, traktuje maszynę jako pojedyncze gniazdo (niezależnie od liczby rdzeni posiadanych przez maszynę). Wartość domyślna: false
htcondor.slot_type Definiuje slot_type tablicy węzłów na potrzeby skalowania automatycznego. Ustawienie domyślne: wykonaj
htcondor.update_interval Interwał (w sekundach) dla rozpoczęcia publikowania aktualizacji modułu zbierającego. Ustawienie domyślne: 240
htcondor.use_cache_config Jeśli wartość true, użyj cache_config, aby mieć sondę wystąpienia CycleServer pod kątem konfiguracji. Wartość domyślna: false
htcondor.version Wersja pliku HTCondor do zainstalowania. Ustawienie domyślne: 8.2.6

Plik konfiguracji wygenerowany automatycznie przez HTCondor

HTCondor ma dużą liczbę ustawień konfiguracji, w tym atrybutów zdefiniowanych przez użytkownika. Usługa CycleCloud umożliwia utworzenie niestandardowego pliku konfiguracji przy użyciu atrybutów zdefiniowanych w klastrze:

Atrybut Opis
htcondor.custom_config.enabled Jeśli wartość true, plik konfiguracji jest generowany przy użyciu określonych atrybutów. Wartość domyślna: false
htcondor.custom_config.file_name Nazwa pliku (umieszczonego w / htcondor.data_dirconfig) do zapisu. Ustawienie domyślne: ZZZ-custom_config.txt
htcondor.custom_config.settings Atrybuty do zapisu w niestandardowym pliku konfiguracji, takie jak htcondor.custom_config.settings.max_jobs_running = 5000

Uwaga

Atrybuty konfiguracji HTCondor zawierające element . Nie można określić przy użyciu tej metody. Jeśli takie atrybuty są potrzebne, należy je określić w książce kucharskiej lub w pliku zainstalowanym za pomocą pliku cluster-init.

Usługa CycleCloud obsługuje standardowy zestaw atrybutów automatycznego ściągnięcia między harmonogramami:

Atrybut Opis
cyclecloud.cluster.autoscale.stop_enabled Czy w tym węźle jest włączone automatyczne zatrzymanie? [true/false]
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ół.