Contêineres HPC em escala usando Podman
Saiba como o Podman está sendo modificado para funcionar em larga escala na computação de alto desempenho (HPC).
Este artigo descreve o trabalho recente realizado no NERSC em colaboração com a Red Hat para modificar o Podman (a ferramenta gerenciadora de pods) para execução em larga escala, um requisito fundamental para a computação de alto desempenho (HPC). Podman é uma ferramenta de código aberto para desenvolver, gerenciar e executar contêineres em sistemas Linux. Para mais detalhes sobre este trabalho, consulte nosso artigo que será publicado nos anais do CANOPIE-HPC Supercomputing 2022.
No vídeo de demonstração a seguir, mostramos como extrair uma imagem do registro NERSC para Perlmutter, gerar uma versão compactada da imagem usando podman-hpc e executar o benchmark EXAALT em grande escala (900 nós, 3600 GPUs) por meio de nosso
NERSC, o Centro Nacional de Computação Científica de Pesquisa Energética, é a instalação de computação de missão de produção do Departamento de Energia dos EUA que atende o DOE Office of Science, que financia uma ampla gama de pesquisas fundamentais e aplicadas. No primeiro semestre de 2022, mais de 700 utilizadores únicos utilizaram o Shifter, a solução de contentores atual da NERSC, e o interesse geral dos utilizadores em contentores está a crescer.
Embora o NERSC tenha demonstrado desempenho quase puro com o Shifter em larga escala, várias deficiências nos motivaram a explorar o Podman. O principal fator é que o Shifter não fornece nenhum utilitário de construção. Os usuários devem construir contêineres em seu próprio sistema local e enviar suas imagens ao NERSC por meio de um registro. Outro obstáculo é que o Shifter fornece segurança ao limitar o contêiner em execução aos privilégios do usuário que o iniciou. Finalmente, o Shifter é principalmente uma solução “interna”, portanto os usuários devem aprender uma nova tecnologia, e a equipe do NERSC tem o fardo adicional de manter este software.
Podman fornece uma solução para todos esses principais problemas. Podman é uma estrutura compatível com OCI que segue um conjunto de padrões da comunidade. Será familiar para usuários que usaram outras ferramentas compatíveis com OCI, como Docker. Ele também tem uma grande comunidade de usuários e desenvolvedores com mais de 15 mil estrelas no GitHub em outubro de 2022. A principal inovação que nos atraiu ao Podman são os contêineres sem raiz. Os contêineres sem raiz restringem elegantemente os privilégios usando um mapa subuid/subgid para permitir que o contêiner seja executado no namespace do usuário, mas com o que parecem ser privilégios de root completos. Podman também fornece funcionalidade de construção de contêiner que permitirá aos usuários construir imagens diretamente nos nós de login do Perlmutter, removendo um grande obstáculo em seus fluxos de trabalho de desenvolvimento.
[ Confira os artigos mais recentes do Podman sobre Habilitar Sysadmin. ]
Habilitar o Podman em grande escala no Perlmutter com desempenho quase nativo exigiu que abordássemos a integração, escalabilidade e desempenho do site. Além disso, desenvolvemos dois scripts wrapper para obter dois modos de operação: Podman container-per-process
e podman-exec
. O modo Podman container-per-process
descreve a situação em que muitos processos estão em execução no nó (geralmente em um aplicativo MPI), com um contêiner individual em execução para cada processo. O modo podman-exec
descreve a situação em que há um único contêiner em execução por nó, mesmo se houver vários processos MPI.
Executamos vários benchmarks com podman-hpc
em Perlmutter para medir o desempenho de implementações bare metal: Shifter, Podman container-per-process
e podman-exec
modo. O benchmark EXAALT executa o aplicativo de dinâmica molecular LAMMPS, o benchmark Pynamic simula importações de pacotes Python e invocações de funções, e o benchmark DeepCAM é um aplicativo de aprendizado profundo de segmentação de dados climáticos. Em geral, os benchmarks sugerem desempenho comparável entre casos bare metal, Shifter e podman-exec
. A sobrecarga de inicialização incorrida no Podman container-per-process
pode ser vista nos resultados do Pynamic e do DeepCAM. Em geral, podman-exec
foi nossa configuração de melhor desempenho, então este é o modo no qual concentraremos nossos esforços de desenvolvimento futuros.
(Laurie Stephey, CC BY-SA 4.0)
Resultados de nosso benchmark EXAALT de forte escala em 32, 64, 128 e 256 nós. A média de dois resultados de execução bare metal é mostrada em vermelho, os resultados de execução do Shifter são mostrados em azul, os resultados de execução de container-per-process
do Podman são mostrados em verde escuro e podman-exec
Os resultados do modo são mostrados em verde claro com barras de erro correspondentes.
(Laurie Stephey, CC BY-SA 4.0)
Os resultados do benchmark Pynamic para bare metal (vermelho), Shifter (azul), modo podman-exec
(verde) e modo Podman container-per-process
(light -green) em dois tamanhos de trabalho (128 e 256 nós) usando 64 tarefas por nó. Todas as configurações foram executadas três vezes.
(Laurie Stephey, CC BY-SA 4.0)
Os resultados do benchmark de escala forte MLPerf TM DeepCAM para Shifter (azul), Podman container-per-process
(verde claro) e modo podman-exec
(verde escuro) em uma variedade de tamanhos de trabalho (16, 32, 64 e 128 nós de GPU Perlmutter). Separamos os dados de tempo em inicialização do contêiner, inicialização do treinamento e tempo de execução do treinamento.
Estamos entusiasmados com os resultados que vimos até agora, mas ainda temos trabalho a fazer antes de podermos abrir o Podman a todos os usuários do NERSC. Para melhorar a experiência do usuário, pretendemos explorar a adição da integração Slurm para remover parte da complexidade de trabalhar com scripts wrapper aninhados, especialmente para o caso podman-exec
. Também pretendemos colocar nossos scripts e binários podman-hpc
nas imagens de inicialização Perlmutter de todos os nós, portanto, não será mais necessário prepará-los para cada nó. Esperamos resolver algumas das limitações da funcionalidade do gancho do OCI (por exemplo, a incapacidade de definir variáveis de ambiente) com a comunidade do OCI. Finalmente, nosso objetivo é fazer com que grande parte do nosso trabalho seja transferido para o próprio Podman, para que a comunidade maior do Podman possa alavancar nosso trabalho.
Esses resultados não foram verificados pela MLCommons Association. Observe que estamos medindo o tempo para N épocas, que não é a metodologia oficial de medição do MLPerf.