Condividi tramite


HTCondor

HTCondor può essere facilmente abilitato in un cluster CycleCloud modificando la "run_list" nella sezione di configurazione della definizione del cluster. Esistono tre componenti di base di un cluster HTCondor. Il primo è il "gestore centrale" che fornisce i daemon di pianificazione e gestione. Il secondo componente di un cluster HTCondor è uno o più utilità di pianificazione da cui vengono inviati processi nel sistema. Il componente finale è uno o più nodi di esecuzione che sono gli host eseguono il calcolo. Un modello HTCondor semplice può essere simile al seguente:

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

L'importazione e l'avvio di un cluster con definizione in CycleCloud restituirà un nodo "manager" e un nodo "scheduler", oltre a un nodo "execute". È possibile aggiungere nodi di esecuzione al cluster tramite il cyclecloud add_node comando . Per aggiungere 10 altri nodi di esecuzione:

cyclecloud add_node htcondor -t execute -c 10

Scalabilità automatica DI HTCondor

CycleCloud supporta la scalabilità automatica per HTCondor, il che significa che il software monitorerà lo stato della coda e disattiva i nodi in base alle esigenze per completare il lavoro in un periodo di tempo/costo ottimale. È possibile abilitare la scalabilità automatica per HTCondor aggiungendo Autoscale=true alla definizione del cluster:

[cluster htcondor]
Autoscale = True

Utilizzo avanzato di HTCondor

Se si conosce il runtime medio dei processi, è possibile definire average_runtime (in minuti) nel processo. CycleCloud userà tale valore per avviare il numero minimo di nodi, ad esempio cinque processi di 10 minuti inizierà solo un singolo nodo anziché cinque quando average_runtime è impostato su 10.

Scalabilità automatica nodearray

Per impostazione predefinita, HTCondor richiederà core dal nodearray denominato 'execute'. Se un processo richiede un nodoarray diverso, ad esempio se determinati processi all'interno di un flusso di lavoro hanno un requisito di memoria elevato, è possibile specificare un slot_type attributo per il processo. Ad esempio, l'aggiunta +slot_type = "highmemory"[[[configuration]]] causerà la richiesta di un nodo da "highmemory" nodearray anziché "execute" (si noti che attualmente è necessario htcondor.slot_type = "highmemory" impostare nella sezione nodearray). Ciò non influisce sul modo in cui HTCondor pianifica i processi, pertanto è possibile includere l'attributo slot_typerequirements iniziale nelle espressioni o rank nel processo. Ad esempio: Requirements = target.slot_type = "highmemory".

Invio di processi a HTCondor

Il modo più generico per inviare processi a un utilità di pianificazione HTCondor è il comando (eseguito da un nodo utilità di pianificazione):

condor_submit my_job.submit

Un file di invio di esempio potrebbe essere simile al seguente:

      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

Informazioni di riferimento sulla configurazione di HTCondor

Di seguito sono riportate le opzioni di configurazione specifiche di HTCondor che è possibile impostare per personalizzare le funzionalità:

Opzioni di configurazione HTCondor-Specific Descrizione
htcondor.agent_enabled Se true, usare il condor_agent per l'invio e il polling dei processi. Valore predefinito: false
htcondor.agent_version Versione del condor_agent da usare. Impostazione predefinita: 1.27
htcondor.classad_lifetime Durata predefinita di classads (in secondi). Impostazione predefinita: 700
htcondor.condor_owner L'account Linux proprietario degli script di scalabilità HTCondor. Impostazione predefinita: radice
htcondor.condor_group Gruppo Linux proprietario degli script di scalabilità di HTCondor. Impostazione predefinita: radice
htcondor.data_dir Directory per i log, le directory di spool, le directory di esecuzione e il file di configurazione locale. Impostazione predefinita: /mnt/condor_data (Linux), C:\All Services\condor_local (Windows)
htcondor.ignore_hyperthreads (solo Windows) Impostare il numero di CPU da metà delle CPU rilevate come modo per "disabilitare" l'hyperthreading. Se si usa la scalabilità automatica, specificare il numero di core non hyperthread con l'impostazione Cores di configurazione nella sezione [[node]] o [[nodearray]]. Valore predefinito: false
htcondor.install_dir Directory in cui è installato HTCondor. Impostazione predefinita: /opt/condor (Linux), C:\condor (Windows)
htcondor.job_start_count Il numero di processi che un schedd inizierà per ciclo. 0 corrisponde a senza limiti. Impostazione predefinita: 20
htcondor.job_start_delay Numero di secondi tra ogni intervallo di inizio del processo. 0 è immediato. Predefinito: 1
htcondor.max_history_log Dimensioni massime del file di cronologia dei processi in byte. Impostazione predefinita: 20971520
htcondor.max_history_rotations Numero massimo di file di cronologia dei processi da mantenere. Impostazione predefinita: 20
htcondor.negotiator_cycle_delay Il numero minimo di secondi prima dell'avvio di un nuovo ciclo di negoziatori. Impostazione predefinita: 20
htcondor.negotiator_interval La frequenza (in secondi) dell'condor_negotiator avvia un ciclo di negoziazione. Impostazione predefinita: 60
htcondor.negotiator_inform_startd Se true, il negotiatore informa l'inizio quando corrisponde a un processo. Predefinito: true
htcondor.remove_stopped_nodes Se true, i nodi di esecuzione arrestati vengono rimossi dalla visualizzazione CycleServer anziché essere contrassegnati come "down".
htcondor.running Se true, l'agente di raccolta HTCondor e i daemon di negotiator vengono eseguiti nel gestore centrale. In caso contrario, viene eseguita solo la condor_master. Predefinito: true
htcondor.scheduler_dual Se true, gli utilità di pianificazione eseguono due schedds. Predefinito: true
htcondor.single_slot Se true, considera la macchina come singolo slot (indipendentemente dal numero di core che la macchina possiede). Valore predefinito: false
htcondor.slot_type Definisce la slot_type di una matrice di nodi per la scalabilità automatica. Impostazione predefinita: esegui
htcondor.update_interval Intervallo (in secondi) per l'avvio per pubblicare un aggiornamento all'agente di raccolta. Impostazione predefinita: 240
htcondor.use_cache_config Se true, usare cache_config per avere il pollserver dell'istanza per la configurazione. Valore predefinito: false
htcondor.version Versione di HTCondor da installare. Impostazione predefinita: 8.2.6

File di configurazione generato automaticamente da HTCondor

HTCondor ha un numero elevato di impostazioni di configurazione, inclusi gli attributi definiti dall'utente. CycleCloud offre la possibilità di creare un file di configurazione personalizzato usando attributi definiti nel cluster:

Attributo Descrizione
htcondor.custom_config.enabled Se true, viene generato un file di configurazione usando gli attributi specificati. Valore predefinito: false
htcondor.custom_config.file_name Nome del file (inserito in htcondor.data_dir/config) da scrivere. Impostazione predefinita: ZZZ-custom_config.txt
htcondor.custom_config.settings Attributi da scrivere nel file di configurazione personalizzato, ad esempio htcondor.custom_config.settings.max_jobs_running = 5000

Nota

Attributi di configurazione HTCondor contenenti un oggetto . non può essere specificato usando questo metodo. Se tali attributi sono necessari, devono essere specificati in un cookbook o in un file installato con cluster-init.

CycleCloud supporta un set standard di attributi autostop tra gli utilità di pianificazione:

Attributo Descrizione
cyclecloud.cluster.autoscale.stop_enabled Il supporto automatico è abilitato in questo nodo? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Quantità di tempo (in secondi) per un nodo inattivo dopo il completamento dei processi prima che venga ridimensionato.
cyclecloud.cluster.autoscale.idle_time_before_jobs Quantità di tempo (in secondi) per un nodo inattivo prima di completare i processi prima che venga ridimensionato.