Partilhar via


HTCondor

Você pode habilitar o HTCondor num cluster CycleCloud modificando a seção de configuração run_list da sua definição de cluster. Existem 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 é um ou mais agendadores, a partir dos quais os trabalhos são enviados para o sistema. O componente final é constituído por um ou mais nós de execução, que são os hosts responsáveis por executar o cálculo. Um template HTCondor simples pode assemelhar-se 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]

Ao importar e iniciar um cluster com esta definição no CycleCloud, obtém um gestor, um nó agendador e um nó de execução. Você pode adicionar nós de execução ao cluster usando o cyclecloud add_node comando. Para adicionar mais 10 nós de execução , use o seguinte comando:

cyclecloud add_node htcondor -t execute -c 10

Dimensionamento automático HTCondor

O CycleCloud suporta dimensionamento automático para HTCondor. O software monitora o estado da sua fila e ativa e desativa os nós conforme necessário para concluir o trabalho em tempo e custo ótimos. Para habilitar o dimensionamento automático para HTCondor, adicione Autoscale=true à sua definição de cluster:

[cluster htcondor]
Autoscale = True

Uso Avançado do HTCondor

Se você sabe o tempo médio de execução dos trabalhos, defina average_runtime (em minutos) em seu trabalho. O CycleCloud usa esse valor para iniciar o número mínimo de nós. Por exemplo, se cinco trabalhos de 10 minutos forem enviados e average_runtime for definido como 10, o CycleCloud iniciará apenas um nó em vez de cinco.

Nodearray de dimensionamento automático

Por padrão, o HTCondor solicita núcleos da matriz de nós chamada execute. Se um trabalho exigir um nodearray diferente (por exemplo, se determinados trabalhos dentro de um fluxo de trabalho tiverem um alto requisito de memória), especifique um slot_type atributo para o trabalho. Por exemplo, adicionar +slot_type = "highmemory" faz com que o HTCondor solicite um nó da matriz de nós highmemory em vez de execute (essa configuração atualmente requer que htcondor.slot_type = "highmemory" seja definida na seção [[[configuration]]] da matriz de nós). Essa configuração não afeta como o HTCondor agenda as tarefas, portanto, convém incluir o atributo slot_type startd nas expressões requirements ou rank da tarefa. Por exemplo: Requirements = target.slot_type = "highmemory".

Submeter Trabalhos para o HTCondor

A maneira mais genérica de submeter tarefas a um agendador HTCondor é o comando (executado a partir de um nó de agendador):

condor_submit my_job.submit

Um exemplo de ficheiro de submissão pode ser assim:

      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

As seguintes opções de configuração específicas do HTCondor personalizam a funcionalidade:

Opções de Configuração Específicas do HTCondor Descrição
htcondor.agent_enabled Se verdadeiro, use o condor_agent para a submissão e verificação de trabalhos. Predefinição: falso
htcondor.agent_version A versão do condor_agent a usar. Padrão: 1.27
htcondor.classad_lifetime O tempo de vida padrão dos classads (em segundos). Padrão: 700
htcondor.condor_owner A conta Linux que possui os scripts de redução do HTCondor. Padrão: root
htcondor.condor_group O grupo Linux que possui os scripts de redução do HTCondor. Padrão: root
htcondor.data_dir O diretório para logs, diretórios de spool, diretórios de execução e ficheiro de configuração local. Padrão: /mnt/condor_data (Linux), C:\All Services\condor_local (Windows)
htcondor.ignore_hyperthreads (Apenas Windows) Defina o número de CPUs para metade das CPUs detetadas para "desativar" o hyperthreading. Se estiver a usar a autoescalabilidade, especifique o número de núcleos não-hyperthread com a configuração Cores na secção [[node]] ou [[nodearray]]. Predefinição: falso
htcondor.install_dir O diretório onde o HTCondor está instalado. Padrão: /opt/condor (Linux), C:\condor (Windows)
htcondor.job_start_count O número de trabalhos que um schedd inicia por ciclo. 0 é ilimitado. Padrão: 20
htcondor.job_start_delay O número de segundos entre cada intervalo de início de trabalho. 0 é imediato. Padrão: 1
htcondor.max_histórico_log O tamanho máximo do ficheiro de histórico de tarefas em bytes. Padrão: 20971520
htcondor.max_rotações_histórico_rotações O número máximo de ficheiros de histórico de trabalhos a manter. Padrão: 20
htcondor.negotiator_cycle_delay O número mínimo de segundos antes do início de um novo ciclo de negociação. 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 verdadeiro, o negociador informa o iniciado quando ele corresponde a um trabalho. Padrão: verdadeiro
htcondor.remove_stopped_nodes Se verdadeiro, os nós de execução parados são removidos da visualização do CycleServer em vez de serem marcados como "inativos".
htcondor.running Se verdadeiro, os processos daemon do coletor e do negociador do HTCondor são executados no gestor central. Caso contrário, apenas o condor_master é executado. Padrão: verdadeiro
htcondor.scheduler_dual Se for verdadeiro, os schedulers executam dois schedds. Padrão: verdadeiro
htcondor.single_slot Se verdadeiro, trata a máquina como um único slot (independentemente do número de núcleos que a máquina possui). Predefinição: falso
htcondor.slot_type Define o tipo_de_slot de um array de nós para escalonamento automático. Default: executar
htcondor.update_interval O intervalo (em segundos) para o startd publicar uma atualização para o coletor. Padrão: 240
htcondor.use_cache_config Se for verdadeiro, use cache_config para que a instância consulte o CycleServer para configuração. Predefinição: falso
htcondor.versão A versão do HTCondor a instalar. Padrão: 8.2.6

Ficheiro de Configuração de Geração Automática do HTCondor

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

Atributo Descrição
htcondor.custom_config.ativado Se for verdadeiro, é gerado um ficheiro de configuração usando os atributos especificados. Predefinição: falso
htcondor.custom_config.nome_do_arquivo O nome do ficheiro (colocado em htcondor.data_dir/config) a escrever. Padrão: ZZZ-custom_config.txt
htcondor.custom_config.configurações Os atributos a serem escritos no ficheiro de configuração personalizado, tais como htcondor.custom_config.settings.max_jobs_running = 5000

Observação

Não é possível especificar atributos de configuração HTCondor contendo um . usando esse método. Se precisar desses atributos, especifique-os num livro de receitas ou num ficheiro instalado com cluster-init.

O CycleCloud suporta um conjunto padrão de atributos de parada automática entre agendadores:

Atributo Descrição
cyclecloud.cluster.autoscale.parar_ativado Habilita a parada automática neste nó. [verdadeiro/falso]
cyclecloud.cluster.autoscale.tempo_inativo_após_tarefas O período de tempo (em segundos) durante o qual um nó permanece ocioso após concluir trabalhos, antes de parar automaticamente.
cyclecloud.cluster.autoscale.idle_time_before_jobs (tempo de inatividade antes dos trabalhos) A quantidade de tempo (em segundos) que um nó permanece ocioso após concluir os trabalhos, antes de parar automaticamente.