IBM Spectrum LSF

A partir do LSF 10.1 FixPack 9 (10.1.0.9), o Azure CycleCloud é um fornecedor nativo do Resource Connector. A IBM fornece documentação. Estes recursos fornecem instruções sobre como configurar o nó Principal LSF para ligar ao CycleCloud.

O LSF é um produto licenciado pela IBM; A utilização do LSF no CycleCloud requer um ficheiro de elegibilidade que a IBM fornece aos seus clientes.

Nota

O LSF é um produto licenciado pela IBM; A utilização do LSF no CycleCloud requer um ficheiro de elegibilidade que a IBM fornece aos seus clientes. Os binários LSF e o ficheiro de elegibilidade têm de ser adicionados ao diretório blobs/para utilizar o cluster totalmente automatizado ou o construtor de imagens da VM neste projeto. Para utilizar o cluster totalmente automatizado ou o construtor de imagens VM neste projeto, os binários LSF e o ficheiro de elegibilidade têm de ser adicionados ao diretório blobs/.

Cenários Suportados do tipo cluster LSF do CycleCloud

O LSF pode "emprestar" anfitriões do Azure para executar tarefas a pedido, adicionando e removendo anfitriões conforme necessário. O tipo de cluster LSF é flexível para lidar com vários cenários num único cluster:

  1. Tarefas de débito elevado (CPU & GPU)
  2. Bem acoplado (MPI, CPU & GPU)
  3. Prioridade Baixa

Estes cenários são processados pela configuração de vários nós e propriedades LSF em conjunto. Os nósarrays estão pré-configurados no CycleCloud. A configuração adequada do LSF permite os vários cenários de tarefas.

Quando o LSF é configurado de acordo com estas recomendações, bsub os requisitos de recursos podem ser utilizados -R da seguinte forma:

Utilize o recurso placementGroup para executar uma tarefa com a rede ligada InfiniBand.

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

Para GPUs, recomendamos que utilize suporte LSF para sintaxe de GPU expandida. Normalmente, é necessário adicionar dois atributos a lsf.conf: LSB_GPU_NEW_SYNTAX=extend e LSF_GPU_AUTOCONFIG=Y. Com o suporte para sintaxe expandida ativada, utilize o placementGroup juntamente com -gpu para executar uma tarefa bem conjugada com aceleração de GPU.

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

Execute tarefas ativadas por GPU de forma paralela.

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

Execute uma tarefa de expansão grande em VMs de baixa privação.

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

Configurar o LSF para o tipo de Cluster LSF cycleCloud

Para ativar estes cenários conforme descrito, adicione vários tipos de recursos partilhados a 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)

É possível que isso cyclecloudlowprio possa ser deixado de fora, mas fornece uma verificação adicional de que as tarefas estão em execução no inquilino da VM pretendido.

Modelo de Fornecedor LSF para CycleCloud

O fornecedor LSF CycleCloud expõe várias configurações através do modelo de fornecedor. Estas configurações são um subconjunto da configuração completa do nóarray.

Eis um modelo LSF de exemplo para a Cyclecloud a partir 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

Nem todos os atributos de nóarray são expostos pelo modelo de fornecedor LSF. Estas podem ser consideradas substituições da configuração do nó CycleCloud. O único modelo LSF necessário é:

  • templateId
  • nóArray

Outros são inferidos a partir da configuração do CycleCloud, podem ser omitidos ou não são de todo necessários.

  • 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 do cluster 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", nenhum script se não for especificado.
  • userData - por exemplo. "nodearray_name=gpumpi;placement_group_id=gpumpipg1" vazio se não especificado.

Uma Nota em PlacementGroups

Os Datacenters do Azure têm capacidade de rede Infiniband para cenários HPC. Estas redes, ao contrário da ethernet normal, têm um intervalo limitado. As extensões de rede Infiniband são descritas por "PlacementGroups". Se as VMs residirem no mesmo grupo de colocação e forem tipos de VM especiais compatíveis com Infiniband, partilharão uma rede Infiniband.

Estes grupos de colocação necessitam de um processamento especial no LSF e no CycleCloud.

Eis um modelo LSF de exemplo para a Cyclecloud a partir 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 coisa, mas irá determinar o nome do placementGroup no CycleCloud. Todos os nós emprestados do CycleCloud a partir deste modelo residirão neste placementGroup e, se forem VMs ativadas por Infiniband, partilharão uma rede IB.

Tenha em atenção que placementGroupName corresponde ao atributo placementgroupanfitrião , este intencional e necessário. Além disso, o placement_group_id está definido userData para ser utilizado em user_data.sh na hora de início do anfitrião. O ondemandmpi atributo pode parecer estranho, mas é utilizado para impedir que esta tarefa corresponda a anfitriões onde placementGroup não está definido.

Muitas vezes, ao utilizar grupos de colocação, haverá um tamanho máximo do grupo de colocação determinado pela Azure.MaxScaleSetSize propriedade. Esta propriedade limita indiretamente quantos nós podem ser adicionados a um grupo de colocação, mas não é considerada pelo LSF. Por conseguinte, é importante definir o modelo MaxNumber LSF igual ao Azure.MaxScaleSetSize no modelo de cluster.

user_data.sh

O modelo fornece atributos para executar um script user_data.sh ; customScriptUri e userData. Estas são as variáveis de URI e ambiente personalizado do script gerido pelo utilizador em execução no arranque do nó. Este script é transferido pelo comando ANnonymous CURL, pelo customScriptUri que é necessária uma falha de autenticação. Utilize este script para:

  1. Configurar os daemons LSF de trabalho; particularmente LSF_LOCAL_RESOURCES e LSF_MASTER_LIST
    • Se LSF_TOP estiver num sistema de ficheiros partilhado, pode ser útil fazer uma cópia local de lsf.conf e definir a LSF_ENVDIR variável antes de iniciar os daemons.
  2. Inicie a lim, res e sbatch daemons.

Existem algumas variáveis de ambiente predefinidas definidas pelo fornecedor CycleCloud.

  • rc_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (recomendado para definir isto como instanceId recurso)

Outras variáveis de dados de utilizador que podem ser úteis na gestão de recursos no fornecedor CycleCloud são:

  • nodearray_name
  • placement_group_id

Nota

Apesar de o Windows ser uma plataforma LSF suportada oficialmente, a CycleCloud não suporta a execução de LSF no Windows neste momento.