Share via


HTCondor

O HTCondor pode ser habilitado facilmente em um cluster do CycleCloud modificando o "run_list" na seção de configuração da definição do cluster. Há três componentes básicos de um cluster HTCondor. O primeiro é o "gerente central" que fornece os daemons de agendamento e gerenciamento. O segundo componente de um cluster HTCondor é um ou mais agendadores dos quais os trabalhos são enviados para o sistema. O componente final é um ou mais nós de execução que são os hosts que executam a computação. Um modelo HTCondor simples pode ser semelhante a:

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

Importar e iniciar um cluster com definição no CycleCloud produzirá um nó "gerenciador" e um "agendador", bem como um nó "execute". Os nós de execução podem ser adicionados ao cluster por meio do cyclecloud add_node comando. Para adicionar mais 10 nós de execução:

cyclecloud add_node htcondor -t execute -c 10

Dimensionamento automático do HTCondor

O CycleCloud dá suporte ao dimensionamento automático para HTCondor, o que significa que o software monitorará o status da fila e ativará e desativará nós conforme necessário para concluir o trabalho em uma quantidade ideal de tempo/custo. Você pode habilitar o dimensionamento automático para HTCondor adicionando Autoscale=true à sua definição de cluster:

[cluster htcondor]
Autoscale = True

Uso Avançado do HTCondor

Se você souber o tempo de execução médio dos trabalhos, poderá definir average_runtime (em minutos) em seu trabalho. O CycleCloud usará isso para iniciar o número mínimo de nós (por exemplo, cinco trabalhos de 10 minutos iniciarão apenas um único nó em vez de cinco quando average_runtime estiver definido como 10).

Nodearray de dimensionamento automático

Por padrão, o HTCondor solicitará núcleos do nodearray chamado 'execute'. Se um trabalho exigir uma nodearray diferente (por exemplo, se determinados trabalhos dentro de um fluxo de trabalho tiverem um alto requisito de memória), você poderá especificar um slot_type atributo para o trabalho. Por exemplo, a adição +slot_type = "highmemory" fará com que o HTCondor solicite um nó da nodearray "highmemory" em vez de "execute" (observe que isso atualmente requer htcondor.slot_type = "highmemory" ser definido na seção do [[[configuration]]] nodearray). Isso não afetará a forma como o HTCondor agenda os trabalhos, portanto, talvez você queira incluir o slot_type atributo iniciado nas expressões ou rank no requirements trabalho. Por exemplo: Requirements = target.slot_type = "highmemory".

Enviando trabalhos para o HTCondor

A maneira mais genérica de enviar trabalhos para um agendador HTCondor é o comando (executar em um nó do agendador):

condor_submit my_job.submit

Um arquivo de envio de exemplo pode ter esta aparência:

      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

Referência de configuração do HTCondor

Veja a seguir as opções de configuração específicas do HTCondor que você pode definir para personalizar a funcionalidade:

Opções de configuração do HTCondor-Specific Descrição
htcondor.agent_enabled Se for verdadeiro, use o condor_agent para envio de trabalho e sondagem. Padrão: false
htcondor.agent_version A versão do condor_agent a ser usada. Padrão: 1.27
htcondor.classad_lifetime O tempo de vida padrão de classads (em segundos). Padrão: 700
htcondor.condor_owner A conta do Linux que possui os scripts de redução do HTCondor. Padrão: raiz
htcondor.condor_group O grupo linux que possui os scripts de redução de escala do HTCondor. Padrão: raiz
htcondor.data_dir O diretório para logs, diretórios de spool, diretórios de execução e arquivo de configuração local. Padrão: /mnt/condor_data (Linux), C:\All Services\condor_local (Windows)
htcondor.ignore_hyperthreads (Somente Windows) Defina o número de CPUs como metade das CPUs detectadas como uma maneira de "desabilitar" o hiperthreading. Se estiver usando o dimensionamento automático, especifique a contagem de núcleos não hiperthread com a Cores configuração na seção [[nó]] ou [[nodearray]]. Padrão: false
htcondor.install_dir O diretório no qual o HTCondor está instalado. Padrão: /opt/condor (Linux), C:\condor (Windows)
htcondor.job_start_count O número de trabalhos que um schedd iniciará por ciclo. 0 é ilimitado. Padrão: 20
htcondor.job_start_delay O número de segundos entre cada intervalo de início do trabalho. 0 é imediato. Padrão: 1
htcondor.max_history_log O tamanho máximo do arquivo de histórico de trabalho em bytes. Padrão: 20971520
htcondor.max_history_rotations O número máximo de arquivos de histórico de trabalho a serem mantidos. Padrão: 20
htcondor.negotiator_cycle_delay O número mínimo de segundos antes que um novo ciclo de negociadores possa começar. Padrão: 20
htcondor.negotiator_interval Com que frequência (em segundos) o condor_negotiator inicia um ciclo de negociação. Padrão: 60
htcondor.negotiator_inform_startd Se for verdade, o negociador informa o início quando ele é correspondido a um trabalho. Padrão: true
htcondor.remove_stopped_nodes Se for true, os nós de execução interrompidos serão removidos da exibição CycleServer em vez de serem marcados como "inativos".
htcondor.running Se for verdade, os daemons de coletor e negociador do HTCondor são executados no gerente central. Caso contrário, somente o condor_master será executado. Padrão: true
htcondor.scheduler_dual Se for verdade, os agendadores executam dois schedds. Padrão: true
htcondor.single_slot Se verdadeiro, trata o computador como um único slot (independentemente do número de núcleos que o computador possui). Padrão: false
htcondor.slot_type Define o slot_type de uma matriz de nós para dimensionamento automático. Padrão: executar
htcondor.update_interval O intervalo (em segundos) para o iniciado publicar uma atualização no coletor. Padrão: 240
htcondor.use_cache_config Se for verdadeiro, use cache_config para ter o CycleServer de sondagem de instância para configuração. Padrão: false
htcondor.version A versão do HTCondor a ser instalada. Padrão: 8.2.6

Arquivo de configuração gerado automaticamente pelo HTCondor

O HTCondor tem um grande número de configurações, incluindo atributos definidos pelo usuário. O CycleCloud oferece a capacidade de criar um arquivo de configuração personalizado usando atributos definidos no cluster:

Atributo Descrição
htcondor.custom_config.enabled Se for verdadeiro, um arquivo de configuração será gerado usando os atributos especificados. Padrão: false
htcondor.custom_config.file_name O nome do arquivo (colocado em htcondor.data_dir/config) a ser gravado. Padrão: ZZZ-custom_config.txt
htcondor.custom_config.settings Os atributos a serem gravados no arquivo de configuração personalizado, como htcondor.custom_config.settings.max_jobs_running = 5000

Observação

Atributos de configuração do HTCondor que contêm um . não pode ser especificado usando esse método. Se esses atributos forem necessários, eles deverão ser especificados em um livro de receitas ou em um arquivo instalado com cluster-init.

O CycleCloud dá suporte a um conjunto padrão de atributos de preenchimento automático entre agendadores:

Atributo Descrição
cyclecloud.cluster.autoscale.stop_enabled O dimensionamento automático está habilitado neste nó? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs A quantidade de tempo (em segundos) para um nó ficar ocioso após concluir trabalhos antes de ser reduzido horizontalmente.
cyclecloud.cluster.autoscale.idle_time_before_jobs A quantidade de tempo (em segundos) para um nó ficar ocioso antes de concluir trabalhos antes de ser reduzido.