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_dir config) 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ół. |