Partilhar via


Executar o OpenFoam com o Microsoft HPC Pack num cluster RDMA do Linux no Azure

Importante

As VMs clássicas serão descontinuadas a 1 de março de 2023.

Se utilizar recursos IaaS do ASM, conclua a migração até 1 de março de 2023. Recomendamos que faça a mudança mais cedo para tirar partido dos vários melhoramentos de funcionalidades no Azure Resource Manager.

Para obter mais informações, veja Migrar os seus recursos IaaS para o Azure Resource Manager até 1 de março de 2023.

Este artigo mostra-lhe uma forma de executar o OpenFoam em máquinas virtuais do Azure. Aqui, vai implementar um cluster do Microsoft HPC Pack com nós de computação do Linux no Azure e executar uma tarefa OpenFoam com o Intel MPI. Pode utilizar VMs do Azure compatíveis com RDMA para os nós de computação, para que os nós de computação comuniquem através da rede RDMA do Azure. Outras opções para executar o OpenFoam no Azure incluem imagens comerciais totalmente configuradas disponíveis no Marketplace, como o OpenFoam 2.3 da UberCloud no CentOS 6 e a execução em Azure Batch.

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 OpenFOAM (para Operação e Manipulação de Campo Aberto) é um pacote de software open source computacional fluid dynamics (CFD) que é amplamente utilizado em engenharia e ciência, tanto em organizações comerciais como académicas. Inclui ferramentas de malha, nomeadamente snappyHexMesh, um mesher paralelizado para geometrias CAD complexas e para pré e pós-processamento. Quase todos os processos são executados em paralelo, permitindo que os utilizadores tirem o máximo partido do hardware do computador à sua disposição.

O Microsoft HPC Pack fornece funcionalidades para executar HPC em grande escala e aplicações paralelas, incluindo aplicações MPI, em clusters de máquinas virtuais do Microsoft Azure. O HPC Pack também suporta a execução de aplicações HPC do Linux em VMs de nós de computação do Linux implementadas num cluster HPC Pack. Veja Introdução aos nós de computação do Linux num cluster do HPC Pack no Azure para obter uma introdução à utilização de nós de computação do Linux com o HPC Pack.

Nota

Este artigo ilustra como executar uma carga de trabalho de MPI do Linux com o HPC Pack. Pressupõe que tem alguma familiaridade com a administração do sistema Linux e com a execução de cargas de trabalho de MPI em clusters do Linux. Se utilizar versões de MPI e OpenFOAM diferentes das apresentadas neste artigo, poderá ter de modificar alguns passos de instalação e configuração.

Pré-requisitos

  • Cluster HPC Pack com nós de computação linux compatíveis com RDMA – implemente um cluster HPC Pack com nós de computação linux de tamanho A8, A9, H16r ou H16rm Linux com um modelo de Resource Manager do Azure ou um script de Azure PowerShell. Veja Introdução aos nós de computação do Linux num cluster do HPC Pack no Azure para obter os pré-requisitos e os passos para qualquer uma das opções. Se escolher a opção de implementação do script do PowerShell, veja o ficheiro de configuração de exemplo nos ficheiros de exemplo no final deste artigo. Utilize esta configuração para implementar um cluster do HPC Pack baseado no Azure que consiste num tamanho A8 Windows Server 2012 nó principal R2 e nós de computação A8 SUSE Linux Enterprise Server 12 de tamanho 2. Substitua os valores adequados pelos nomes de subscrição e serviço.

    Aspetos adicionais a saber

    • Para pré-requisitos de rede RDMA do Linux no Azure, veja Tamanhos de VM de computação de elevado desempenho.
    • Se utilizar a opção de implementação do script do Powershell, implemente todos os nós de computação do Linux num serviço cloud para utilizar a ligação de rede RDMA.
    • Depois de implementar os nós do Linux, ligue-se por SSH para efetuar tarefas administrativas adicionais. Localize os detalhes da ligação SSH para cada VM do Linux no portal do Azure.
  • Intel MPI – para executar o OpenFOAM em nós de computação SLES 12 HPC no Azure, tem de instalar o runtime intel MPI Library 5 a partir do site Intel.com. (O Intel MPI 5 está pré-instalado em imagens HPC baseadas em CentOS.) Num passo posterior, se necessário, instale o Intel MPI nos nós de computação do Linux. Para se preparar para este passo, depois de se registar na Intel, siga a ligação no e-mail de confirmação para a página Web relacionada. Em seguida, copie a ligação de transferência do ficheiro .tgz para a versão adequada do Intel MPI. Este artigo baseia-se na versão intel MPI 5.0.3.048.

  • OpenFOAM Source Pack - Transfira o software OpenFOAM Source Pack para Linux a partir do site OpenFOAM Foundation. Este artigo baseia-se na versão 2.3.1 do Pacote de Origem, disponível para transferência como OpenFOAM-2.3.1.tgz. Siga as instruções mais adiante neste artigo para descompactar e compilar o OpenFOAM nos nós de computação do Linux.

  • EnSight (opcional) – para ver os resultados da simulação OpenFOAM, transfira e instale o programa de visualização e análise do EnSight . As informações de licenciamento e transferência encontram-se no site do EnSight.

Configurar a confiança mútua entre nós de computação

Executar uma tarefa entre nós em vários nós do Linux requer que os nós confiem uns nos outros (por rsh ou ssh). Quando cria o cluster HPC Pack com o script de implementação IaaS do Microsoft HPC Pack, o script configura automaticamente a confiança mútua permanente para a conta de administrador que especificar. Para os utilizadores não administradores que cria no domínio do cluster, tem de configurar a confiança mútua temporária entre os nós quando lhes for atribuída uma tarefa e destruir a relação após a conclusão da tarefa. Para estabelecer confiança para cada utilizador, forneça um par de chaves RSA ao cluster que o HPC Pack utiliza para a relação de confiança.

Gerar um par de chaves RSA

É fácil gerar um par de chaves RSA, que contém uma chave pública e uma chave privada, ao executar o comando ssh-keygen do Linux.

  1. Inicie sessão num computador Linux.

  2. Execute o seguinte comando:

    ssh-keygen -t rsa
    

    Nota

    Prima Enter para utilizar as predefinições até que o comando seja concluído. Não introduza uma frase de acesso aqui; quando lhe for pedida uma palavra-passe, basta premir Enter.

    Gerar um par de chaves RSA

  3. Altere o diretório para o diretório ~/.ssh. A chave privada é armazenada em id_rsa e a chave pública no id_rsa.pub.

    Chaves privadas e públicas

Adicionar o par de chaves ao cluster do HPC Pack

  1. Faça uma ligação de Ambiente de Trabalho Remoto ao nó principal com a conta de administrador do HPC Pack (a conta de administrador que configurou quando executou o script de implementação).

  2. Utilize os procedimentos padrão do Windows Server para criar uma conta de utilizador de domínio no domínio do Active Directory do cluster. Por exemplo, utilize a ferramenta Utilizador e Computadores do Active Directory no nó principal. Os exemplos neste artigo partem do princípio de que cria um utilizador de domínio com o nome hpclab\hpcuser.

  3. Crie um ficheiro com o nome C:\cred.xml e copie os dados da chave RSA para o mesmo. Um ficheiro de cred.xml de exemplo está no final deste artigo.

    <ExtendedData>
      <PrivateKey>Copy the contents of private key here</PrivateKey>
      <PublicKey>Copy the contents of public key here</PublicKey>
    </ExtendedData>
    
  4. Abra uma Linha de Comandos e introduza o seguinte comando para definir os dados de credenciais para a conta hpclab\hpcuser. Utilize o parâmetro extendeddata para transmitir o nome de C:\cred.xml ficheiro que criou para os dados da chave.

    hpccred setcreds /extendeddata:c:\cred.xml /user:hpclab\hpcuser /password:<UserPassword>
    

    Este comando é concluído com êxito sem saída. Depois de definir as credenciais para as contas de utilizador de que precisa para executar tarefas, armazene o ficheiro cred.xml numa localização segura ou elimine-o.

  5. Se tiver gerado o par de chaves RSA num dos nós do Linux, lembre-se de eliminar as teclas depois de concluir a utilização das mesmas. Se o HPC Pack encontrar um ficheiro de id_rsa existente ou um ficheiro id_rsa.pub, não configura a confiança mútua.

Importante

Não recomendamos a execução de uma tarefa do Linux como administrador de cluster num cluster partilhado, uma vez que uma tarefa submetida por um administrador é executada na conta raiz nos nós do Linux. No entanto, uma tarefa submetida por um utilizador não administrador é executada numa conta de utilizador linux local com o mesmo nome que o utilizador da tarefa. Neste caso, o HPC Pack configura a confiança mútua para este utilizador do Linux nos nós alocados à tarefa. Pode configurar o utilizador do Linux manualmente nos nós do Linux antes de executar a tarefa ou o HPC Pack cria o utilizador automaticamente quando a tarefa é submetida. Se o HPC Pack criar o utilizador, o HPC Pack elimina-o após a conclusão da tarefa. Para reduzir as ameaças de segurança, o HPC Pack remove as chaves após a conclusão da tarefa.

Configurar uma partilha de ficheiros para nós do Linux

Agora, configure uma partilha SMB padrão numa pasta no nó principal. Para permitir que os nós do Linux acedam aos ficheiros da aplicação com um caminho comum, monte a pasta partilhada nos nós do Linux. Se quiser, pode utilizar outra opção de partilha de ficheiros, como uma partilha de Ficheiros do Azure - recomendada para muitos cenários - ou uma partilha NFS. Veja as informações de partilha de ficheiros e os passos detalhados em Introdução aos nós de computação do Linux num Cluster HPC Pack no Azure.

  1. Crie uma pasta no nó principal e partilhe-a com Todos ao definir privilégios de Leitura/Escrita. Por exemplo, partilhe C:\OpenFOAM no nó principal como \\SUSE12RDMA-HN\OpenFOAM. Aqui, SUSE12RDMA-HN é o nome do anfitrião do nó principal.

  2. Abra uma janela Windows PowerShell e execute os seguintes comandos:

    clusrun /nodegroup:LinuxNodes mkdir -p /openfoam
    
    clusrun /nodegroup:LinuxNodes mount -t cifs //SUSE12RDMA-HN/OpenFOAM /openfoam -o vers=2.1`,username=<username>`,password='<password>'`,dir_mode=0777`,file_mode=0777
    

O primeiro comando cria uma pasta com o nome /openfoam em todos os nós no grupo LinuxNodes. O segundo comando monta a pasta partilhada //SUSE12RDMA-HN/OpenFOAM nos nós do Linux com dir_mode e file_mode bits definidos como 777. O nome de utilizador e a palavra-passe no comando devem ser as credenciais de um utilizador no nó principal.

Nota

O símbolo """ no segundo comando é um símbolo de escape para o PowerShell. "",significa que "" (caráter de vírgula) faz parte do comando.

Instalar o MPI e o OpenFOAM

Para executar o OpenFOAM como uma tarefa de MPI na rede RDMA, tem de compilar o OpenFOAM com as bibliotecas de MPI intel.

Primeiro, execute vários comandos clusrun para instalar bibliotecas de MPI Intel (se ainda não estiverem instaladas) e OpenFOAM nos nós do Linux. Utilize a partilha de nós principal configurada anteriormente para partilhar os ficheiros de instalação entre os nós do Linux.

Importante

Estes passos de instalação e compilação são exemplos. Precisa de alguns conhecimentos sobre a administração do sistema Linux para garantir que os compiladores e bibliotecas dependentes estão instalados corretamente. Poderá ter de modificar determinadas variáveis de ambiente ou outras definições para as suas versões de Intel MPI e OpenFOAM. Para obter detalhes, veja Intel MPI Library for Linux Installation Guide (Guia de Instalação da Biblioteca intel MPI para Linux ) e OpenFOAM Source Pack Installation (Instalação do Pacote de Código Fonte OpenFOAM ) para o seu ambiente.

Instalar o Intel MPI

Guarde o pacote de instalação transferido para o Intel MPI (l_mpi_p_5.0.3.048.tgz neste exemplo) em C:\OpenFoam no nó principal para que os nós do Linux possam aceder a este ficheiro a partir de /openfoam. Em seguida, execute clusrun para instalar a biblioteca intel MPI em todos os nós do Linux.

  1. Os seguintes comandos copiam o pacote de instalação e extraem-no para /opt/intel em cada nó.

    clusrun /nodegroup:LinuxNodes mkdir -p /opt/intel
    
    clusrun /nodegroup:LinuxNodes cp /openfoam/l_mpi_p_5.0.3.048.tgz /opt/intel/
    
    clusrun /nodegroup:LinuxNodes tar -xzf /opt/intel/l_mpi_p_5.0.3.048.tgz -C /opt/intel/
    
  2. Para instalar automaticamente a Biblioteca Intel MPI, utilize um ficheiro silent.cfg. Pode encontrar um exemplo nos ficheiros de exemplo no final deste artigo. Coloque este ficheiro na pasta partilhada /openfoam. Para obter detalhes sobre o ficheiro silent.cfg, consulte Guia de Instalação da Biblioteca Intel MPI para Linux – Instalação Silenciosa.

    Dica

    Certifique-se de que guarda o ficheiro silent.cfg como um ficheiro de texto com terminações de linha do Linux (apenas LF, não CR LF). Este passo garante que é executado corretamente nos nós do Linux.

  3. Instale a Biblioteca Intel MPI em modo silencioso.

    clusrun /nodegroup:LinuxNodes bash /opt/intel/l_mpi_p_5.0.3.048/install.sh --silent /openfoam/silent.cfg
    

Configurar o MPI

Para fins de teste, deve adicionar as seguintes linhas ao /etc/security/limits.conf em cada um dos nós do Linux:

clusrun /nodegroup:LinuxNodes echo "*               hard    memlock         unlimited" `>`> /etc/security/limits.conf
clusrun /nodegroup:LinuxNodes echo "*               soft    memlock         unlimited" `>`> /etc/security/limits.conf

Reinicie os nós do Linux depois de atualizar o ficheiro limits.conf. Por exemplo, utilize o seguinte comando clusrun :

clusrun /nodegroup:LinuxNodes systemctl reboot

Depois de reiniciar, certifique-se de que a pasta partilhada está montada como /openfoam.

Compilar e instalar o OpenFOAM

Guarde o pacote de instalação transferido para o Pacote de Origem OpenFOAM (OpenFOAM-2.3.1.tgz neste exemplo) em C:\OpenFoam no nó principal para que os nós do Linux possam aceder a este ficheiro a partir de /openfoam. Em seguida, execute comandos clusrun para compilar o OpenFOAM em todos os nós do Linux.

  1. Crie uma pasta /opt/OpenFOAM em cada nó do Linux, copie o pacote de origem para esta pasta e extraia-o aí.

    clusrun /nodegroup:LinuxNodes mkdir -p /opt/OpenFOAM
    
    clusrun /nodegroup:LinuxNodes cp /openfoam/OpenFOAM-2.3.1.tgz /opt/OpenFOAM/
    
    clusrun /nodegroup:LinuxNodes tar -xzf /opt/OpenFOAM/OpenFOAM-2.3.1.tgz -C /opt/OpenFOAM/
    
  2. Para compilar o OpenFOAM com a Biblioteca de MPI Intel, configure primeiro algumas variáveis de ambiente para Intel MPI e OpenFOAM. Utilize um script bash chamado settings.sh para definir as variáveis. Pode encontrar um exemplo nos ficheiros de exemplo no final deste artigo. Coloque este ficheiro (guardado com terminações de linha do Linux) na pasta partilhada /openfoam. Este ficheiro também contém definições para os runtimes MPI e OpenFOAM que utiliza mais tarde para executar uma tarefa OpenFOAM.

  3. Instale os pacotes dependentes necessários para compilar o OpenFOAM. Consoante a distribuição do Linux, poderá ter de adicionar primeiro um repositório. Execute comandos clusrun semelhantes aos seguintes:

    clusrun /nodegroup:LinuxNodes zypper ar http://download.opensuse.org/distribution/13.2/repo/oss/suse/ opensuse
    
    clusrun /nodegroup:LinuxNodes zypper -n --gpg-auto-import-keys install --repo opensuse --force-resolution -t pattern devel_C_C++
    

    Se necessário, utilize o SSH para cada nó do Linux para executar os comandos para confirmar que são executados corretamente.

  4. Execute o seguinte comando para compilar o OpenFOAM. O processo de compilação demora algum tempo a ser concluído e gera uma grande quantidade de informações de registo para a saída padrão, pelo que utilize a opção /intercalada para apresentar o resultado intercalado.

    clusrun /nodegroup:LinuxNodes /interleaved source /openfoam/settings.sh `&`& /opt/OpenFOAM/OpenFOAM-2.3.1/Allwmake
    

    Nota

    O símbolo """ no comando é um símbolo de escape para o PowerShell. "'&" significa que o "&" faz parte do comando.

Preparar para executar uma tarefa OpenFOAM

Agora, prepare-se para executar uma tarefa de MPI chamada sloshingTank3D, que é um dos exemplos do OpenFoam, em dois nós do Linux.

Configurar o ambiente de runtime

Para configurar os ambientes de runtime para MPI e OpenFOAM nos nós do Linux, execute o seguinte comando numa janela de Windows PowerShell no nó principal. (Este comando é válido apenas para SUSE Linux.)

clusrun /nodegroup:LinuxNodes cp /openfoam/settings.sh /etc/profile.d/

Preparar dados de exemplo

Utilize a partilha de nós principal que configurou anteriormente para partilhar ficheiros entre os nós do Linux (montados como /openfoam).

  1. SSH para um dos nós de computação do Linux.

  2. Execute o seguinte comando para configurar o ambiente de runtime OpenFOAM, se ainda não o tiver feito.

    $ source /openfoam/settings.sh
    
  3. Copie o exemplo sloshingTank3D para a pasta partilhada e navegue para a mesma.

    $ cp -r $FOAM_TUTORIALS/multiphase/interDyMFoam/ras/sloshingTank3D /openfoam/
    
    $ cd /openfoam/sloshingTank3D
    
  4. Quando utiliza os parâmetros predefinidos deste exemplo, pode demorar dezenas de minutos a ser executado, pelo que poderá querer modificar alguns parâmetros para que seja executado mais rapidamente. Uma escolha simples é modificar as variáveis de passo de tempo deltaT e writeInterval no ficheiro system/controlDict. Este ficheiro armazena todos os dados de entrada relacionados com o controlo do tempo, leitura e escrita de dados da solução. Por exemplo, pode alterar o valor de deltaT de 0,05 para 0,5 e o valor de writeInterval de 0,05 para 0,5.

    Modificar variáveis de passo

  5. Especifique os valores pretendidos para as variáveis no ficheiro system/decomposeParDict. Este exemplo utiliza dois nós linux cada um com 8 núcleos, por isso, defina numberOfSubdomains como 16 e n de hierarchicalCoeffs como (1 1 16), o que significa executar OpenFOAM em paralelo com 16 processos. Para obter mais informações, veja OpenFOAM User Guide: 3.4 Running applications in parallel (Guia do Utilizador openFOAM: 3.4 Aplicações em execução em paralelo).

    Decompor processos

  6. Execute os seguintes comandos a partir do diretório sloshingTank3D para preparar os dados de exemplo.

    $ . $WM_PROJECT_DIR/bin/tools/RunFunctions
    
    $ m4 constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
    
    $ runApplication blockMesh
    
    $ cp 0/alpha.water.org 0/alpha.water
    
    $ runApplication setFields  
    
  7. No nó principal, deverá ver que os ficheiros de dados de exemplo são copiados para C:\OpenFoam\sloshingTank3D. (C:\OpenFoam é a pasta partilhada no nó principal.)

    Ficheiros de dados no nó principal

Ficheiro de anfitrião para mpirun

Neste passo, vai criar um ficheiro de anfitrião (uma lista de nós de computação) que o comando mpirun utiliza.

  1. Num dos nós do Linux, crie um ficheiro com o nome hostfile em /openfoam, para que este ficheiro possa ser acedido em /openfoam/hostfile em todos os nós do Linux.

  2. Escreva os nomes dos nós do Linux neste ficheiro. Neste exemplo, o ficheiro contém os seguintes nomes:

    SUSE12RDMA-LN1
    SUSE12RDMA-LN2
    

    Dica

    Também pode criar este ficheiro em C:\OpenFoam\hostfile no nó principal. Se escolher esta opção, guarde-a como um ficheiro de texto com terminações de linha do Linux (apenas LF, não CR LF). Isto garante que é executado corretamente nos nós do Linux.

    Wrapper de script do Bash

    Se tiver muitos nós do Linux e quiser que a sua tarefa seja executada apenas em alguns deles, não é boa ideia utilizar um ficheiro de anfitrião fixo, uma vez que não sabe quais os nós que serão atribuídos à sua tarefa. Neste caso, escreva um wrapper de script bash para mpirun para criar automaticamente o ficheiro anfitrião. Pode encontrar um wrapper de script bash de exemplo chamado hpcimpirun.sh no final deste artigo e guardá-lo como /openfoam/hpcimpirun.sh. Este script de exemplo faz o seguinte:

    1. Configura as variáveis de ambiente para mpirun e alguns parâmetros de comando adicionais para executar a tarefa de MPI através da rede RDMA. Neste caso, define as seguintes variáveis:

      • I_MPI_FABRICS=shm:dapl
      • I_MPI_DAPL_PROVIDER=ofa-v2-ib0
      • I_MPI_DYNAMIC_CONNECTION=0
    2. Cria um ficheiro de anfitrião de acordo com a variável de ambiente $CCP_NODES_CORES, que é definida pelo nó principal HPC quando a tarefa é ativada.

      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 alocados a esta tarefa.
      • <Name of node_n_...> - o nome de cada nó alocado a esta tarefa.
      • <Cores of node_n_...> - o número de núcleos no nó alocado a esta tarefa.

      Por exemplo, se a tarefa precisar de dois nós para ser executada, $CCP_NODES_CORES é semelhante a

      2 SUSE12RDMA-LN1 8 SUSE12RDMA-LN2 8
      
    3. Chama o comando mpirun e acrescenta dois parâmetros à linha de comandos.

      • --hostfile <hostfilepath>: <hostfilepath> - o caminho do ficheiro anfitrião que o script cria
      • -np ${CCP_NUMCPUS}: ${CCP_NUMCPUS} - uma variável de ambiente definida pelo nó principal do HPC Pack, que armazena o número total de núcleos alocados a esta tarefa. Neste caso, especifica o número de processos para mpirun.

Submeter uma tarefa OpenFOAM

Agora, pode submeter uma tarefa no Gestor de Clusters HPC. Tem de transmitir o script hpcimpirun.sh nas linhas de comandos para algumas das tarefas da tarefa.

  1. Ligue-se ao nó principal do cluster e inicie o Gestor de Clusters HPC.

  2. Na Gestão de Recursos, certifique-se de que os nós de computação do Linux estão no estado Online . Se não estiverem, selecione-os e clique em Trazer Online.

  3. Em Gestão de Tarefas, clique em Nova Tarefa.

  4. Introduza um nome para tarefa como sloshingTank3D.

    Detalhes do trabalho

  5. Em Recursos da tarefa, selecione o tipo de recurso como "Nó" e defina Mínimo como 2. Esta configuração executa a tarefa em dois nós linux, cada um com oito núcleos neste exemplo.

    Recursos de tarefas

  6. Clique em Editar Tarefas no painel de navegação esquerdo e, em seguida, clique em Adicionar para adicionar uma tarefa à tarefa. Adicione quatro tarefas à tarefa com as seguintes linhas de comandos e definições.

    Nota

    A execução source /openfoam/settings.sh configura os ambientes de runtime OpenFOAM e MPI, pelo que cada uma das seguintes tarefas chama-a antes do comando OpenFOAM.

    • Tarefa 1. Execute decomposePar para gerar ficheiros de dados para executar interDyMFoam em paralelo.

      • Atribuir um nó à tarefa
      • Linha de comandos - source /openfoam/settings.sh && decomposePar -force > /openfoam/decomposePar${CCP_JOBID}.log
      • Diretório de trabalho - /openfoam/sloshingTank3D

      Veja a seguinte figura. Pode configurar as restantes tarefas da mesma forma.

      Detalhes da Tarefa 1

    • Tarefa 2. Execute interDyMFoam em paralelo para calcular o exemplo.

      • Atribuir dois nós à tarefa
      • Linha de comandos - source /openfoam/settings.sh && /openfoam/hpcimpirun.sh interDyMFoam -parallel > /openfoam/interDyMFoam${CCP_JOBID}.log
      • Diretório de trabalho - /openfoam/sloshingTank3D
    • Tarefa 3. Execute o reconstructPar para unir os conjuntos de diretórios de tempo de cada processor_N_ diretório num único conjunto.

      • Atribuir um nó à tarefa
      • Linha de comandos - source /openfoam/settings.sh && reconstructPar > /openfoam/reconstructPar${CCP_JOBID}.log
      • Diretório de trabalho - /openfoam/sloshingTank3D
    • Tarefa 4. Execute o foamToEnsight em paralelo para converter os ficheiros de resultado openFOAM no formato EnSight e coloque os ficheiros do EnSight num diretório com o nome Ensight no diretório de casos.

      • Atribuir dois nós à tarefa
      • Linha de comandos - source /openfoam/settings.sh && /openfoam/hpcimpirun.sh foamToEnsight -parallel > /openfoam/foamToEnsight${CCP_JOBID}.log
      • Diretório de trabalho - /openfoam/sloshingTank3D
  7. Adicione dependências a estas tarefas por ordem de tarefa ascendente.

    Dependências de tarefas

  8. Clique em Submeter para executar esta tarefa.

    Por predefinição, o HPC Pack submete a tarefa como a sua conta de utilizador com sessão iniciada atual. Depois de clicar em Submeter, poderá ver uma caixa de diálogo a pedir-lhe para introduzir o nome de utilizador e a palavra-passe.

    Credenciais de tarefa

    Em algumas condições, o HPC Pack lembra-se das informações de utilizador que introduziu anteriormente e não mostra esta caixa de diálogo. Para que o HPC Pack o mostre novamente, introduza o seguinte comando numa linha de comandos e, em seguida, submeta a tarefa.

    hpccred delcreds
    
  9. A tarefa demora de dezenas de minutos a várias horas de acordo com os parâmetros que definiu para o exemplo. No mapa térmico, verá a tarefa em execução nos nós do Linux.

    Mapa térmico

    Em cada nó, são iniciados oito processos.

    Processos do Linux

  10. Quando a tarefa terminar, localize os resultados da tarefa em pastas em C:\OpenFoam\sloshingTank3D e os ficheiros de registo em C:\OpenFoam.

Ver resultados no EnSight

Opcionalmente, utilize o EnSight para visualizar e analisar os resultados da tarefa OpenFOAM.

  1. Depois de instalar o EnSight no nó principal, inicie-o.

  2. Abra C:\OpenFoam\sloshingTank3D\EnSight\sloshingTank3D.case.

    Verá um tanque no visualizador.

    Tanque no EnSight

  3. Crie um Isosurface a partir de internalMesh e, em seguida, escolha a variável alpha_water.

    Criar um isosurface

  4. Defina a cor para Isosurface_part criada no passo anterior. Por exemplo, defina-o como azul-água.

    Editar cor do isosurface

  5. Crie um volume Iso a partir de paredes ao selecionar paredes no painel Peças e clique no botão Isosurfaces na barra de ferramentas.

  6. Na caixa de diálogo, selecione Tipo como Isovolume e defina o intervalo Min of Isovolume como 0,5. Para criar o isovolume, clique em Criar com partes selecionadas.

  7. Defina a cor para Iso_volume_part criadas no passo anterior. Por exemplo, defina-o como azul de água profunda.

  8. Defina a cor das paredes. Por exemplo, defina-o como branco transparente.

  9. Agora, clique em Reproduzir para ver os resultados da simulação.

    Resultado do tanque

Ficheiros de exemplo

Ficheiro de configuração XML de exemplo para implementação de cluster pelo script do PowerShell

<?xml version="1.0" encoding="utf-8" ?>
<IaaSClusterConfig>
 <Subscription>
   <SubscriptionName>Subscription-1</SubscriptionName>
   <StorageAccount>allvhdsje</StorageAccount>
 </Subscription>
 <Location>Japan East</Location>  
 <VNet>
   <VNetName>suse12rdmavnet</VNetName>
   <SubnetName>SUSE12RDMACluster</SubnetName>
 </VNet>
 <Domain>
   <DCOption>HeadNodeAsDC</DCOption>
   <DomainFQDN>hpclab.local</DomainFQDN>
 </Domain>
 <Database>
   <DBOption>LocalDB</DBOption>
 </Database>
 <HeadNode>
   <VMName>SUSE12RDMA-HN</VMName>
   <ServiceName>suse12rdma-je</ServiceName>
   <VMSize>A8</VMSize>
   <EnableRESTAPI />
   <EnableWebPortal />
 </HeadNode>
 <LinuxComputeNodes>
   <VMNamePattern>SUSE12RDMA-LN%1%</VMNamePattern>
   <ServiceName>suse12rdma-je</ServiceName>
   <VMSize>A8</VMSize>
   <NodeCount>2</NodeCount>
     <ImageName>b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-hpc-v20150708</ImageName>
 </LinuxComputeNodes>
</IaaSClusterConfig>

Ficheiro de cred.xml de exemplo

<ExtendedData>
  <PrivateKey>-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAxJKBABhnOsE9eneGHvsjdoXKooHUxpTHI1JVunAJkVmFy8JC
qFt1pV98QCtKEHTC6kQ7tj1UT2N6nx1EY9BBHpZacnXmknpKdX4Nu0cNlSphLpru
lscKPR3XVzkTwEF00OMiNJVknq8qXJF1T3lYx3rW5EnItn6C3nQm3gQPXP0ckYCF
Jdtu/6SSgzV9kaapctLGPNp1Vjf9KeDQMrJXsQNHxnQcfiICp21NiUCiXosDqJrR
AfzePdl0XwsNngouy8t0fPlNSngZvsx+kPGh/AKakKIYS0cO9W3FmdYNW8Xehzkc
VzrtJhU8x21hXGfSC7V0ZeD7dMeTL3tQCVxCmwIDAQABAoIBAQCve8Jh3Wc6koxZ
qh43xicwhdwSGyliZisoozYZDC/ebDb/Ydq0BYIPMiDwADVMX5AqJuPPmwyLGtm6
9hu5p46aycrQ5+QA299g6DlF+PZtNbowKuvX+rRvPxagrTmupkCswjglDUEYUHPW
05wQaNoSqtzwS9Y85M/b24FfLeyxK0n8zjKFErJaHdhVxI6cxw7RdVlSmM9UHmah
wTkW8HkblbOArilAHi6SlRTNZG4gTGeDzPb7fYZo3hzJyLbcaNfJscUuqnAJ+6pT
iY6NNp1E8PQgjvHe21yv3DRoVRM4egqQvNZgUbYAMUgr30T1UoxnUXwk2vqJMfg2
Nzw0ESGRAoGBAPkfXjjGfc4HryqPkdx0kjXs0bXC3js2g4IXItK9YUFeZzf+476y
OTMQg/8DUbqd5rLv7PITIAqpGs39pkfnyohPjOe2zZzeoyaXurYIPV98hhH880uH
ZUhOxJYnlqHGxGT7p2PmmnAlmY4TSJrp12VnuiQVVVsXWOGPqHx4S4f9AoGBAMn/
vuea7hsCgwIE25MJJ55FYCJodLkioQy6aGP4NgB89Azzg527WsQ6H5xhgVMKHWyu
Q1snp+q8LyzD0i1veEvWb8EYifsMyTIPXOUTwZgzaTTCeJNHdc4gw1U22vd7OBYy
nZCU7Tn8Pe6eIMNztnVduiv+2QHuiNPgN7M73/x3AoGBAOL0IcmFgy0EsR8MBq0Z
ge4gnniBXCYDptEINNBaeVStJUnNKzwab6PGwwm6w2VI3thbXbi3lbRAlMve7fKK
B2ghWNPsJOtppKbPCek2Hnt0HUwb7qX7Zlj2cX/99uvRAjChVsDbYA0VJAxcIwQG
TxXx5pFi4g0HexCa6LrkeKMdAoGAcvRIACX7OwPC6nM5QgQDt95jRzGKu5EpdcTf
g4TNtplliblLPYhRrzokoyoaHteyxxak3ktDFCLj9eW6xoCZRQ9Tqd/9JhGwrfxw
MS19DtCzHoNNewM/135tqyD8m7pTwM4tPQqDtmwGErWKj7BaNZARUlhFxwOoemsv
R6DbZyECgYEAhjL2N3Pc+WW+8x2bbIBN3rJcMjBBIivB62AwgYZnA2D5wk5o0DKD
eesGSKS5l22ZMXJNShgzPKmv3HpH22CSVpO0sNZ6R+iG8a3oq4QkU61MT1CfGoMI
a8lxTKnZCsRXU1HexqZs+DSc+30tz50bNqLdido/l5B4EJnQP03ciO0=
-----END RSA PRIVATE KEY-----</PrivateKey>
  <PublicKey>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEkoEAGGc6wT16d4Ye+yN2hcqigdTGlMcjUlW6cAmRWYXLwkKoW3WlX3xAK0oQdMLqRDu2PVRPY3qfHURj0EEellpydeaSekp1fg27Rw2VKmEumu6Wxwo9HddXORPAQXTQ4yI0lWSerypckXVPeVjHetbkSci2foLedCbeBA9c/RyRgIUl227/pJKDNX2Rpqly0sY82nVWN/0p4NAyslexA0fGdBx+IgKnbU2JQKJeiwOomtEB/N492XRfCw2eCi7Ly3R8+U1KeBm+zH6Q8aH8ApqQohhLRw71bcWZ1g1bxd6HORxXOu0mFTzHbWFcZ9ILtXRl4Pt0x5Mve1AJXEKb username@servername;</PublicKey>
</ExtendedData>

Ficheiro silent.cfg de exemplo para instalar o MPI

# Patterns used to check silent configuration file
#
# anythingpat - any string
# filepat     - the file location pattern (/file/location/to/license.lic)
# lspat       - the license server address pattern (0123@hostname)
# snpat       - the serial number pattern (ABCD-01234567)

# accept EULA, valid values are: {accept, decline}
ACCEPT_EULA=accept

# optional error behavior, valid values are: {yes, no}
CONTINUE_WITH_OPTIONAL_ERROR=yes

# install location, valid values are: {/opt/intel, filepat}
PSET_INSTALL_DIR=/opt/intel

# continue with overwrite of existing installation directory, valid values are: {yes, no}
CONTINUE_WITH_INSTALLDIR_OVERWRITE=yes

# list of components to install, valid values are: {ALL, DEFAULTS, anythingpat}
COMPONENTS=DEFAULTS

# installation mode, valid values are: {install, modify, repair, uninstall}
PSET_MODE=install

# directory for non-RPM database, valid values are: {filepat}
#NONRPM_DB_DIR=filepat

# Serial number, valid values are: {snpat}
#ACTIVATION_SERIAL_NUMBER=snpat

# License file or license server, valid values are: {lspat, filepat}
#ACTIVATION_LICENSE_FILE=

# Activation type, valid values are: {exist_lic, license_server, license_file, trial_lic, serial_number}
ACTIVATION_TYPE=trial_lic

# Path to the cluster description file, valid values are: {filepat}
#CLUSTER_INSTALL_MACHINES_FILE=filepat

# Intel(R) Software Improvement Program opt-in, valid values are: {yes, no}
PHONEHOME_SEND_USAGE_DATA=no

# Perform validation of digital signatures of RPM files, valid values are: {yes, no}
SIGNING_ENABLED=yes

# Select yes to enable mpi-selector integration, valid values are: {yes, no}
ENVIRONMENT_REG_MPI_ENV=no

# Select yes to update ld.so.conf, valid values are: {yes, no}
ENVIRONMENT_LD_SO_CONF=no


Script de settings.sh de exemplo

#!/bin/bash

# impi
source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh
export MPI_ROOT=$I_MPI_ROOT
export I_MPI_FABRICS=shm:dapl
export I_MPI_DAPL_PROVIDER=ofa-v2-ib0
export I_MPI_DYNAMIC_CONNECTION=0

# openfoam
export FOAM_INST_DIR=/opt/OpenFOAM
source /opt/OpenFOAM/OpenFOAM-2.3.1/etc/bashrc
export WM_MPLIB=INTELMPI

Script de hpcimpirun.sh de exemplo

#!/bin/bash

# The path of this script
SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )"

# Set mpirun runtime evironment
source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh
export MPI_ROOT=$I_MPI_ROOT
export I_MPI_FABRICS=shm:dapl
export I_MPI_DAPL_PROVIDER=ofa-v2-ib0
export I_MPI_DYNAMIC_CONNECTION=0

# mpirun command
MPIRUN=mpirun
# Argument of "--hostfile"
NODELIST_OPT="--hostfile"
# Argument of "-np"
NUMPROCESS_OPT="-np"

# Get node information from ENVs
NODESCORES=(${CCP_NODES_CORES})
COUNT=${#NODESCORES[@]}

if [ ${COUNT} -eq 0 ]
then
    # CCP_NODES_CORES is not found or is empty, just run the mpirun without hostfile arg.
    ${MPIRUN} $*
else
    # Create the hostfile file
    NODELIST_PATH=${SCRIPT_PATH}/hostfile_$$

    # Get every node name and write into the hostfile file
    I=1
    while [ ${I} -lt ${COUNT} ]
    do
        echo "${NODESCORES[${I}]}" >> ${NODELIST_PATH}
        let "I=${I}+2"
    done

    # Run the mpirun with hostfile arg
    ${MPIRUN} ${NUMPROCESS_OPT} ${CCP_NUMCPUS} ${NODELIST_OPT} ${NODELIST_PATH} $*

    RTNSTS=$?
    rm -f ${NODELIST_PATH}
fi

exit ${RTNSTS}