Executar NAMD com Microsoft HPC Pack em linux computação 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 uma maneira de executar uma carga de trabalho de computação de alto desempenho Linux (HPC) em máquinas virtuais Azure. Aqui, você configura um cluster Microsoft HPC Pack em Azure com nó indicadores Linux e executar uma simulação NAMD para calcular e visualizar a estrutura de um grande sistema biomolecular.
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 NAMD (para o programa Nanoscale Molecular Dynamics) é um pacote de dinâmica molecular paralelo projetado para simulação de alto desempenho de grandes sistemas biomoleculares contendo até milhões de átomos. Exemplos destes sistemas incluem vírus, estruturas celulares e grandes proteínas. O NAMD escala para centenas de núcleos para simulações típicas e para mais de 500.000 núcleos para as maiores simulações.
- O Microsoft HPC Pack fornece funcionalidades para executar aplicações HPC em larga escala e aplicações paralelas em conjuntos de computadores no local ou máquinas virtuais Azure. Desenvolvido originalmente como solução para cargas de trabalho do Windows HPC, o HPC Pack suporta agora a execução de aplicações Linux HPC em VMs de nó de cálculo Linux implantados num cluster HPC Pack. Ver Começar com os nós de computação Linux num cluster HPC Pack em Azure para uma introdução.
Pré-requisitos
- Cluster de pacote HPC com nós de computação Linux - Implementar um cluster de pacotes HPC com nós de computação Linux no Azure usando um modelo de Resource Manager Azure ou um script Azure PowerShell. Ver Começar com os nós de computação Linux num cluster HPC Pack em Azure para os pré-requisitos e passos para qualquer uma das opções. Se escolher a opção de implementação do script PowerShell, consulte o ficheiro de configuração da amostra nos ficheiros de amostra no final deste artigo. Este ficheiro configura um cluster HPC Pack baseado em Azure, composto por um nó de cabeça R2 Windows Server 2012 e quatro grandes nós de cálculo CentOS 6.6. Personalize este ficheiro conforme necessário para o seu ambiente.
- Software NAMD e ficheiros tutoriais - Descarregue o software NAMD para Linux a partir do site NAMD (registo obrigatório). Este artigo baseia-se na versão 2.10 do NAMD e utiliza o arquivo Linux-x86_64 (Intel/AMD de 64 bits com Ethernet). Descarregue também os ficheiros tutoriais da NAMD. Os downloads são .tar ficheiros e precisa de uma ferramenta Windows para extrair os ficheiros no nó de cabeça do cluster. Para extrair os ficheiros, siga as instruções mais tarde neste artigo.
- VMD (opcional) - Para ver os resultados do seu trabalho naMD, descarregue e instale o programa de visualização molecular VMD num computador à sua escolha. A versão atual é 1.9.2. Consulte o site de descarregamento VMD para começar.
Criar confiança mútua entre nós de computação
Executar um trabalho de nó cruzado em vários nós 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 microsoft HPC Pack IaaS, o script configura automaticamente a confiança mútua permanente para a conta de administrador que especifica. Para os utilizadores não administradores que cria no domínio do cluster, tem de criar confiança mútua temporária entre os nós quando lhes é atribuído um trabalho. Então, destrua a relação depois do trabalho estar completo. Para isso, para cada utilizador, forneça um par de chaves RSA ao cluster que o HPC Pack utiliza para estabelecer a relação de confiança. As instruções seguem-se.
Gere um par de chaves RSA
É fácil gerar um par de chaves RSA, que contém uma chave pública e uma chave privada, executando o comando Linux ssh-keygen .
Aceda a um computador Linux.
Execute o seguinte comando:
ssh-keygen -t rsa
Nota
Prima Insira para utilizar as definições predefinidos até que o comando esteja concluído. Não introduza uma palavra-passe aqui; quando solicitado para uma palavra-passe, basta premir Enter.
Mude o diretório para o diretório ~/ssh. A chave privada está guardada em id_rsa e a chave pública em id_rsa.pub.
Adicione o par de chaves ao cluster HPC Pack
Conecte-se por Remote Desktop ao nó de cabeça VM utilizando as credenciais de domínio fornecidas quando implementou o cluster (por exemplo, hpc\clusteradmin). Gere o aglomerado a partir do nó da cabeça.
Utilize os procedimentos padrão do Windows Server para criar uma conta de utilizador de domínio no domínio ative do cluster. Por exemplo, utilize a ferramenta Ative Directory User and Computers no nó de cabeça. Os exemplos neste artigo pressupõem que cria um utilizador de domínio chamado hpcuser no domínio hpclab (hpclab\hpcuser).
Adicione o utilizador de domínio ao cluster HPC Pack como utilizador de cluster. Para obter instruções, consulte Adicionar ou remover os utilizadores do cluster.
Crie um ficheiro nomeado C:\cred.xml e copie os dados-chave da RSA nele. Pode encontrar um exemplo nos ficheiros de amostras no final deste artigo.
<ExtendedData> <PrivateKey>Copy the contents of private key here</PrivateKey> <PublicKey>Copy the contents of public key here</PublicKey> </ExtendedData>
Abra um Pedido de Comando e introduza o seguinte comando para definir os dados de credenciais para a conta hpclab\hpcuser. Utiliza o parâmetro de dados estendidos para passar o nome do ficheiro C:\cred.xml que criou para os dados-chave.
hpccred setcreds /extendeddata:c:\cred.xml /user:hpclab\hpcuser /password:<UserPassword>
Este comando completa-se com sucesso sem saída. Depois de definir as credenciais para as contas de utilizador, precisa de executar trabalhos, guarde o ficheiro cred.xml num local seguro ou elimine-o.
Se tiver gerado o par de chaves RSA num dos seus nós Linux, lembre-se de apagar as teclas depois de as utilizar. O HPC Pack não cria confiança mútua se encontrar um ficheiro id_rsa existente ou id_rsa.pub.
Importante
Não recomendamos executar um trabalho Linux como administrador de cluster num cluster compartilhado, porque um trabalho submetido por um administrador funciona sob a conta raiz nos nós Linux. Um trabalho submetido por um utilizador não administrador é executado numa conta de utilizador linux local com o mesmo nome que o utilizador do trabalho. Neste caso, o HPC Pack cria uma confiança mútua para este utilizador Linux em todos os nós atribuídos ao trabalho. Pode configurar manualmente o utilizador Linux nos nós Linux antes de executar o trabalho, ou o HPC Pack cria o utilizador automaticamente quando o trabalho é submetido. Se o HPC Pack criar o utilizador, o HPC Pack elimina-o depois de concluído o trabalho. Para reduzir a ameaça à segurança, as chaves são removidas após o trabalho terminar nos nós.
Configurar uma partilha de ficheiros para os nóns Linux
Agora crie uma partilha de ficheiros SMB e monte a pasta partilhada em todos os nós Linux para permitir que os nós Linux acedam a ficheiros NAMD com um caminho comum. Seguem-se os passos para montar uma pasta partilhada no nó de cabeça. Recomenda-se uma partilha para distribuições como o CentOS 6.6 que atualmente não suporta o serviço Azure File. Se os seus nós Linux suportam uma partilha de FicheiroS Azure, consulte como utilizar o armazenamento de ficheiros Azure com o Linux. Para opções adicionais de partilha de ficheiros com o HPC Pack, consulte Começar com os nós de computação Linux num Cluster de Pacotes HPC em Azure.
Crie uma pasta no nó de cabeça e partilhe-a com todos definindo privilégios de Leitura/Escrita. Neste exemplo, \\CentOS66HN\Namd é o nome da pasta, onde CentOS66HN é o nome de hospedeiro do nó de cabeça.
Crie uma sub-página chamada namd2 na pasta partilhada. Na namd2, crie outra sub-página chamada Namdsample.
Extrair os ficheiros NAMD na pasta utilizando uma versão Windows de alcatrão ou outro utilitário Windows que funcione em .tar arquivos.
- Extrair o arquivo de alcatrão NAMD para \\CentOS66HN\Namd\namd2.
- Extrair os ficheiros tutoriais em \\CentOS66HN\Namd\namd2\namdsample.
Abra uma janela Windows PowerShell e corram os seguintes comandos para montar a pasta partilhada nos nós Linux.
clusrun /nodegroup:LinuxNodes mkdir -p /namd2 clusrun /nodegroup:LinuxNodes mount -t cifs //CentOS66HN/Namd/namd2 /namd2 -o vers=2.1`,username=<username>`,password='<password>'`,dir_mode=0777`,file_mode=0777
O primeiro comando cria uma pasta chamada /namd2 em todos os nós do grupo LinuxNodes. O segundo comando monta a pasta partilhada //CentOS66HN/Namd/namd2 na pasta com dir_mode e file_mode bits definidos para 777. O nome de utilizador e a palavra-passe no comando devem ser as credenciais de um utilizador no nó de cabeça.
Nota
O símbolo "'" no segundo comando é um símbolo de fuga para o PowerShell. "'", significa que o "" (personagem de vírgula) faz parte do comando.
Crie um roteiro bash para executar um trabalho naMD
O seu trabalho naMD precisa de um ficheiro não listado para o charmrun para determinar o número de nós a utilizar ao iniciar processos NAMD. Você usa um script Bash que gera o ficheiro nodelist e executa charmrun com este ficheiro nodelist. Em seguida, pode submeter um trabalho NAMD no HPC Cluster Manager que chama este script.
Utilizando um editor de texto à sua escolha, crie um script Bash na pasta /namd2 que contenha os ficheiros do programa NAMD e nomeie-o hpccharmrun.sh. Para uma rápida prova de conceito, copie o exemplo hpccharmrun.sh script fornecido no final deste artigo e vá para Submeter um trabalho NAMD.
Dica
Guarde o seu script como ficheiro de texto com terminações da linha Linux (apenas LF, não CR LF). Isto garante que funciona corretamente nos nós Linux.
Seguem-se detalhes sobre o que este guião de bash faz.
Defina algumas variáveis.
#!/bin/bash # The path of this script SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )" # Charmrun command CHARMRUN=${SCRIPT_PATH}/charmrun # Argument of ++nodelist NODELIST_OPT="++nodelist" # Argument of ++p NUMPROCESS="+p"
Obtenha informações sobre nó das variáveis ambientais. $NODESCORES armazena uma lista de palavras divididas de $CCP_NODES_CORES. $COUNT é do tamanho de $NODESCORES.
# Get node information from the environment variables NODESCORES=(${CCP_NODES_CORES}) COUNT=${#NODESCORES[@]}
O formato para a variável $CCP_NODES_CORES é o seguinte:
<Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>…
Esta variável lista o número total de nós, nomes de nós e número de núcleos em cada nó que são atribuídos ao trabalho. Por exemplo, se o trabalho precisar de 10 núcleos para executar, o valor de $CCP_NODES_CORES é semelhante a:
3 CENTOS66LN-00 4 CENTOS66LN-01 4 CENTOS66LN-03 2
Se a variável $CCP_NODES_CORES não estiver definida, inicie a corrida de charme diretamente. (Isto só deve ocorrer quando executar este script diretamente nos seus nós Linux.)
if [ ${COUNT} -eq 0 ] then # CCP_NODES is_CORES is not found or is empty, so just run charmrun without nodelist arg. #echo ${CHARMRUN} $* ${CHARMRUN} $*
Ou criar um ficheiro não-lista para charme.
else # Create the nodelist file NODELIST_PATH=${SCRIPT_PATH}/nodelist_$$ # Write the head line echo "group main" > ${NODELIST_PATH} # Get every node name and number of cores and write into the nodelist file I=1 while [ ${I} -lt ${COUNT} ] do echo "host ${NODESCORES[${I}]} ++cpus ${NODESCORES[$(($I+1))]}" >> ${NODELIST_PATH} let "I=${I}+2" done
Executar charmrun com o ficheiro nodelist, obter o seu estado de devolução e remover o ficheiro nodelist no final.
${CCP_NUMCPUS} é outra variável ambiental definida pelo nó de cabeça do Pacote HPC. Armazena o número total de núcleos atribuídos a este trabalho. Usamo-lo para especificar o número de processos para o charmrun.
# Run charmrun with nodelist arg #echo ${CHARMRUN} ${NUMPROCESS}${CCP_NUMCPUS} ${NODELIST_OPT} ${NODELIST_PATH} $* ${CHARMRUN} ${NUMPROCESS}${CCP_NUMCPUS} ${NODELIST_OPT} ${NODELIST_PATH} $* RTNSTS=$? rm -f ${NODELIST_PATH} fi
Saia com o estado de retorno charmrun .
exit ${RTNSTS}
Segue-se a informação no ficheiro nodelist, que o script gera:
group main
host <Name of node1> ++cpus <Cores of node1>
host <Name of node2> ++cpus <Cores of node2>
…
Por exemplo:
group main
host CENTOS66LN-00 ++cpus 4
host CENTOS66LN-01 ++cpus 4
host CENTOS66LN-03 ++cpus 2
Submeter um trabalho naMD
Agora está pronto para submeter um trabalho na NAMD no HPC Cluster Manager.
Ligue-se ao nó da cabeça do cluster e inicie o HPC Cluster Manager.
Na Gestão de Recursos, certifique-se de que os nós de computação Linux estão no estado online . Se não estiverem, selecione-os e clique em Bring Online.
Em Gestão de Emprego, clique em New Job.
Insira um nome para trabalho como hpccharmrun.
Na página 'Detalhes de Trabalho ', em Recursos de Trabalho, selecione o tipo de recurso como Nó e desaprote o Mínimo para 3. , nós gerimos o trabalho em três nós Linux e cada nó tem quatro núcleos.
Clique em Editar Tarefas na navegação à esquerda e, em seguida, clique em Adicionar para adicionar uma tarefa ao trabalho.
Na página 'Detalhes de Tarefa' e I/O, decreta os seguintes valores:
Linha de comando -
/namd2/hpccharmrun.sh ++remote-shell ssh /namd2/namd2 /namd2/namdsample/1-2-sphere/ubq_ws_eq.conf > /namd2/namd2_hpccharmrun.log
Dica
A linha de comando anterior é um único comando sem quebras de linha. Envolve aparecer em várias linhas sob a linha de comando.
Diretório de trabalho - /namd2
Mínimo - 3
Nota
Você define o diretório de trabalho aqui porque charmrun tenta navegar para o mesmo diretório de trabalho em cada nó. Se o diretório de trabalho não estiver definido, o HPC Pack inicia o comando numa pasta com o nome aleatório criada num dos nós Linux. Isto causa o seguinte erro nos outros nós:
/bin/bash: line 37: cd: /tmp/nodemanager_task_94_0.mFlQSN: No such file or directory.
Para evitar este problema, especifique um caminho de pasta que possa ser acedido por todos os nós como diretório de trabalho.
Clique em OK e, em seguida, clique em Enviar para executar este trabalho.
Por predefinição, o HPC Pack submete o trabalho como a sua conta de utilizador com sessão corrente. Uma caixa de diálogo pode pedir-lhe para introduzir o nome de utilizador e palavra-passe depois de clicar em Enviar.
Em algumas condições, o HPC Pack lembra-se da informação do utilizador que introduz antes e não mostra esta caixa de diálogo. Para fazer o HPC Pack mostrá-lo novamente, insira o seguinte comando num Pedido de Comando e, em seguida, submeta o trabalho.
hpccred delcreds
O trabalho leva vários minutos para terminar.
Encontre o registo de trabalho em \\Namd\n\namd2_hpccharmrun.log amd2 e os ficheiros de saída em \\Namd\namd2\namdsample\1-2-esfera.
Opcionalmente, inicie o VMD para ver os resultados do seu trabalho. Os passos para visualizar os ficheiros de saída do NAMD (neste caso, uma molécula de proteína de ubiquitina numa esfera de água) estão fora do âmbito deste artigo. Consulte o Tutorial NAMD para mais detalhes.
Ficheiros de amostras
Ficheiro de configuração XML da amostra para implantação de cluster por script PowerShell
<?xml version="1.0" encoding="utf-8" ?>
<IaaSClusterConfig>
<Subscription>
<SubscriptionName>Subscription-1</SubscriptionName>
<StorageAccount>mystorageaccount</StorageAccount>
</Subscription>
<Location>West US</Location>
<VNet>
<VNetName>MyVNet</VNetName>
<SubnetName>Subnet-1</SubnetName>
</VNet>
<Domain>
<DCOption>HeadNodeAsDC</DCOption>
<DomainFQDN>hpclab.local</DomainFQDN>
</Domain>
<Database>
<DBOption>LocalDB</DBOption>
</Database>
<HeadNode>
<VMName>CentOS66HN</VMName>
<ServiceName>MyHPCService</ServiceName>
<VMSize>Large</VMSize>
<EnableRESTAPI />
<EnableWebPortal />
</HeadNode>
<LinuxComputeNodes>
<VMNamePattern>CentOS66LN-%00%</VMNamePattern>
<ServiceName>MyLnxCNService</ServiceName>
<VMSize>Large</VMSize>
<NodeCount>4</NodeCount>
<ImageName>5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-66-20150325</ImageName>
</LinuxComputeNodes>
</IaaSClusterConfig>
Arquivo de cred.xml de amostra
<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>
Roteiro de hpccharmrun.sh amostra
#!/bin/bash
# The path of this script
SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )"
# Charmrun command
CHARMRUN=${SCRIPT_PATH}/charmrun
# Argument of ++nodelist
NODELIST_OPT="++nodelist"
# Argument of ++p
NUMPROCESS="+p"
# Get node information from ENVs
# CCP_NODES_CORES=3 CENTOS66LN-00 4 CENTOS66LN-01 4 CENTOS66LN-03 4
NODESCORES=(${CCP_NODES_CORES})
COUNT=${#NODESCORES[@]}
if [ ${COUNT} -eq 0 ]
then
# If CCP_NODES_CORES is not found or is empty, just run the charmrun without nodelist arg.
#echo ${CHARMRUN} $*
${CHARMRUN} $*
else
# Create the nodelist file
NODELIST_PATH=${SCRIPT_PATH}/nodelist_$$
# Write the head line
echo "group main" > ${NODELIST_PATH}
# Get every node name & cores and write into the nodelist file
I=1
while [ ${I} -lt ${COUNT} ]
do
echo "host ${NODESCORES[${I}]} ++cpus ${NODESCORES[$(($I+1))]}" >> ${NODELIST_PATH}
let "I=${I}+2"
done
# Run the charmrun with nodelist arg
#echo ${CHARMRUN} ${NUMPROCESS}${CCP_NUMCPUS} ${NODELIST_OPT} ${NODELIST_PATH} $*
${CHARMRUN} ${NUMPROCESS}${CCP_NUMCPUS} ${NODELIST_OPT} ${NODELIST_PATH} $*
RTNSTS=$?
rm -f ${NODELIST_PATH}
fi
exit ${RTNSTS}