Compartilhar via


OpenPBS

O OpenPBS pode ser habilitado facilmente em um cluster do CycleCloud modificando o "run_list" na seção de configuração da definição do cluster. Os dois componentes básicos de um cluster PBS Professional são o nó 'mestre', que fornece um sistema de arquivos compartilhado no qual o software PBS Professional é executado e os nós 'execute', que são os hosts que montam o sistema de arquivos compartilhado e executam os trabalhos enviados. Por exemplo, um snippet de modelo de cluster simples pode ser semelhante a:

[cluster my-pbspro]

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

    [[[configuration]]]
    run_list = role[pbspro_master_role]

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

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

Importar e iniciar um cluster com definição no CycleCloud produzirá um único nó 'mestre'. Os nós de execução podem ser adicionados ao cluster por meio do cyclecloud add_node comando. Por exemplo, para adicionar mais 10 nós de execução:

cyclecloud add_node my-pbspro -t execute -c 10

Dimensionamento automático baseado em recursos da PBS

O Cyclecloud mantém dois recursos para expandir a capacidade de provisionamento dinâmico. Esses recursos são nodearray e machinetype.

Se você enviar um trabalho e especificar um recurso de nodearray até qsub -l nodearray=highmem -- /bin/hostname lá, o CycleCloud adicionará nós à nodearray chamada 'highmem'. Se não houver tal nodearray, o trabalho permanecerá ocioso.

Da mesma forma, se um recurso de tipo de máquina for especificado, qual envio de trabalho, por exemplo qsub -l machinetype:Standard_L32s_v2 my-job.sh, o CycleCloud dimensiona automaticamente o 'Standard_L32s_v2' na nodearray 'execute' (padrão). Se esse tipo de computador não estiver disponível na matriz de nós 'execute', o trabalho permanecerá ocioso.

Esses recursos podem ser usados em combinação como:

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

que será dimensionado automaticamente somente se os computadores 'Standard_HB60rs' forem especificados como uma matriz de nó 'hpc'.

Adicionando filas adicionais atribuídas a nodearrays

Em clusters com várias nodearrays, é comum criar filas separadas para rotear trabalhos automaticamente para o tipo de VM apropriado. Neste exemplo, vamos supor que a seguinte nodearray "gpu" foi definida em seu modelo de cluster:

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

Depois de importar o modelo de cluster e iniciar o cluster, os seguintes comandos podem ser executados no nó do servidor para criar a fila "gpu":

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Observação

A definição de fila acima empacotará todas as VMs na fila em um único conjunto de dimensionamento de VM para dar suporte a trabalhos de MPI. Para definir a fila para trabalhos serial e permitir vários conjuntos de dimensionamento de VM, defina ungrouped = true para ambos resources_default e default_chunk. Você também pode definir resources_default.place = pack se quiser que o agendador empacote trabalhos em VMs em vez da alocação round robin de trabalhos. Para obter mais informações sobre o empacotamento de trabalhos da PBS, consulte a documentação oficial do PBS Professional OSS.

Referência de configuração profissional da PBS

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

Opções do PBS Pro Descrição
pbspro.slots O número de slots para um determinado nó relatar ao PBS Pro. O número de slots é o número de trabalhos simultâneos que um nó pode executar, esse valor é padrão para o número de CPUs em um determinado computador. Você pode substituir esse valor em casos em que não executa trabalhos com base na CPU, mas na memória, GPUs etc.
pbspro.slot_type O nome do tipo de 'slot' que um nó fornece. O padrão é 'execute'. Quando um trabalho é marcado com o recurso slot_type=<type>rígido, esse trabalho será executado em um computador do mesmo tipo de slot. Isso permite criar diferentes configurações de software e hardware por nó e garantir que um trabalho apropriado esteja sempre agendado no tipo correto de nó.
pbspro.version Padrão: '18.1.3-0'. Esta é a versão do PBS Professional a ser instalada e executada. Atualmente, essa é a opção padrão e única . Nas versões adicionais futuras do software PBS Professional podem ter suporte.

Conectar o PBS ao CycleCloud

O CycleCloud gerencia clusters OpenPBS por meio de um agente instalável chamado azpbs. Esse agente se conecta ao CycleCloud para ler configurações de cluster e VM e também se integra ao OpenPBS para processar efetivamente as informações do trabalho e do host. Todas as azpbs configurações são encontradas no autoscale.json arquivo, normalmente /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

Arquivos importantes

O azpbs agente analisa a configuração da PBS sempre que é chamada – trabalhos, filas, recursos. As informações são fornecidas no stderr e stdout do comando, bem como em um arquivo de log, ambos em níveis configuráveis. Todos os comandos de gerenciamento pbs (qcmd) com argumentos também são registrados no arquivo.

Todos esses arquivos podem ser encontrados no diretório /opt/cycle/pbspro/ em que o agente está instalado.

Arquivo Location Descrição
Configuração de Dimensionamento Automático autoscale.json Configuração para dimensionamento automático, mapa de recursos, informações de acesso do CycleCloud
Log de Dimensionamento Automático autoscale.log Log de thread principal do agente, incluindo o gerenciamento de host do CycleCloud
Log de Demanda demand.log Log detalhado para correspondência de recursos
Log de Rastreamento qcmd qcmd.log Registrar em log as chamadas do agente qcmd
Configuração de log log.conf Configurações para máscaras de log e locais de arquivo

Definindo recursos do OpenPBS

Esse projeto permite uma associação geral de recursos OpenPBS com recursos de VM do Azure por meio do projeto cyclecloud-pbspro (azpbs). Essa relação de recursos definida em autoscale.json.

Os recursos padrão definidos com o modelo de cluster com o qual enviamos são

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

O recurso OpenPBS nomeado mem é equivalente a um atributo de nó nomeado node.memory, que é a memória total de qualquer máquina virtual. Essa configuração permite processar uma solicitação de recurso, como -l mem=4gb comparando o valor dos requisitos azpbs do recurso de trabalho com os recursos do nó.

Observe que o disco está atualmente codificado para size::20g. Aqui está um exemplo de manipulação do tamanho do disco específico do tamanho da VM

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Dimensionamento automático e dimensionamento

O CycleCloud trata trabalhos serial e de abrangência de forma diferente em clusters OpenPBS. Os trabalhos de abrangência cairão em nós que fazem parte do mesmo grupo de posicionamento. O grupo de posicionamento tem um significado de plataforma específico (VirtualMachineScaleSet com SinglePlacementGroup=true) e CC gerencia um grupo de posicionamento nomeado para cada conjunto de nós estendido. Use o recurso group_id PBS para esse nome de grupo de posicionamento.

A hpc fila acrescenta o equivalente usando padrões de -l place=scatter:group=group_id fila nativa.

Instalando o Agente OpenPBS do CycleCloud azpbs

O cluster Do OpenPBS CycleCloud gerenciará a instalação e a configuração do agente no nó do servidor. A preparação inclui a configuração de recursos da PBS, filas e ganchos. Uma instalação com script também pode ser feita fora do CycleCloud.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

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 autostop 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.
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.

Observação

O CycleCloud não dá suporte à configuração de intermitência com o Open PBS.

Observação

Embora o Windows seja uma plataforma Open PBS com suporte oficial, o CycleCloud não dá suporte à execução do Open PBS no Windows no momento.