Partilhar via


IBM Spectrum LSF

A partir do LSF 10.1 FixPack 9 (10.1.0.9), o Azure CycleCloud é um provedor nativo para o Resource Connector. A IBM fornece documentação. Esses recursos fornecem instruções sobre como configurar o nó primário LSF para se conectar ao CycleCloud.

LSF é um produto licenciado pela IBM. Para usar LSF no CycleCloud, você precisa de um arquivo de direitos que a IBM fornece aos seus clientes.

Observação

  • LSF é um produto licenciado pela IBM. Para usar LSF no CycleCloud, você precisa de um arquivo de direitos que a IBM fornece a seus clientes. Adicione os binários LSF e o arquivo de direitos ao blobs/ diretório para usar o cluster totalmente automatizado ou o construtor de imagens de VM neste projeto.
  • Para usar o cluster totalmente automatizado ou o construtor de imagens de VM neste projeto, adicione os binários LSF e o arquivo de direitos ao blobs/ diretório.
  • O LSF depende do ed pacote que não está instalado em versões recentes da Imagem HPC do Azure por padrão. Se a imagem da VM selecionada não incluir ed, sugerimos usar o cloud-init para adicionar o pacote. Por exemplo, no RedHat Enterprise Linux, AlmaLinux ou CentOS, você pode adicionar o seguinte ao seu modelo de cluster (ou na GUI do CycleCloud através da caixa de diálogo Edição de cluster):
[node defaults]
CloudInit = '''#!/bin/bash
yum install -y ed
'''

Cenários suportados do tipo de cluster CycleCloud LSF

O LSF pode "emprestar" hosts do Azure para executar trabalhos sob demanda, adicionando e removendo hosts conforme necessário. O tipo de cluster LSF é flexível para lidar com vários cenários em um único cluster:

  1. Trabalhos de alto rendimento (CPU e GPU)
  2. Firmemente acoplado (MPI, CPU & GPU)
  3. Baixa prioridade

Gerencie estes cenários configurando múltiplos arrays de nós e propriedades LSF. O CycleCloud pré-configura as matrizes de nós. A configuração adequada do LSF permite os vários cenários de trabalho.

Ao configurar o LSF de acordo com essas recomendações, você pode usar bsub os requisitos -R de recursos da seguinte maneira:

Utilize o recurso placementGroup para executar um trabalho com uma rede InfiniBand conectada.

-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"

Para GPUs, recomendamos o uso do suporte a LSF para sintaxe de GPU estendida. Normalmente, você adiciona esses atributos ao lsf.conf: LSB_GPU_NEW_SYNTAX=extend e LSF_GPU_AUTOCONFIG=Y. Com o suporte para sintaxe estendida habilitado, use o placementGroup junto com -gpu para executar um trabalho firmemente acoplado com aceleração de GPU.

-R "span[ptile=1] select[nodearray=='gpumpi' && cyclecloudmpi] same[placementgroup]" -gpu "num=2:mode=shared:j_exclusive=yes"

Execute trabalhos habilitados para GPU de maneira paralela.

-R "select[nodearray=='gpu' && !cyclecloudmpi && !cyclecloudlowprio]" -gpu "num=1:mode=shared:j_exclusive=yes"

Execute uma tarefa intensiva em VMs de baixa prioridade.

-J myArr[1000] -R "select[nodearray=='lowprio' && cyclecloudlowprio]"

Configurando o LSF para o tipo de cluster LSF do CycleCloud

Para habilitar esses cenários, adicione tipos de recursos compartilhados ao lsb.shared.

   cyclecloudhost  Boolean  ()       ()       (instances from Azure CycleCloud)
   cyclecloudmpi  Boolean   ()       ()       (instances that support MPI placement)
   cyclecloudlowprio  Boolean ()     ()       (instances that low priority / interruptible from Azure CycleCloud)
   nodearray  String     ()       ()       (nodearray from CycleCloud)
   placementgroup String ()       ()       (id used to note locality of machines)
   instanceid String     ()       ()       (unique host identifier)

Talvez possa omitir cyclecloudlowprio, mas ele fornece uma verificação adicional para garantir que os trabalhos estão sendo executados no aluguer de VM pretendido.

Modelo de provedor LSF para CycleCloud

O provedor LSF CycleCloud expõe as configurações por meio do modelo de provedor. Essas configurações são um subconjunto da configuração completa do nodearray.

Aqui está um exemplo de modelo LSF para Cyclecloud de cyclecloudprov_templates.json:

{
    "templateId": "ondemand",
    "attributes": {
        "type": ["String", "X86_64"],
        "ncores": ["Numeric", "44"],
        "ncpus": ["Numeric", "44"],
        "mem": ["Numeric", "327830"],
        "cyclecloudhost": ["Boolean", "1"],
        "nodearray" : ["String", "ondemand"]
    },
    "priority" : 250,
    "nodeArray": "ondemand",
    "vmType" : "Standard_HC44rs",
    "subnetId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Network/virtualNetworks/hpc-network/subnets/compute",
    "imageId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Compute/images/lsf-worker-a4bc2f10",
    "maxNumber": 500,
    "keyPairLocation": "/opt/cycle_server/.ssh/id_rsa_admin.pem",
    "customScriptUri": "https://aka.ms/user_data.sh",
    "userData": "nodearray_name=ondemand"
}

Atributos de modelo LSF para CycleCloud

O modelo de provedor LSF não expõe todos os atributos nodearray. Esses atributos são considerados substituições da configuração do nodearray do CycleCloud. Os únicos atributos de modelo LSF necessários são:

  • templateId
  • nodeArray

Você pode omitir outros atributos ou eles podem não ser necessários. O CycleCloud infere estes atributos:

  • imageId - Imagem de VM do Azure, por exemplo, "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" - substituição de configuração para cluster do CycleCloud.
  • subnetId - Sub-rede do Azure, por exemplo, "resource_group/vnet/subnet" - substituição para configuração de cluster do CycleCloud.
  • vmType - por exemplo, "Standard_HC44rs" - sobrescrever a configuração do cluster do CycleCloud.
  • keyPairLocation - por exemplo, "~/.ssh/id_rsa_beta" - sobrescrever a configuração do cluster do CycleCloud.
  • customScriptUri - Por exemplo, http://10.1.0.4/user_data.sh. Nenhum script se não for especificado.
  • userData - Por exemplo, "nodearray_name=gpumpi;placement_group_id=gpumpipg1". Vazio, se não especificado.

Uma nota sobre PlacementGroups

Os datacenters do Azure têm capacidade de rede InfiniBand para cenários de HPC. Ao contrário da Ethernet normal, estas redes têm um alcance limitado. "PlacementGroups" descrevem as extensões da rede InfiniBand. Se as VMs residirem no mesmo grupo de posicionamento e forem tipos especiais de VM habilitados para InfiniBand, elas compartilharão uma rede InfiniBand.

Esses grupos de posicionamento requerem tratamento especial em LSF e CycleCloud.

Aqui está um exemplo de modelo LSF para CycleCloud de cyclecloudprov_templates.json:

{
  "templateId": "ondemandmpi-1",
  "attributes": {
    "nodearray": ["String", "ondemandmpi" ],
    "zone": [  "String",  "westus2"],
    "mem": [  "Numeric",  8192.0],
    "ncpus": [  "Numeric",  2],
    "cyclecloudmpi": [  "Boolean",  1],
    "placementgroup": [  "String",  "ondemandmpipg1"],
    "ncores": [  "Numeric",  2],
    "cyclecloudhost": [  "Boolean",  1],
    "type": [  "String",  "X86_64"],
    "cyclecloudlowprio": [  "Boolean",  0]
  },
  "maxNumber": 40,
  "nodeArray": "ondemandmpi",
  "placementGroupName": "ondemandmpipg1",
  "priority": 448,
  "customScriptUri": "https://aka.ms/user_data.sh",
  "userData" : "nodearray_name=ondemandmpi;placement_group_id=ondemandmpipg1"
}

O placementGroupName neste ficheiro pode ser qualquer valor, mas define o nome do placementGroup no CycleCloud. Todos os nós emprestados do CycleCloud a partir deste modelo residem neste grupo de colocação e, se forem VMs com suporte para InfiniBand, compartilham a rede IB.

A placementGroupName propriedade corresponde ao atributo host placementgroup. Este jogo é intencional e necessário. Defina a propriedade em placement_group_id para uso em userData na inicialização do host. O atributo ondemandmpi pode parecer supérfluo, mas é usado para impedir que este trabalho seja correspondido em hosts onde placementGroup está indefinido.

Quando você usa grupos de posicionamento, o valor da propriedade determina o Azure.MaxScaleSetSize tamanho máximo do grupo de posicionamento. Essa propriedade limita indiretamente quantos nós você pode adicionar a um grupo de posicionamento, mas o LSF não a considera. Defina MaxNumber do modelo LSF igual a Azure.MaxScaleSetSize no modelo de cluster.

user_data.sh

O modelo fornece dois atributos para executar um script user_data.sh : customScriptUri e userData. Esses atributos são o URI e as variáveis de ambiente personalizadas do script gerenciado pelo usuário que é executado na inicialização do nó. O customScriptUri não pode exigir autenticação porque um comando CURL anônimo baixa o script. Use este script para:

  1. Configure os daemons LSF do trabalhador, particularmente LSF_LOCAL_RESOURCES e LSF_MASTER_LIST.
    • Se LSF_TOP estiver em um sistema de arquivos compartilhado, é útil fazer uma cópia local de lsf.conf e definir a variável LSF_ENVDIR antes de iniciar os daemons.
  2. Inicie os daemons lim, res, e sbatch.

O provedor CycleCloud define algumas variáveis de ambiente padrão.

  • rc_account
  • template_id
  • nome do provedor
  • nome do cluster
  • cyclecloud_nodeid (defina esta variável como instanceId recurso)

Outras variáveis de dados do usuário que podem ser úteis no gerenciamento de recursos no provedor CycleCloud são:

  • nodearray_name
  • placement_group_id

Observação

Embora o Windows seja uma plataforma LSF oficialmente suportada, o CycleCloud não suporta a execução de LSF no Windows no momento.