Executar STAR-CCM+ com Microsoft HPC Pack num cluster Linux RDMA em Azure
Importante
Os VM clássicos serão retirados a 1 de março de 2023.
Se utilizar recursos iaaS da ASM, por favor preencha a sua migração até 1 de março de 2023. Encorajamo-lo a fazer a troca mais cedo para aproveitar as muitas melhorias de funcionalidades em Azure Resource Manager.
Para mais informações, consulte a Migração dos seus recursos iaaS para a Azure Resource Manager até 1 de março de 2023.
Este artigo mostra-lhe como implementar um cluster Microsoft HPC Pack no Azure e executar um trabalho DE CD-adapco STAR-CCM+ em vários nós de computação Linux que estão interligados com a InfiniBand.
Nota
O Azure tem dois modelos de implementação para criar e trabalhar com recursos: Resource Manager e Clássico. Este artigo inclui os dois modelos, mas a Microsoft recomenda que a maioria das implementações novas utilizem o modelo Resource Manager.
O Microsoft HPC Pack fornece funcionalidades para executar uma variedade de aplicações HPC e paralelas em larga escala, incluindo aplicações MPI, em clusters de máquinas virtuais Microsoft Azure. O HPC Pack também suporta a execução de aplicações Linux HPC em VMs de nó de computação Linux que são implantados num cluster HPC Pack. Para uma introdução à utilização de nós de computação Linux com O Pacote HPC, consulte Começar com os nós de computação Linux num cluster de Pacote HPC em Azure.
Criar um cluster HPC Pack
Descarregue os scripts de implementação do HPC Pack IaaS do Centro de Descarregamento e extraia-os localmente.
Azure PowerShell é um pré-requisito. Se o PowerShell não estiver configurado na sua máquina local, leia o artigo Como instalar e configurar Azure PowerShell.
No momento desta escrita, as imagens Linux do Azure Marketplace (que contém os controladores InfiniBand para Azure) são para SLES 12, CentOS 6.5 e CentOS 7.1. Este artigo baseia-se no uso do SLES 12. Para recuperar o nome de todas as imagens Linux que suportam HPC no Marketplace, pode executar o seguinte comando PowerShell:
get-azurevmimage | ?{$_.ImageName.Contains("hpc") -and $_.OS -eq "Linux" }
A saída lista a localização em que estas imagens estão disponíveis e o nome de imagem (ImageName) a ser usado no modelo de implementação mais tarde.
Antes de implementar o cluster, tem de construir um ficheiro de modelo de implementação do Grupo HPC. Como estamos a visar um pequeno aglomerado, o nó de cabeça será o controlador de domínio e hospedará uma base de dados SQL local.
O modelo seguinte irá implantar tal nó de cabeça, criar um ficheiro XML nomeado MyCluster.xml, e substituir os valores de SubscriptionId, StorageAccount, Location, VMName e ServiceName com o seu.
<?xml version="1.0" encoding="utf-8" ?>
<IaaSClusterConfig>
<Subscription>
<SubscriptionId>99999999-9999-9999-9999-999999999999</SubscriptionId>
<StorageAccount>mystorageaccount</StorageAccount>
</Subscription>
<Location>North Europe</Location>
<VNet>
<VNetName>hpcvnetne</VNetName>
<SubnetName>subnet-hpc</SubnetName>
</VNet>
<Domain>
<DCOption>HeadNodeAsDC</DCOption>
<DomainFQDN>hpc.local</DomainFQDN>
</Domain>
<Database>
<DBOption>LocalDB</DBOption>
</Database>
<HeadNode>
<VMName>myhpchn</VMName>
<ServiceName>myhpchn</ServiceName>
<VMSize>Standard_D4</VMSize>
</HeadNode>
<LinuxComputeNodes>
<VMNamePattern>lnxcn-%0001%</VMNamePattern>
<ServiceNamePattern>mylnxcn%01%</ServiceNamePattern>
<MaxNodeCountPerService>20</MaxNodeCountPerService>
<StorageAccountNamePattern>mylnxstorage%01%</StorageAccountNamePattern>
<VMSize>A9</VMSize>
<NodeCount>0</NodeCount>
<ImageName>b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-hpc-v20150708</ImageName>
</LinuxComputeNodes>
</IaaSClusterConfig>
Inicie a criação do nó-cabeça executando o comando PowerShell num pedido de comando elevado:
.\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml
Após 20 a 30 minutos, o nó da cabeça deve estar pronto. Pode ligar-se a ele a partir do portal do Azure clicando no ícone 'Ligar' da máquina virtual.
Pode eventualmente ter de consertar o remetente dns. Para tal, inicie o DNS Manager.
- Clique com o botão direito no nome do servidor no DNS Manager, selecione Propriedades e, em seguida, clique no separador Forwarders .
- Clique no botão Editar para remover os reencaminhadores e, em seguida, clique em OK.
- Certifique-se de que a raiz de utilização indica se não estiverem selecionados os reencaminhadores da caixa de verificação e, em seguida, clique em OK.
Configurar os nóns de computação Linux
Você implanta os nós de computação Linux usando o mesmo modelo de implementação que usou para criar o nó de cabeça.
Copie o ficheiro MyCluster.xml da sua máquina local para o nó de cabeça e atualize a etiqueta NodeCount com o número de nós que pretende implantar (<=20). Tenha cuidado para ter núcleos suficientes disponíveis na sua quota Azure, porque cada instância A9 consumirá 16 núcleos na sua subscrição. Pode utilizar as instâncias A8 (8 núcleos) em vez de A9 se quiser utilizar mais VMs no mesmo orçamento.
No nó de cabeça, copie os scripts de implantação do Grupo HPC IaaS.
Executar os seguintes comandos Azure PowerShell num pedido de comando elevado:
Executar Add-AzureAccount para ligar à sua subscrição Azure.
Se tiver várias subscrições, execute a subscrição Get-AzureSubscription para listá-las.
Descreva uma subscrição predefinida executando o comando Select-AzureSubscription -SubscriptionName xxxx -Predefinido .
Executar MyCluster.xmlde .\New-HPCIaaSCluster.ps1 -ConfigFile para começar a implantar nós de computação Linux.
Abra a ferramenta HPC Pack Cluster Manager. Após alguns minutos, os nós de computação Linux aparecerão regularmente na lista de nós de computação de cluster. Com o modo de implementação clássico, os IaaS VMs são criados sequencialmente. Portanto, se o número de nós é importante, fazê-los todos implantados pode levar um tempo significativo.
Agora que todos os nós estão a funcionar no cluster, há configurações adicionais de infraestrutura para fazer.
Crie uma partilha de ficheiros Azure para os nosdes Windows e Linux
Pode utilizar o serviço Azure File para armazenar scripts, pacotes de aplicações e ficheiros de dados. O Azure File fornece capacidades CIFS em cima do armazenamento Azure Blob como uma loja persistente. Esteja ciente de que esta não é a solução mais escalável, mas é a mais simples e não requer VMs dedicados.
Crie uma partilha de ficheiros Azure seguindo as instruções do artigo Inicie o armazenamento do ficheiro Azure no Windows.
Mantenha o nome da sua conta de armazenamento como saname, o nome da partilha de ficheiros como nome de partilha, e a chave da conta de armazenamento como sakey.
Monte a partilha do Arquivo Azure no nó de cabeça
Abra um pedido de comando elevado e executar o seguinte comando para armazenar as credenciais no cofre da máquina local:
cmdkey /add:<saname>.file.core.windows.net /user:<saname> /pass:<sakey>
Em seguida, para montar a partilha do arquivo Azure, corra:
net use Z: \\<saname>.file.core.windows.net\<sharename> /persistent:yes
Monte a partilha do Arquivo Azure nos nóns de computação Linux
Uma ferramenta útil que vem com o Pacote HPC é a ferramenta de clusrun. Pode utilizar esta ferramenta de linha de comando para executar o mesmo comando simultaneamente num conjunto de nós de computação. No nosso caso, é usado para montar a partilha do Arquivo Azure e persistir para sobreviver a reboots. Num pedido de comando elevado no nó de cabeça, corram os seguintes comandos.
Para criar o diretório de montagem:
clusrun /nodegroup:LinuxNodes mkdir -p /hpcdata
Para montar a partilha do Ficheiro Azure:
clusrun /nodegroup:LinuxNodes mount -t cifs //<saname>.file.core.windows.net/<sharename> /hpcdata -o vers=2.1,username=<saname>,password='<sakey>',dir_mode=0777,file_mode=0777
Para persistir a partilha do monte:
clusrun /nodegroup:LinuxNodes "echo //<saname>.file.core.windows.net/<sharename> /hpcdata cifs vers=2.1,username=<saname>,password='<sakey>',dir_mode=0777,file_mode=0777 >> /etc/fstab"
Instalar STAR-CCM+
As instâncias Azure VM A8 e A9 fornecem suporte InfiniBand e capacidades RDMA. Os controladores de núcleo que permitem essas capacidades estão disponíveis para Windows Server 2012 imagens R2, SUSE 12, CentOS 6.5 e CentOS 7.1 na Azure Marketplace. Microsoft MPI e Intel MPI (lançamento 5.x) são as duas bibliotecas MPI que suportam esses controladores em Azure.
Cd-adapco STAR-CCM+ lançamento 11.x e mais tarde é agregado com a versão 5.x da Intel MPI, pelo que o suporte infiniBand para a Azure está incluído.
Obtenha o pacote Linux64 STAR-CCM+ do portal CD-adapco. No nosso caso, usamos a versão 11.02.010 em precisão mista.
No nó de cabeça, na partilha /hpcdata Azure File, crie um script de concha nomeado setupstarccm.sh com o seguinte conteúdo. Este script será executado em cada nó de cálculo para configurar o STAR-CCM+ localmente.
Roteiro de setupstarcm.sh de amostra
#!/bin/bash
# setupstarcm.sh to set up STAR-CCM+ locally
# Create the CD-adapco main directory
mkdir -p /opt/CD-adapco
# Copy the STAR-CCM package from the file share to the local directory
cp /hpcdata/StarCCM/STAR-CCM+11.02.010_01_linux-x86_64.tar.gz /opt/CD-adapco/
# Extract the package
tar -xzf /opt/CD-adapco/STAR-CCM+11.02.010_01_linux-x86_64.tar.gz -C /opt/CD-adapco/
# Start a silent installation of STAR-CCM without the FLEXlm component
/opt/CD-adapco/starccm+_11.02.010/STAR-CCM+11.02.010_01_linux-x86_64-2.5_gnu4.8.bin -i silent -DCOMPUTE_NODE=true -DNODOC=true -DINSTALLFLEX=false
# Update memory limits
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
Agora, para configurar o STAR-CCM+ em todos os seus nós de computação Linux, abra uma solicitação de comando elevada e execute o seguinte comando:
clusrun /nodegroup:LinuxNodes bash /hpcdata/setupstarccm.sh
Enquanto o comando está em funcionamento, pode monitorizar a utilização do CPU utilizando o mapa de calor do Cluster Manager. Após alguns minutos, todos os nós devem ser corretamente configurados.
Executar empregos STAR-CCM+
O HPC Pack é utilizado para as suas capacidades de agendamento de empregos para executar empregos STAR-CCM+. Para tal, precisamos do apoio de alguns scripts que são usados para iniciar o trabalho e executar STAR-CCM+. Os dados de entrada são guardados na partilha do Ficheiro Azure primeiro para a simplicidade.
O seguinte script PowerShell é usado para fazer fila de um trabalho STAR-CCM+. Exige três argumentos:
- O nome do modelo
- O número de nós a utilizar
- O número de núcleos em cada nó a ser usado
Como o STAR-CCM+ pode preencher a largura de banda da memória, normalmente é melhor usar menos núcleos por nó de computação e adicionar novos nós. O número exato de núcleos por nó dependerá da família do processador e da velocidade de interligação.
Os nós são atribuídos exclusivamente para o trabalho e não podem ser partilhados com outros trabalhos. O trabalho não é iniciado como um trabalho de MPI diretamente. O runstarccm.sh script shell iniciará o lançador MPI.
O modelo de entrada e o script runstarccm.sh são armazenados na partilha /hpcdata que foi previamente montada.
Os ficheiros de registo são nomeados com o ID do trabalho e são armazenados na partilha /hpcdata, juntamente com os ficheiros de saída STAR-CCM+.
Roteiro de SubmitStarccmJob.ps1 de amostra
Add-PSSnapin Microsoft.HPC -ErrorAction silentlycontinue
$scheduler="headnodename"
$modelName=$args[0]
$nbCoresPerNode=$args[2]
$nbNodes=$args[1]
#---------------------------------------------------------------------------------------------------------
# Create a new job; this will give us the job ID that's used to identify the name of the uploaded package in Azure
#
$job = New-HpcJob -Name "$modelName $nbNodes $nbCoresPerNode" -Scheduler $scheduler -NumNodes $nbNodes -NodeGroups "LinuxNodes" -FailOnTaskFailure $true -Exclusive $true
$jobId = [String]$job.Id
#---------------------------------------------------------------------------------------------------------
# Submit the job
$workdir = "/hpcdata"
$execName = "$nbCoresPerNode runner.java $modelName.sim"
$job | Add-HpcTask -Scheduler $scheduler -Name "Compute" -stdout "$jobId.log" -stderr "$jobId.err" -Rerunnable $false -NumNodes $nbNodes -Command "runstarccm.sh $execName" -WorkDir "$workdir"
Submit-HpcJob -Job $job -Scheduler $scheduler
Substitua o corredor.java pelo seu lançador de modelos STAR-CCM+ Java preferido e código de registo.
Roteiro de runstarccm.sh de amostra
#!/bin/bash
echo "start"
# The path of this script
SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )"
echo ${SCRIPT_PATH}
# Set the mpirun runtime environment
export CDLMD_LICENSE_FILE=1999@flex.cd-adapco.com
# mpirun command
STARCCM=/opt/CD-adapco/STAR-CCM+11.02.010/star/bin/starccm+
# Get node information from ENVs
NODESCORES=(${CCP_NODES_CORES})
COUNT=${#NODESCORES[@]}
NBCORESPERNODE=$1
# Create the hostfile file
NODELIST_PATH=${SCRIPT_PATH}/hostfile_$$
echo ${NODELIST_PATH}
# Get every node name and write into the hostfile file
I=1
NBNODES=0
while [ ${I} -lt ${COUNT} ]
do
echo "${NODESCORES[${I}]}" >> ${NODELIST_PATH}
let "I=${I}+2"
let "NBNODES=${NBNODES}+1"
done
let "NBCORES=${NBNODES}*${NBCORESPERNODE}"
# Run STAR-CCM with the hostfile argument
#
${STARCCM} -np ${NBCORES} -machinefile ${NODELIST_PATH} \
-power -podkey "<yourkey>" -rsh ssh \
-mpi intel -fabric UDAPL -cpubind bandwidth,v \
-mppflags "-ppn $NBCORESPERNODE -genv I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -genv I_MPI_DAPL_UD=0 -genv I_MPI_DYNAMIC_CONNECTION=0" \
-batch $2 $3
RTNSTS=$?
rm -f ${NODELIST_PATH}
exit ${RTNSTS}
No nosso teste, usámos um sinal de licença de power-on-demand. Para esse token, tem de definir a variável 1999@flex.cd-adapco.comambiente $CDLMD_LICENSE_FILE e a chave na opção -podkey da linha de comando.
Após alguma inicialização, o script extrai-- das variáveis ambientais $CCP_NODES_CORES que o HPC Pack definiu -- a lista de nós para construir um filtro de anfitrião que o lançador MPI utiliza. Este ficheiro de anfitrião conterá a lista de nomes de nó de cálculo que são usados para o trabalho, um nome por linha.
O formato de $CCP_NODES_CORES segue este padrão:
<Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>...`
Em que:
-
<Number of nodes>
é o número de nós atribuídos a este trabalho. -
<Name of node_n_...>
é o nome de cada nó atribuído a este trabalho. -
<Cores of node_n_...>
é o número de núcleos no nó atribuído a este trabalho.
O número de núcleos ($NBCORES) é também calculado com base no número de nós ($NBNODES) e no número de núcleos por nó (fornecido como parâmetro $NBCORESPERNODE).
Para as opções mpi, as que são usadas com Intel MPI em Azure são:
-
-mpi intel
para especificar o MPI da Intel. -
-fabric UDAPL
para usar verbos Azure InfiniBand. -
-cpubind bandwidth,v
para otimizar a largura de banda para MPI com STAR-CCM+. -
-mppflags "-ppn $NBCORESPERNODE -genv I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -genv I_MPI_DAPL_UD=0 -genv I_MPI_DYNAMIC_CONNECTION=0"
para fazer com que a Intel MPI funcione com a Azure InfiniBand e para definir o número necessário de núcleos por nó. -
-batch
iniciar STAR-CCM+ no modo de lote sem UI.
Finalmente, para iniciar um trabalho, certifique-se de que os seus nós estão a funcionar e estão online no Cluster Manager. Em seguida, a partir de um pedido de comando PowerShell, executar isto:
.\ SubmitStarccmJob.ps1 <model> <nbNodes> <nbCoresPerNode>
Pare os nosdes
Mais tarde, depois de terminar os seus testes, pode utilizar os seguintes comandos HPC Pack PowerShell para parar e iniciar os nóns:
Stop-HPCIaaSNode.ps1 -Name <prefix>-00*
Start-HPCIaaSNode.ps1 -Name <prefix>-00*
Passos seguintes
Tente executar outras cargas de trabalho do Linux. Por exemplo, consulte: