Compartilhar via


OpenPBS

O tipo de cluster OpenPBS no Azure CycleCloud fornece uma solução robusta e escalonável para gerenciar cargas de trabalho de HPC (computação de alto desempenho) usando o PBS Professional. Essa integração permite que os usuários implantem e gerenciem clusters baseados em PBS na nuvem com configuração e automação simplificadas. Para obter instruções detalhadas de instalação, recursos com suporte e diretrizes de uso, consulte o CYCLECloud Open PBS e o PBS Professional Cluster Project README

Você pode habilitar o OpenPBS em um cluster CycleCloud alterando a seção de configuração run_list da definição do cluster. Um cluster PBS Professional (PBS Pro) tem duas partes principais: o nó primário , que executa o software em um sistema de arquivos compartilhado, e os nós de execução , que montam esse sistema de arquivos e executam os trabalhos enviados. Por exemplo, um trecho de modelo de agrupamento 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]

Ao importar e iniciar um cluster com essa definição no CycleCloud, você obterá um único nó primário. Você pode adicionar nós de execução ao cluster usando o comando cyclecloud add_node. Por exemplo, para adicionar 10 nós execute a mais, use:

cyclecloud add_node my-pbspro -t execute -c 10

Dimensionamento automático baseado em recursos do PBS

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

Quando você envia um trabalho e especifica um recurso de matriz de nós com qsub -l nodearray=highmem -- /bin/hostname, o CycleCloud adiciona nós à matriz de nós chamada highmem. Se a matriz de nós não existir, o trabalho permanecerá ocioso.

Quando você especifica um recurso de tipo de máquina em um envio de trabalho, como qsub -l machinetype:Standard_L32s_v2 my-job.sh, o CycleCloud dimensiona automaticamente as máquinas Standard_L32s_v2 na matriz de nós padrão execute. Se o tipo de computador não estiver disponível na matriz de nós execute, o trabalho permanecerá ocioso.

Você pode usar esses recursos juntos como:

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

Dimensiona automaticamente somente se você especificar os computadores Standard_HB60rs na matriz de nós hpc.

Adicionando filas extras atribuídas a matrizes de nós

Em clusters com várias matrizes de nós, crie filas separadas para rotear automaticamente trabalhos para o tipo de VM apropriado. Neste exemplo, suponha que a seguinte gpu matriz de nós seja definida em seu modelo de cluster:

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

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

Depois de importar o template de cluster e iniciar o cluster, execute os seguintes comandos 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

Conforme mostrado no exemplo, a definição de fila empacota todas as VMs na fila em um único conjunto de dimensionamento de máquinas virtuais para dar suporte a trabalhos de MPI. Para definir a fila para trabalhos seriais e permitir vários conjuntos de dimensionamento de máquinas virtuais, defina ungrouped = true para resources_default e default_chunk. Defina resources_default.place = pack se quiser que o agendador empacote trabalhos em VMs em vez de alocar trabalhos em round-robin. Para mais informações sobre a organização de trabalhos no PBS, consulte a documentação oficial do PBS Professional OSS.

Referência de configuração do PBS Professional

A tabela a seguir descreve as opções de configuração específicas do PBS Professional (PBS Pro) que você pode alternar para personalizar a funcionalidade:

Opções do PBS Pro Descrição
pbspro.slots O número de slots de um determinado nó a ser reportado ao PBS Pro. O número de slots é o número de trabalhos simultâneos que um nó pode executar. Esse valor usa como padrão 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 e outros recursos.
pbspro.slot_type O nome do tipo de ''slot'' fornecido por um nó. O padrão é 'execute'. Quando você marca um trabalho com o recurso fixo slot_type=<type>, o trabalho é executado somente nos computadores com o mesmo tipo de slot. Essa configuração permite que você crie diferentes configurações de software e hardware para cada nó e garante que o trabalho certo esteja sempre agendado no tipo correto de nó.
pbspro.version Padrão: '18.1.3-0'. Atualmente, essa versão é a opção padrão e única para instalar e executar. No futuro, mais versões do software PBS Pro poderão 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. Ele também se integra ao OpenPBS para processar as informações de trabalho e host. Você pode encontrar todas as azpbs configurações no autoscale.json arquivo, geralmente localizadas em /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 agente azpbs analisa a configuração do PBS sempre que é chamado: tarefas, filas, recursos. O agente fornece essas informações no stderr e stdout do comando e em um arquivo de log, ambos em níveis configuráveis. O agente também registra todos os comandos de gerenciamento PBS (qcmd) com argumentos em um arquivo.

Você pode encontrar todos esses arquivos no diretório /opt/cycle/pbspro/, no qual instala o agente.

Arquivo Localização 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 Registro de log do thread principal do agente, incluindo o gerenciamento do host do CycleCloud
Log de Demanda demand.log Log detalhado para a correspondência de recursos
Log de Rastreamento qcmd qcmd.log Registrar em log as chamadas do agente qcmd
Configuração de Log logging.conf Configurações para máscaras de log e locais de arquivos

Definindo recursos do OpenPBS

Este projeto permite que você associe recursos openpbs a recursos de VM do Azure por meio do projeto cyclecloud-pbspro (azpbs). Você define essa relação de recursos em autoscale.json. O modelo de cluster inclui os seguintes recursos padrã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 corresponde a um atributo de nó chamado node.memory, que representa a memória total de qualquer máquina virtual. Essa configuração permite que o azpbs processe uma solicitação de recurso, como -l mem=4gb, comparando o valor dos requisitos do recurso de trabalho com os recursos do nó.

Atualmente, o tamanho do disco está definido como size::20g. Aqui está um exemplo de como lidar com o 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 conjuntos de escalonamento

O CycleCloud trata trabalhos de abrangência e seriais de maneira diferente em clusters OpenPBS. Os trabalhos de abrangência são alocados 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 o CycleCloud gerencia um grupo de posicionamento nomeado para cada conjunto de nós abrangido. Use o recurso PBS group_id para esse nome de grupo de posicionamento.

A fila hpc acrescenta o equivalente a -l place=scatter:group=group_id utilizando padrões nativos de fila.

Instalando o Agente OpenPBS do CycleCloud azpbs

O cluster OpenPBS CycleCloud gerencia a instalação e a configuração do agente no nó do servidor. As etapas de preparação incluem a definição de recursos, filas e ganchos de PBS. Você também pode executar uma instalação com script 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 oferece suporte a um conjunto padrão de atributos de parada automática entre os agendadores.

Atributo Descrição
cyclecloud.cluster.autoscale.stop_enabled Habilita a parada automática neste nó. [verdadeiro/falso]
cyclecloud.cluster.autoscale.idle_time_after_jobs A quantidade de tempo (em segundos) para um nó ficar ocioso depois de concluir os trabalhos antes de parar automaticamente.
cyclecloud.cluster.autoscale.idle_time_before_jobs A quantidade de tempo (em segundos) para um nó ficar ocioso antes de concluir os trabalhos antes de parar automaticamente.

Observação

O CycleCloud não dá suporte à configuração de bursting com 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.