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:
- Trabalhos de alta taxa de transferência (GPU de & de CPU)
- Firmemente acoplado (MPI, CPU & GPU)
- 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 placementgroup
de 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:
- Configurar os daemons LSF de trabalho; particularmente
LSF_LOCAL_RESOURCES
eLSF_MASTER_LIST
- Se
LSF_TOP
estiver em um sistema de arquivos compartilhado, poderá ser útil fazer uma cópia local delsf.conf
e definir aLSF_ENVDIR
variável antes de iniciar os daemons.
- Se
- 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.