Compartilhar via


IBM Spectrum LSF

A partir do LSF 10.1 FixPack 9 (10.1.0.9), o Azure CycleCloud é um provedor nativo do 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 da IBM. Para usar o LSF no CycleCloud, você precisa de um arquivo de direitos que a IBM fornece aos clientes.

Observação

  • LSF é um produto licenciado da IBM. Para usar o LSF no CycleCloud, você precisa de um arquivo de direitos que a IBM fornece aos seus clientes. Adicione os binários LSF e o arquivo de direitos blobs/ ao diretório para usar o cluster totalmente automatizado ou o construtor de imagens da VM neste projeto.
  • Para usar o cluster totalmente automatizado ou o construtor de imagens da VM neste projeto, adicione os binários LSF e o arquivo de direitos blobs/ ao 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 de VM selecionada não incluir ed, sugerimos usar cloud-init para adicionar o pacote. Por exemplo, no RedHat Enterprise Linux, AlmaLinux ou CentOS, você pode adicionar o seguinte ao modelo de cluster (ou na GUI do CycleCloud por meio da caixa de diálogo Editar Cluster):
[node defaults]
CloudInit = '''#!/bin/bash
yum install -y ed
'''

Cenários com suporte do tipo de cluster LSF do CycleCloud

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 alta taxa de transferência (CPU e GPU)
  2. Fortemente acoplado (MPI, CPU e GPU)
  3. Baixa Prioridade

Manipule esses cenários configurando várias matrizes de nós e propriedades LSF. O CycleCloud preconfigura as matrizes de nós. A configuração adequada do LSF habilita 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:

Use o placementGroup recurso para executar um trabalho com a rede conectada InfiniBand.

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

Para GPUs, é recomendável usar o suporte LSF para sintaxe de GPU estendida. Normalmente, você adiciona esses atributos a lsf.conf: LSB_GPU_NEW_SYNTAX=extend e LSF_GPU_AUTOCONFIG=Y. Com suporte para sintaxe estendida habilitado, use o placementGroup junto com -gpu para executar um trabalho fortemente 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 forma paralela.

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

Execute um trabalho de grande intermitência em VMs de baixa prioridade.

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

Configurar 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)

Você pode omitir cyclecloudlowprio, mas essa verificação fornece uma garantia extra de que os trabalhos estão em execução na tenência de VM pretendida.

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.

Veja 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 de nodearray. Esses atributos são considerados substituições da configuração de 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 da 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 da configuração do cluster cycleCloud.
  • subnetId – Sub-rede do Azure, por exemplo, "resource_group/vnet/subnet" – substituição da configuração de cluster do CycleCloud.
  • vmType – por exemplo, "Standard_HC44rs" – substituição da configuração do cluster CycleCloud.
  • keyPairLocation – por exemplo, "~/.ssh/id_rsa_beta" – substituição da configuração do cluster CycleCloud.
  • customScriptUri - Por exemplo, http://10.1.0.4/user_data.sh. Sem script se não especificado.
  • userData - Por exemplo, "nodearray_name=gpumpi;placement_group_id=gpumpipg1". Vazio se não for especificado.

Uma Observação sobre PlacementGroups

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

Esses grupos de posicionamento exigem tratamento especial no LSF e no CycleCloud.

Veja 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 arquivo pode ser qualquer coisa, mas determina o nome do placementGroup no CycleCloud. Todos os nós emprestados do CycleCloud desse modelo residem nesse placementGroup e, se forem VMs habilitadas para InfiniBand, compartilhem uma rede IB.

A placementGroupName propriedade corresponde ao atributo placementgrouphost. Essa correspondência é intencional e necessária. Defina a propriedade placement_group_id em userData para uso em user_data.sh no momento de início do host. O atributo ondemandmpi pode parecer supérfluo, mas é usado para evitar que este trabalho corresponda a hosts em que placementGroup não está definido.

Quando você usa grupos de posicionamento, o valor da Azure.MaxScaleSetSize propriedade determina o 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 o 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ó. customScriptUri não pode exigir autenticação porque um comando CURL anônimo baixa o script. Use esse script para:

  1. Configurar os daemons LSF do trabalho; especialmente LSF_LOCAL_RESOURCES e LSF_MASTER_LIST.
    • Se LSF_TOP estiver em um sistema de arquivos compartilhado, será útil fazer uma cópia lsf.conf local e definir a LSF_ENVDIR variável antes de iniciar os daemons.
  2. Iniciar os daemons lim, res e sbatch.

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

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

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

  • nodearray_name
  • placement_group_id

Observação

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