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ó mestre LSF para se conectar ao CycleCloud.

O LSF é um produto licenciado da IBM; O uso do LSF no CycleCloud requer um arquivo de direitos que a IBM fornece aos clientes.

Observação

O LSF é um produto licenciado da IBM; O uso do LSF no CycleCloud requer um arquivo de direitos que a IBM fornece aos clientes. Os binários LSF e o arquivo de direitos devem ser adicionados ao diretório blobs/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, os binários LSF e o arquivo de direitos devem ser adicionados ao diretório blobs/.

Cenários com suporte do tipo de cluster LSF 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 (GPU de & de CPU)
  2. Firmemente acoplado (MPI, CPU & GPU)
  3. Baixa Prioridade

Esses cenários são tratados pela configuração de várias propriedades nodearrays e LSF em conjunto. As nodearrays são pré-configuradas no CycleCloud. A configuração adequada do LSF habilita os vários cenários de trabalho.

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

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

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

Para GPUs, recomendamos usar o suporte de LSF para sintaxe de GPU estendida. Normalmente, requer a adição de dois atributos a lsf.conf: LSB_GPU_NEW_SYNTAX=extend e LSF_GPU_AUTOCONFIG=Y. Com o suporte para sintaxe estendida habilitada, 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 conforme descrito, adicione vários tipos de recursos compartilhados 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 cyclecloudlowprio isso possa ser deixado de fora, mas fornece uma marcar adicional de que os trabalhos estão em execução em sua locação de VM pretendida.

Modelo de provedor LSF para CycleCloud

O provedor LSF CycleCloud expõe várias configurações por meio do modelo de provedor. Essas configurações são um subconjunto da configuração completa da 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

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

  • templateId
  • nodeArray

Outros são inferidos da configuração do CycleCloud, podem ser omitidos ou não são 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 para a configuração do cluster CycleCloud.
  • subnetId – sub-rede do Azure, por exemplo. "resource_group/vnet/subnet" substituição para a configuração do cluster CycleCloud.
  • vmType - por exemplo. "Standard_HC44rs" substituição para a configuração do cluster CycleCloud.
  • keyPairLocation - por exemplo. "~/.ssh/id_rsa_beta" substituição para a 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 for especificado.

Uma Observação sobre PlacementGroups

Os Datacenters do Azure têm capacidade de rede Infiniband para cenários de HPC. Essas redes, ao contrário da ethernet normal, têm intervalo limitado. As extensões de rede Infiniband são descritas por "PlacementGroups". 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.

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 arquivo pode ser qualquer coisa, mas determinará o nome do placementGroup no CycleCloud. Todos os nós emprestados do CycleCloud desse modelo residirão nesse placementGroup e, se forem VMs habilitadas para Infiniband, compartilharão uma rede IB.

Observe que placementGroupName corresponde ao atributo placementgroupde host , isso intencional e necessário. Além disso, o placement_group_id é definido como userData para ser usado em user_data.sh na hora de início do host. O ondemandmpi atributo pode parecer estranho, mas é usado para impedir que esse trabalho corresponda em hosts em placementGroup que é indefinido.

Muitas vezes, ao usar grupos de posicionamento, haverá um tamanho máximo de grupo de posicionamento determinado pela Azure.MaxScaleSetSize propriedade . Essa propriedade limita indiretamente quantos nós podem ser adicionados a um grupo de posicionamento, mas não é considerada pelo LSF. Portanto, é importante definir MaxNumber o modelo LSF igual a Azure.MaxScaleSetSize no modelo de cluster.

user_data.sh

O modelo fornece atributos para executar um script user_data.sh ; customScriptUri e userData. Essas são as variáveis de URI e de ambiente personalizadas do script gerenciado pelo usuário em execução na inicialização do nó. Esse script é baixado pelo comando CURL sinônimo, portanto customScriptUri , a necessidade de autenticação falha. Use este script para:

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

Há algumas variáveis de ambiente padrão definidas pelo provedor CycleCloud.

  • rc_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (recomendado para definir isso 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 com suporte oficial, o CycleCloud não dá suporte à execução de LSF no Windows no momento.