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.

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

Manipule esses cenários configurando várias matrizes de nó 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:

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

-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 um trabalho de intermitência grande 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 seja possível deixar de fora cyclecloudlowprio, mas isso proporciona uma verificação adicional de que os trabalhos estão a ser executados na locação 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.

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" - modificação na configuração de 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" - substituir as definições padrão na configuração do cluster CycleCloud.
  • keyPairLocation - por exemplo, "~/.ssh/id_rsa_beta" - substituir para a configuração de cluster do CycleCloud.
  • customScriptUri - Por exemplo, http://10.1.0.4/user_data.sh. Nenhum script, a menos que seja 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 assumir qualquer valor, mas determina o nome do placementGroup no CycleCloud. Todos os nós emprestados do CycleCloud a partir deste modelo residem neste placementGroup e, se forem VMs habilitadas para InfiniBand, compartilham uma rede IB.

A propriedade placementGroupName corresponde ao atributo host placementgroup. Este jogo é intencional e necessário. Defina a propriedade no placement_group_id para uso em user_data.sh na hora de início do host. O atributo ondemandmpi pode parecer supérfluo, mas é usado para impedir que este trabalho corresponda 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. Conjunto MaxNumber do modelo LSF igual ao 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 e definir a LSF_ENVDIR variável antes de lsf.conf 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.